阅读更多
【编者按】本文作者张忠良是滴答清单Apple Watch版应用的开发工程师,他用了一周的时间使用纯Objective-C语言完成了Apple Watch版滴答清单应用的开发工作。在这里,他从开发角度阐述了个人对于Apple Watch的理解,以及Apple Watch应用开发过程的经验心得,适合对iOS开发有一定了解的同学。

首先,开发Apple Watch应用必须掌握WatchKit Framework,这是Apple专门为Apple Watch开发而推出的一套新框架。这套框架中所有的类都是“WK”开头的,包括视图控制器类WKInterfaceController、WKUserNotificationInterfaceController,其他UI元素类比如WKInterfaceGroup、WKInterfaceTable、WKInterfaceLabel、WKInterfaceButton等。具体用法就不在这里赘述了,想要系统地学习WatchKit可以阅读Chun Tips的《走进WatchKit Framework》。

不过,我个人还是强烈建议大家有时间最好还是仔细看一遍官方原版文档,在帮助你更好地理解API来进行开发的同时,还能从一定程度上降低产生bug的几率。



滴答清单Apple Watch版本的开发基本上还是比较顺利的,有设计师和产品经理洒下的血和泪,本人差不多搞了一周,目前应用已经完成上线。在此,具体的开发过程就不详述了,无非是UI搭建和逻辑处理。简单讲几个开发中需要注意的点,希望对大家有所帮助。
  • 从技术上讲,WatchKit App类似于之前iOS 8上新推出的App Extension(应用扩展),比如Today Extension(今天扩展)和Share Extension(分享扩展)。只要你对iOS开发有一定经验,UI的搭建相对是比较容易的。重点在于如何让iPhone和Apple Watch上的数据同步,这时候问题来了,how?

