说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Apple Watch应用开发:从再造墨迹天气谈起

HTML文档下载 WORD文档下载 PDF文档下载
本文作者刘超在墨迹天气主要负责iOS平台软件开发工作。他将从软件开发角度,分享墨迹天气团队在针对Apple Watch开发手表App过程中发现的问题、误区,以及解决之道。

编者按:本文作者刘超在2012年加入墨迹天气,主要负责iOS平台软件开发工作。在今年年初,墨迹天气团队针对Apple Watch的硬件与交互特点,对应用做了重新设计与开发。作者从软件开发角度,分享了墨迹天气团队在开发过程中发现的问题、误区,以及解决之道。

Apple Watch的设计误区

WatchKit发布第一时间,我们的产品经理和设计师就根据设计规范和官方宣传动画迅速出了一版设计原型。Apple Watch版应用中囊括墨迹天气iPhone版的大部分功能,从实况到预报,再到时景和分享,其中包括一些新的交互,如使用Digital Crown切换短时和多天预报、缩放时景图片,在消息推送达到后直接在该推送下编辑信息回复。它相当于一个微缩版本的墨迹天气。

随后程序员也很快加入到这个项目里。当我们研究过Programming Guide和Watchkit framework Reference后,失望的发现宣传视频上展示的操作:Digital Crown、表面触感、地图缩放等是不对开发者开放的。于是我们开始重新推敲交互,设计师也发现不能再像设计iPhone应用那样自由的设计细节。由于最初我们都是没有实际的佩戴体验的,只能从宣传片和设计开发指南中找思路,揣摩用户的使用场景和心理。通过和Apple方面有佩戴经验的负责人交流,我们发现最开始的设计方向是不对的,我们不应该把设计重心Apple Watch的主程序上,而是重点设计Glance和Notification。作为一款手表上的应用程序,及时方便地查看才是它最常见的应用场景。曾经看到一位没有使用过Apple Watch的网友调侃:在那么小的屏幕上操作带来的麻烦完全抵消了从兜里掏出手机的麻烦。

Watch应用开发的五条小技巧

WatchKit提供的是一套全新的界面类。令人熟悉的地方是,大多数方法和属性的命名都有很好的延续性,几乎不需要重新学习就能够大概看出其含义。不同的是所有的界面控件都继承自 WKInterfaceObject,也就是说这些界面控件不再是继承自UIView的控件实体,而更像是控制真正界面的代理控制器。

在进行开发之前,我们要先了解一下Watchkit是如何工作的。实际上一个Watch应用分为两部分,负责界面的WatchKit App,只包括storyboard和asset catalog,它运行于Apple Watch上,另一个是负责逻辑部分的WatchKit Extension,则运行于iPhone上。开发者可能会担心,这样会不会加大开发的难度呢?答案是完全不会!Apple Watch和iPhone使用Bluetooth LE 和 Wi-Fi 技术进行通信,整个通信过程实在后台完全自动进行的,所以即使界面和交互在Apple Watch上,逻辑在iPhone上,我们却根本不需要操心,只要像常规那样处理界面属性赋值和交互响应即可,确实很酷!

