百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Apple Watch应用开发经验谈:我遇到的那些坑

liuian 2025-02-15 00:06 37 浏览

【编者按】本文作者张忠良是滴答清单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本身有一些强大的功能,比如监测用户的心率等数据,我们可能会根据这些数据做一些实时的智能提醒,当然都还只是些想法,有待检验。

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

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

相关推荐

免费刷机工具(免费刷机工具哪个好用)

 刷机机灵你的安卓手机智能管家:刷机精灵软件是一款适用于Andorid设备的一键刷机软件。它能够自动安装设备驱动、自动获取ROOT权限、自动刷入ClockworkmodRecovery以完成Andr...

硬盘重新分区怎么分(硬盘重新分区后怎么装系统)

对已分区的硬盘重新分区的方法如下:1. 备份重要数据:重新分区会格式化硬盘,导致数据丢失。因此,在进行重新分区之前,需要备份重要数据。2. 进入磁盘管理工具:在Windows操...

一键ghost快捷键(1键ghost)

一、开机连续按F8,在系统启动菜单中,选择一键还原选项进行一键还原。二、制作启动盘重装操作系统。安装GHOST版本操作系统方法:1、将制作好的PE启动U盘插入电脑USB接口(台式用户建议将u盘插在主机...

换无线路由器需要怎么设置(换个无线路由器怎么连接)

1、线路连接,入户网线接到无线路由器的wan口;2、路由器连接,a、如果有网线,可以直接用网线接lan口和电脑网口,然后参照第三步;b、没有网线,电脑搜索路由器,然后点击连接上。然后参照第三步设置;3...

数据标注接单平台(数据标注接单平台哪个挣得多一点)

数据标注员在家可以通过以下方式接单:1.在线平台:有许多数据标注平台允许数据标注员在家完成标注任务,例如标注客、标注助手、数据堂等。这些平台提供了在线标注工具和API接口,让数据标注员可以在家里使用...

电脑垃圾怎么清理系统垃圾(电脑垃圾怎么清理干净)

电脑清理c盘空间只留系统的操作方法如下。1、打开电脑,找到我的电脑,双击我的电脑,找到盘符C的系统盘。2、找到“属性”菜单。3、点击“属性”后,系统会出现一个新的界面,在新的界面,我们找到“磁盘清理”...

显卡推荐性价比2025(显卡2020性价比)

2021年买1000块钱的这种显卡性价比最好的还是小米的显卡比较好,因为小米的电子产品呢是比较好的一款它的质量是比较好的,也是比较靠谱的,尤其是1000块钱以内买的这种显卡呢他的内存是比较大的,所以价...

thinkpad原厂系统重装方法(thinkpad如何重新装系统)

若需重装原装系统,需备份系统数据,制作启动盘或将原装系统镜像刻录至光盘或USB。进入BIOS设置,启动优先选项设定为启动盘,重启电脑。按提示选择新系统安装位置。安装完成后更新系统和驱动程序。最后恢复数...

安装系统教程win10(安装系统教程win7)

正确安装win10系统的步骤如下:1.确认电脑是否满足win10系统的最低配置要求,如CPU、内存、硬盘空间等。2.下载win10系统镜像文件,可以通过微软官网或第三方下载网站获取。3.制作U盘...

pps影音手机版下载官网(pps影音百科)

区别:1,爱奇艺主打网页播放,PPS主打客户端播放器;2,爱奇艺视频正版高清,PPS不全是高清,有部分盗版;3,爱奇艺在线播放比较好,PPS的P2P加载技术打开视频较快。1、爱奇艺PPS影音其实是爱...

百度官方下载安装免费(百度官网免费下载)

你好!有两种方法可以免费下载!第一:加入百度文库VIP看百度文库的说明,只要加入百度文库的VIP即可免费下载,不过不推荐这种还是需要花钱的方式第二:下载冰点下载器那这种方法该如何免费下载呢?下面我详细...

windows10更新文件在哪里(win10系统更新文件在哪个文件夹)
windows10更新文件在哪里(win10系统更新文件在哪个文件夹)

win10自动更新下载的文件位于C:\Windows\SoftwareDistribution\Download文件夹中。当然我们要找到哪个文件夹确切到哪个补丁并不是那么容易的,因为命名的文件夹都是长长的一段代号,一般我们要删除更新文件的...

2026-01-02 03:55 liuian

扫描仪怎么安装(信鸽扫描仪怎么安装)

扫描仪的安装步骤可能会略有不同,具体取决于您所使用的扫描仪品牌和型号。一般而言,您可以按照以下基本步骤来安装扫描仪:确认您的计算机系统符合扫描仪的最低系统要求。在计算机上插入扫描仪的安装光盘,或从制造...

u盘怎么启动重装系统(u盘启动重装系统哪个好)

1.下载好系统之家U盘以后在电脑上插入U盘并打开软件,软件会自,动配置用户的电脑信息,点击制作U盘启动盘。2.接着就进入了选择系统的界面,在这里选择需要安装的系统版本,然后点击开始制作。3.弹出提示窗...

photoshopcs6哪一年的(pscs6版本好用吗)

pscs6的发行时间是2012年4月24日,该软件是是AdobePhotoshop的第13代,具有多种功能,包括内容识别修补、Mercury图形引擎/3D性能提升/3D控制功能/改良的设计工具/全新的...