请看:
-(NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier;

iOS 8之后,NSFileManager中有了这么个方法,假设你的应用已经支持了App Group(稍后会介绍),那么你肯定也有了groupIdentifier,调用这个方法会返回一个本地文件目录的URL。简单讲它就是一个共享文件夹,任何应用或者扩展,只要支持App group并拥有相同的Group ID,都对它有读写权限,这样一来数据同步就不是问题了。想详细学习这个的可以阅读《iOS 8 Extensions》,我只能说看了这个你不懂也难!不过,还是推荐大家阅读Apple官方文档,一样的道理,原版的才是最好的。



虽然数据是能够同步了,但是我如何在Apple Watch上知道iPhone上刚刚创建了一条新任务呢?不用想了,造轮子的成本又高且容易出问题,这里推荐MMWormhole,它是一个比较成熟稳定的第三方开源库,用在App Group内的通信,非常方便好用。原理就不讲了,有需要的同学可以去下载研究一下。
  • 搭建UI的时候你会发现Apple Watch并不支持AutoLayout(如果你还在手动布局,不要挣扎了孩子,好好学习AutoLayout),那么该怎么办?难道只能纯代码布局了么?

Apple当然不会这么土,WatchKit里有个类叫做WKInterfaceGroup,乍一看像是UIView,但是这货其实是用来布局的。从Storyboard中拉一个WKInterfaceGroup出来,在属性检查器(Attributes Inspector)中有个Layout属性,通过设置成Horizontal或Vertical,就可以让这个group下所有的子视图水平排列或竖直排列。再结合AutoLayout的知识,就可以轻松满足设计师大人的任何非人类要求啦。
  • WatchKit中的WKInterfaceTable不同于UITableView,没有dataSource和delegate,只能通过主动方式填充并展现数据。对应每一种不同类型的cell,都需要为它构造一个rowController(继承自NSObject),这个rowController负责往这种类型的row中填充需要展现的内容。

方法如下:
-(id)rowControllerAtIndex:(NSInteger)index;

通过调用这个方法得到指定行的rowController,再调用这个rowController的自定义方法来进行渲染。例如:
- (void)configureRowWithDataModel:(id)dataModel;  

另外,如果要插入行和删除行,则要在上述操作之前先调用:
-(void)insertRowsAtIndexes:(NSIndexSet *)rows withRowType:(NSString *)rowType;  
-(void)deleteRowsAtIndexes:(NSIndexSet *)rows;  

到这里一切顺利,但不要太开心,Apple在这里挖了个大坑,请大家千万要踩进去!

我们在iOS开发中如果要刷新UITableView,只要更新数据源后再调用reloadData方法就可以。但是就像之前说的,WKInterfaceTable并没有主动刷新数据的方法,只能通过调用 [table setRowTypes:nil] 方法先清除所有数据,再用新数据源重新填充一遍。仅仅是这样就算了,还有更凶残的。

假设你现在视图控制器A中,然后被push到了视图控制器B,那么如果你在B中刷新A中的WKInterfaceTable是没有用的。但是不是完全没用,经过多次测试,我发现,数据源确实是被更新了,但是界面上的内容并没有刷新。也就是说,数据源和界面没有保持一致。翻遍官方文档和各大技术论坛,都没有找到解决方案,好不容易在开发者论坛发现这似乎是Apple的一个bug。



暂时的解决方法是,在需要刷新的时候记录一个标记位,然后在willActivate的时候根据这个标记位进行延时刷新。一个很明显的副作用就是刷新时会产生跳动,相信之后的版本Apple应该会修复这个问题。

再谈几点个人体会:

个人觉得不管是对Apple Watch持有乐观期望或是悲观态度,都只是针对智能手表这个新生平台而非产品本身。我相信任何一个挑剔的人都没办法从这个艺术品里挑出什么刺来。Apple在预售开始当天就不得不延迟了发货时间就很好的说明了它的魅力。

也许你们会说这是因为人们普遍会对新鲜事物产生好奇并积极关注它,并不完全是因为它很优秀,但是我们不得不承认,Apple Watch正在冲击智能手表平台甚至整个生态圈。健康监测、远程控制、移动支付,像这些操作成本小、周期短、时效性高的任务如果全都能托付给它,那我们的生活是不是会变得更加简单?



就拿滴答清单来说,一开始开发Apple Watch版本想到的就是加强提醒。手机放在兜里或者放在一边的时候,正好有一条任务来了,很可能没接到(我自己就经常遇这种情况),等想起来去查看手机的时候已经晚了。和手机不一样,Apple Watch戴在手上几乎不会出现人机分离,任务提醒也不容易被miss掉。

所以我们比较看重的是它在移动场景中表现出来的优势:解放双手,随时随地。手机也很方便,但也不会有人总是拿着手机吧,一旦手机不在手上的时候,很多事情就没法处理。虽然Apple Watch屏幕比较小,但某些场景下进行操作的时候会简便很多。

未来规划的话,也会主要从Apple Watch本身的优势出发,结合我们产品的一些特性。当前我们开发的Apple Watch应用,就像精简版的手机应用,只是加强了辅助功能。以后可能会尝试做一些跟手机应用不一样的东西,Apple Watch本身有一些强大的功能,比如监测用户的心率等数据,我们可能会根据这些数据做一些实时的智能提醒,当然都还只是些想法,有待检验。
  • 大小: 64.7 KB
  • 大小: 30.8 KB
  • 大小: 78.4 KB
  • 大小: 16.8 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 常见贴片元件封装

    TO-268AA DO-215AB SOT883 TO-263 D2PAK DO-215AA SOT753 TO-263-7 DO-214AC SOT666 TO-263-5 DO-214AB SOT663 TO-263-3 DO-214AA SOT552-1 ...

  • Apple Watch App开发基础

    Apple Watch App开发基础 本节介绍了Watch App开发过程中所需的一些基础技术知识、开发技巧、优化和提交指南以及相关的完整实例教程。 基础知识可帮你更好地了解Watch App开发的方方面面,而实例教程则是在...

  • iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品

    新闻\\Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品:Apple 正式发布了 iPhone 7 / 7 Plus、Apple Watch 2 新品,带来 AirPods 无线耳机,并把马里奥带进了 iOS。iPhone 7 新增亮黑色,移除3.5mm 耳机孔,...

  • Apple watch实现Personal Scrum

    但是Apple Watch模块化的表盘提供了一个深度定制并整合Personal Scrum各个步骤的统一交互界面,从个人使用经验上是一个非常理想的选项。 随时可得。除了晚上充电你的Apple Watch只要一抬手就可使用,这比手机和...

  • 中国移动开发者大会PPT集萃(一):核心技术与应用开发实践

    2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的“MDCC 2016 移动开发者大会• 中国”(Mobile Developer Conference China)将在北京• 国家会议中心召开,来自iOS、Android、跨平台开发、产品设计、VR开发...

  • Apple Watch平台认知与产品设计

    时至今日,Apple Watch已然高调进入我们的视野,却仍未正式进入我们的世界,绝大多数人的信息来源仍限于Apple官方的介绍。大家有期许,有探索,也有失望。持负面态度者的普遍看法是,“这些事情在iPhone上都能做…...

  • iOS应用架构谈(三):网络层设计方案

    前言 网络层在一个App中也是一...其它的ASIHttpRequest,MKNetworkKit啥的其实也都还不错,但前者已经弃坑,后者也在弃坑的边缘。在实际的App开发中,Afnetworking已经成为了事实上各大App的标准配置。 网络层在

  • 在Apple Watch之前,智能手表凭什么生存?

    难道没有Apple Watch就不过了? 但据宅客君(letshome)这两天夜观星象得到的“智能手表”的热度走势:Apple Watch的出品,至少把智能手表概念曝光度提高了100倍。所以这个问题其实是在强有力品牌介入之前,(国内的...

  • 记录遇到的web前端开发面试题(八股文)

    深度/广度优先遍历 十一、其他问题 总结 前言 记录一下在面试过程中遇到的以及搜罗到的web前端开发岗位的面试题,以八股为目录,部分题目会记录公司出处,先记录题目,答案之后补充,欢迎各位小伙伴评论区补充。...

  • 浅谈sketch插件开发(三)

    sketch是什么?...该软件的特点是容易理解,上手简单,对于有设计经验的设计师来说,入门门槛很低。 sketch是用Objective-C构建的,是一套原生Objective-C开发的软件。Objective-C类通过Bridge (CocoaScript.

  • esp32 cam工作电流_我如何在家工作:Cam的生产力之痛

    如果我了解到在家工作的一件事,那就是必须绝对要有一个专用的工作区-与客厅或卧室共享您的工作区并不是一件很有趣的事(我是凭经验说的)。 Technically, my workspace is still a shared space, but I share it ...

  • 成功入职阿里后,我总结了这3大求职经验

    一、找工作之——简历 ...作为设计师,最大的工作经验就是你做的项目,但每个项目大小不一,可能会包含许多功能模块,而这些都可以简要介绍在自己的项目中,增加自己的工作内容的丰富度。因为,作为求职者,是暂时不知

  • 浅谈2018iOS开发就业形式

    目前iOS不仅运用于的苹果公司的现有产品(iPhone、iPod Touch、iPad、apple watch、车载iOS),如今传统行业,智能家居、游戏行业及汽车行业等,都将基于iOS系统开发进行转型,并逐渐走进人们的生活。特别是2012年到...

  • 高可用可伸缩架构实用经验谈

    作者 李道兵 发布于 2015年5月20日 | ...然而用户数量的快速增长(尤其是短时间内的爆发式增长),通常会让应用开发者有些吃不消,不得不面临一些严峻的技术挑战:如何避免因为单台机器当机导致服务不可用;如何

  • 前端视角谈物联网三部曲:连接智能、交互智能、数据智能

    导语丨作为离用户和物联网设备最近的前端,在物联网三部曲中扮演什么样的角色呢?这两年来腾讯云物联网探索出了“腾讯连连”小程序,提供了一系列开源的开放能力,和更多的物联网开发商和爱好者一起打...

  • Mac/iOS开发工程师 常用的软件 史上最全版

    注意:长期更新,有“【任❤️何】”MAC软件需求(包括游戏、插件、图形设计、开发、系统、办公、网络等等),留言或者私信或者加我微信,我会发给你破解版!哥们不谈钱,伤肝!全部免费发送! 常言: 工欲善其事,必...

  • pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

  • 基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

  • 基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

Global site tag (gtag.js) - Google Analytics