首先是界面开发,在使用WatchKit开发时,不会再出现“代码写UI还是Xib写?”这样的带有争议的问题,因为Watch应用只能用StoryBoard进行开发,我猜想是为了更好的控制Watch应用的界面一致性,除此之外还有比较多限制。譬如不能在运行时动态增减界面元素,只能通过设置隐藏属性来调整界面展示;元素之间不能出现叠加,只能按纵向横向依次排列; Glance必须从官方模版中选择一个来使用,不能自由堆砌界面元素等等。不过最终开发下来,发现只要运用得当,空间还是很大的,在此我们根据实践总结了一些小技巧:

  1. 使用 WKInterfaceGroup WKInterfaceButton - setBackgroundImageNamed: - startAnimatingWithImagesInRange:duration:repeatCount:方法在背景上增加图片或者动画,这样就可以使控件和图形实现叠加。有些小伙伴可能会觉得很惊奇,“什么?WKInterfaceButton也可以作为容器放置控件?”是的,只要在控件的Attributesinspector里把Button的Content属性由Text修改为Group即可,这样我们就可以像使用Group一样使用button了。
  2. 抬手即看的短暂应用场景要求我们必须开发出层次简洁、操作流畅的应用,过程中我们发现WKInterfaceMenu的使用效果非常生硬,实际操作时需要长按才会响应,另外当弹出的选项偏少时,界面并不美观,所以后来用WKInterfaceButton的轻点事件取代了这种长按操作。
  3. 在控件的Attributesinspector里,可以针对38mm和42mm的Apple Watch分别设置属性。
  4. 如果想让一组横向放置的N个控件等宽,可又因为不知道设备类型而不能设置具体的宽度,该怎么办呢? 一种比较土的办法是,在程序运行后,通过获取屏幕宽度来动态的设置控件宽度。另一种方法是直接在该控件的属性设置里把宽度设置为Reletive to Container,然后在其下方的输入框内填写所占比例,例如5等份,就填写0.2,这样系统会按照你的设置自动帮你设置好。
  5. 在传统的基于界面的iOS应用中,程序可以在AppDelegate里做好界面展示的准备工作,但是Watch应用必须直接指定某个界面为入口。如果你的根界面是一个基于分页的结构(page-based), 可能会碰到这样的问题:程序在启动后才动态的决定分页数,所以需要在页面内调用reloadRootControllersWithNames来重新加载,如果加载的页面中不仅包括加载者自身又没有做处理的话,就会无限加载下去,这时候你可以使用一个static变量来解决无限reload的问题,如下:

- (void)awakeWithContext:(id)context {<br>&nbsp; [superawakeWithContext:context];<br>&nbsp; static BOOL bReload = NO;<br>&nbsp; if (!bReload) {<br>&nbsp; bReload = YES;<br>&nbsp; //计算分页数,准备各分页context数据<br>&nbsp; //调用[WKInterfaceControllerreloadRootControllersWithNames: contexts:]加载分页<br>&nbsp; }<br>&nbsp; else {<br>&nbsp; //处理输入的context,这里不加载界面,willActivate执行时再lazy加载<br>&nbsp; }<br>}

当用户抬起手腕打开Glance想看一下天气时,如果程序此时才去进行数据请求,用户就会面对一个大大的N/A界面,需要等上1~2秒,直到网络请求成功,才会显示最新的天气信息。这会带来较差的使用体验。相对来说,我认为比较好的做法是,先让iPhone应用支持后台刷新的系列功能,包括:silent notification、background fetch。如此一来,当用户查看Glance时,呈现给他的是近期更新过的数据,随后程序做出判断,如果这个还需要呈现给用户更新的数据就立即进行网络请求,请求成功后再更新界面。


数据共享与通信

Watch应用和containing iOS App之间可以通过共享数据区进行数据共享。首先启用App Groups,然后在共享容器内根据要共享数据的性质来决定是用NSUserDefaults还是直接在共享区读写文件。官方Demo推荐用NSFileCoordinator来进行文件读写,以完成多进程间的同步。不过,我自己在实践过程中发现,使用NSFileCoordinator时必须特别小心,使用不当会造成因资源引起的死锁。当时情况是这样的:程序上的一个bug导致在个别情况下会出现特别频繁的IO,以致程序几乎失去了响应。这时候如果直接将程序kill掉,资源所在目录有几率发生死锁,如果重启App,程序会卡死在NSFileCoordinator的coordinateReadingItemAtURL方法上。该方法的回调block长时间得不到执行,以致于iOS的”看门狗”会直接将App干掉,启动不起来,只能依靠重启系统来解决。对App开发者来说简直是“人间惨剧”,这种情况下没有几个用户会不删掉App的。

由于atch应用只有运行、挂起、终止三种状态,所以一旦你正在使用NSFileCoordinator写文件时被挂起,它就没有机会让出资源所有权。要解决这个问题,需要使用原子安全的保存操作,如UIDocument。

如果你需要Watch应用同containing iOS app进行通信,可以使用WKInterfaceController类的类方法openParentApplication,反过来如果需要containing iOS app同watch app通信,一种办法是通过在数据共享区读写文件,然后让watch app监听该文件从而做出响应;另一种方法,是使用Darwin Notification Center,具体开发过程,可以参照 官方的建议。

性能方面

关于这一点,官方给予的建议非常明确,简要列举如下:

  1. 尽可能减少iPhone和Apple Watch之间的数据通信,比如尽可能把图片存在WatchKit app bundle里,这样显示图片的时候会更快更省电。
  2. 仅更新界面上改变的部分,比如需要对 table新增了一行数据,不要重新加载整个table。
  3. 减少分页结构应用的加载时间,在init和awakeWithContext做尽可能少的处理,界面如何展示的问题放在WillActivate内处理。
  4. 让一个Controller负责尽可能少的场景,因为当显示其中一个场景时必须要隐藏不需要的控件,但是隐藏控件也会被创建,就会影响加载速度。

其它Tips:

官方论坛的Apple Watch模块里有很多有价值的问答,苹果的工程师会在里面对开发者的疑问进行解答。推荐下载官方Demo Lister,这是一个非常不错的开发示例。但是要注意,Demo里大量使用iOS 8及其以上的API,如果你的App还需要支持iOS 8以下的系统,在Copy代码时请做好兼容。

XCode 6.2版本有一个小bug,就是必须把相关target的Bundle Display Name 和 Bundle Name都配置为我们的应用名,才会在Watch应用启动和iPhone上Apple Watch的配对程序里正确的显示应用名称。

另外,还要给使用XCode6.2的开发者提个醒,不正确的现实应用名称有可能会被审核拒绝。需要支持国际化的开发者要针对所支持语言在infoPlist.strings内配置CFBundleName的值即可。

写在最后

根据Apple在iOS系统上日益开放的策略,我们有理由相信,随着时间的推移WatchKit会开放给开发者越来越多的API。各种App也会更准确的捕捉到Apple Watch的应用场景,开发者也会有更大的舞台去发挥!

作者简介:刘超,2012年加入墨迹天气,主要负责iOS平台软件开发工作。墨迹天气正在寻找技术高手,欢迎感兴趣的中高级iOS工程师交流。chao.liu#moji.com 


CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面,如果您有想分享的技术、观点,可通过电子邮件(tangxy#csdn.net,请把#改成@)投稿。

第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。


Vb6.0编程技巧四则 VB6二进制双通道技术实战经典 VB6内置的内码转换功能 VB编程步步高-代码效率篇(一) VB编程步步高-杂类篇(二) VB编程步步高-杂类篇(一) VB编程的必备技巧 VB编程的一些心得 VB编程技巧几例 VB编程经验点滴 VB编程俱乐部问答 VB编程如何控制I/O口 VB编程问与答 VB编程之提速攻略(二) VB编程之提速攻略(三) Windows/VB编程逐月通 VB编写键盘拦截程序 VB常见问题解答(1) VB程序中处理随机事件 VB的多媒体控件VBPLAY.VBX简介 VB技巧点滴 VB技巧汇编 (一) VB剪贴板的用法 VB开发CAI软件的小经验 VB软件设计中的几个问题 VB新手常见问题解答 VB修改注册表一特例 VB与VC混合编程中处理消息的方法 VB中的进制转换是怎样的? VB中调用带参数存储过程的实现(数据库) VB中感叹号“!”与圆点“.”的用法差异 学过严蔚敏的〈数据结构(C语言版)〉的请进! 开发过nokia上运行程序的朋友,请进来,本人遇到一个非常麻烦的问题,欢迎各位赐教. 如何从字符串中提取单词? 谁知道那里有longhorn下载??? 100分请教实现播放列表的思路? 有关图形化公交车线路的问题!! 关于网站软件工程的问题 我的sqlserver 2000 在安装的时竟然说什么不支持??? 免费ASP空间申请 有关用Firework作网页模板的问题-急! 大虾请指点~~!!~~ 如何固定游戏中的分辨率? 今天见到了蓝心MM,估计她是CSDN有史以来最PL的MM。 也来贴一篇!!!送给大学毕业几年的哥们!(转) 急:关于weblogic的控制台 ? 请问各位:哪里有好的javascript的教程? 小问题 请问在哪里可以找到监控局域网的网络流量的工具,不够再加? 免费ASP空间申请 白羊座的进来领分,水园里白羊座好像很少。。。。 ie无法编译jsp? 300分!求《程序员增值合订本》上册中的"完全掌握TCppWebBrowser控件"内容! Google搜索从入门到精通(散分) 由于工作需要,将要转到Linux平台,请问那位知道有什么好的SQL Client在Linux下? 由于工作需要,将要转到Linux平台,请问那位知道有什么好的SQL Client在Linux下? 你是怎么过的?CSDN无高人?:( 找asp.net入门经典!一定是C#写的!!!在线等! 菜鸟的关于DataGrid的问题 资源管理器中选中的多个文件怎样传给我的程序 什么是“三层数据库”和“嵌入式软件系统”? 什么是“三层数据库”和“嵌入式软件系统”? 类似"hello world"的简单问题,求教 免费ASP空间申请,支持ACCESS 事件的终止? 数据追加求教:谢谢您!!!! 请问InputBox在framework 类库里面有没有代替的阿? 为什么我写到文件中的字符总长度比我实际应该要写的多? 如何使dbctrlgrid多选,并使鼠标右击相当于鼠标左击 关于静态IP地址,急!!! 如何将tomcat做为windows的一项服务启动? 请问各位大虾,哪有paradox(INPRISE 公司产品)数据库(*.DB)的资料? 非法操作的问题 请问各位大虾,哪有paradox(INPRISE 公司产品)数据库(*.DB)的资料? 各位大虾救命啊!请问怎么在一个DIALOG中使用RICHEDITVIEW,谢谢大家了 ACCESS的删除问题 我有“处女”情结,可.............. 菜问题,,马上给分sendto问题 while和for的区别 安装的问题 我喜欢上公司的JJ怎么办????? 修(取下)门把手要注意哪些问题? 什么是共价离子化和物?RT Debbie hopes to a new world record.A .do B.make C.build以上三个选项放倒题干中不是都有创纪录的意思吗?那到底应该选哪个呢?为什么呢? 现有等质量的SO3与SO2气体,计算 1.SO3与SO2的物质的量之比为多少 2.SO3与SO2的分子数之比为多少 3.SO3与S现有等质量的SO3与SO2气体,计算1.SO3与SO2的物质的量之比为多少 2.SO3与SO2的分子数之比为多 离子化钙质是什么?懂的说下. Debby hopes to ________a new world record A make up B set up Cbuild Ddo 聊天室 英文怎么说求求、各位哥哥姐姐. 什么是离子级化 1.Mr.Jackson has set _____a new world record.2.Her parents are proud _______her.3.The tourist season runs from June _____October. 细菌耐药怎么办?别滥用抗生素 苯酚离子化是什么意思 请问 :I hope to set up a new world record.中的 hope后面可以省略to 已知2^a=3,2^b=6,2^c=9,求abc之间的关系. “它是以丑为美的.”这里的“美”指的是 多肽有什么作用 在▲ABC中,a:b:c=2:√6:(√3+1),求A、B、C. 离子间发生反应是什么意思难道H+和SO4²-就不会反应生成硫酸吗?它们为什么可以共存? She _____ the world to me.buystakesmeanslikes i want to have 元素形成几核几电子的离子是什么意思 青铜器铭文,在朋友那里搞了件青铜器, I want to have a gilefriend 天文学家为什么说丑石是“以丑为美”? 青铜器上的铭文这几个字是什么意思? excel2010如何同时画折线柱形图 核内质子数为10的元素是什么 有的物质是由原子构成,有的由分子构成,有的由离子构成是什么意思? 门把手松了怎么修?我的卧室门的把手松了,关门时一拉就出来,很怕将来掉下来,开不了门,是不是螺丝松了,该怎么修呢补充:我的门把手不是球型的,是那种普通长把手,我看见把手根部有颗小 当SO2和SO3两种物质中硫元素的质量比是2:3时,这两种物质的质量比是____;氧元素的质量比是______可以吧过程给详细点吗 【生物】什么叫多肽?书上说:“习惯上把3个以上的氨基酸连成的肽链称为多肽”度娘上说:“通常由10~100氨基酸分子脱水缩合而成的化合物叫多肽”然后我就晕了~求详解【附】什么叫脱水 向氯化铝溶液中滴加氨水,为什么一开始就有沉淀了?铝离子不是要结合三个氢氧根才产生沉淀么? 硫元素的核内质子数是多少 相同体积,相同C(H+)的一元弱酸与一元强酸的比较 玻璃地弹簧门拉手的高度怎么确定,有没有规范要求? 当SO2于SO3两种物质中的硫元素的质量比是2比3时,这两种物质的质量比是多少,氧元素的质量比是多少,要过程 在什么情况下属于正反应,什么情况下属于逆反应 有谁知道这些英文缩写是什么意思?CYLPCDRBTEA这些都是计量单位的缩写 元素与元素之间的核内质子数相同吗 一个客人说:"这么美的夜晚,这么快乐的时光,应该大家一起分享." (改为转述句) 这个结构怎样在计算机上画出一样的? 改变核内质子数可以使不同的元素相互转化 这句话对吗?为什么改变核外电子数可使原子与离子相互转化 这句话对吗?(原子和离子的转化不是改变的是最外层电子数吗?) 这位很胖、很美的女老师轻轻说到:“我希望你是我的孩子.”改为转述句 问一些英语缩写的意思1.IT 2.MTV 3.WTO 4.VCD 5.CEO 塑料袋子的条数乘以一条袋子的克重除以一千等于什么? 生物多肽累物质对人体有什么作用? 哪里有可以提高英语的聊天室,最好是国外的 英语聊天室我的英语不是很好,但是我真的很喜欢,想跟一些懂英语的人用英文聊天,想让大家帮我找一些好点的,适合我的聊天室, 由单一元素组成的离子大多是简单离子,大多哦,那还有少部分,举个例子说说. 这段英文简写谁看得懂啊ur age is same like ma younger bro.my bro is sixteen.he is grt 11.wut std r u in? 前面几行还行,但最后一行就不行了,看不懂啊 化学与化工的前景如何?化学工程有什么可以研究的? 简单离子是什么 镁和盐酸反应快还是氧化镁和盐酸反应快 新赛欧怎么样? 请问什么是复杂离子,什么是简单离子啊?最好具体点!谢谢!要用比较概念性的语言啊!大谢特谢! 如何修理防盗门的门把手?2000年安装的沈阳摩云牌防盗门,门把手螺丝松了,用着不方便,在里面没有一个小垫板就没法固定门把手,很别手,不知道哪有安装门把手的制式小垫板,或者谁知道哪有 雪佛兰新赛欧这个车怎么样? 某元素R在氧化物中的化合价为+4价,其中氧元素的质量分数占50%,则R元素的相对原子质量为A.50 B32 C16 D24 Camfrog 进不了外国的聊天室了,只能进中国的了.现在怎么只能进中国的了,进不了欧洲了吗.上面显示只有一个CHINA了. 如题 Si有没有简单离子,P呢? 美议员称监听欧洲是“救命”中国将带动全球天然气需求增长西北非国家着手保护海鱼资源落实“2+7合作框架”要看三个着力点印度拨款12亿加固中印边界设施 新设美4囚犯上演浴室版“越狱” 2人被捕日抗议中国4海警船巡航钓鱼岛 遭驻日布伦特油价28日大幅走高鸟叔诉苦称进军海外压力大:两首歌走了日拟购百余无人机监视钓鱼岛美议员:欧洲应“感激”监听保安全美国电视台为“童言辱华”道歉 被指诚朝鲜称将继续发射卫星格副总理当选总统韩承诺彻查干涉选举丑闻 被视为朴槿惠叙利亚提交销毁化武计划第一高人觅得真爱英首宗疑似3D打印枪支案曝光英国爆出首宗疑似3D打印枪支案南非废除与德国双边投资协议中国钢琴家郎朗出任联合国和平使者科比时隔八年再次命中7记三分2016年潍坊住房公积金贷款条件如何制作一面智能镜子?看看谷歌工程师日报:P2P监管提速 行业将剩下10卢比奥:老后可以告诉孩子我和科比交过春节前后 信用卡使用“注意事项”大盘费舍尔:进不了季后赛也不会失望卢比奥30分钟内拿下10分15助攻创微众银行春节期间可以赎回吗?怎么计息实体书店或迎来复苏?亚马逊要开约40中央确定今年经济增长目标为6.5%-媒体人热议:高洪波二进宫仿佛一场梦我觉得我又GET到一招~一个“没节操”的黑客,2015年能赚曝黄太吉融资失败濒临倒闭 创始人称规中国公布罕见登月照片 外媒:迄今最好易到用车清空用户账户遭质疑 24万元足球转播战役升温,英超商业运作链条能滕华涛:功夫熊猫+中国味,偶尔会有分国际空头正在市场潜伏,欲在春节趁虚大国家发改委:中国不追求两位数的增长
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