最近在公司原来一个项目里增加了Apple Watch模块,遇到了很多坑。首先说明,本人目前对Swift还不深入熟悉,所以还是打算在原项目里用OC来实现。其次,我用了Apple Watch3个月了,还是第一次入门,看了喵神的教程,一步步来的。想想WatchOS 都2了,再不用用都老了。
下面简单说一下这个过程:
0、前言
如果在这之前,你没有看过或了解WatchKit相关内容,那么建议你读喵神的两篇文章Apple WatchKit 初探、WWDC15 Session笔记 - 30 分钟开发一个简单的 watchOS 2 app
一、增加watchOS
这个步骤就看图带过吧,对于还不知道的新手来说,看图最直接:
1.新建Target
2.选择 watchOS
3.这步骤注意,默认勾选了Notification Scene,要解释一下:
<1>
Glance Scene
:如果勾选,就会在Interface.storyboard里默认生成GlanceController的界面,如果原来选中了,后来想不要,就直接在Interface.storyboard里把GlanceController界面删除就可以了。<2>
Complication
: 这个就是在系统表盘显示时,滚动 Digital Crown 时,进行一些操作,现在OS2里增加的时间旅行,就是滚动 Digital Crown时,天气和日程表计划跟着变动,这个功能还是有点用的。
4.点击激活吧
5.最后在原来项目里增加了这两个目录App和Extension。
二、一些坑要填
1.默认新建的Target版本都是1.0,所以你要改成跟你现在项目的版本一样才行,不然就会报错。App和Extension的Target版本都要改。
2.默认App和Extension的Valid Architectures都是“armv7 armv7s i386 arm64”WatchOS运行的框架要改为armv7k
。如果要在模拟器运行,增加i386。
还有一些其实的小问题,不太记得了,相信大家如果遇到自行搜索就能解决。
三、一些代码
Watch显示的界面全部由Interface.storyboard里的界面生成,逻辑就是在Extension里写,具体也没什么好写的,由于我是用OC写的,连图片缓存的都不会,参考了喵神原OS1文章:
在 Extension 的 target 中获得图片 (比如从网络下载或者代码动态生成等),并且需要重复使用的话,最好用 WKInterfaceDevice 的 -addCachedImage:name: 方法将其缓存到手表中。这样,当我们之后再使用这张图片的时候就可以直接通过 -setImageNamed: 来快速地从手表上生成并使用了。每个 app 的 cache 的尺寸大约是 20M,超过的话 WatchKit 将会从最老的数据开始删除,以腾出空间存储新的数据。
现在OS2就出现几个问题:
- 1.add方法增加的是图片的名字,如果我是从网络下载的,名字怎么取?
- 2.如何判断有没有缓存?
- 3.OS2默认已经不会自动删除旧的数据了?
WKInterfaceDevice
类里的*cachedImages这个属性OS2下报错,不知道为什么?有懂的求留言。
1 | @property (nonatomic, readonly, strong) NSDictionary<NSString*, NSNumber*> *cachedImages WK_AVAILABLE_IOS_ONLY(8.2); // name and size of cached images |
在这篇文章Apple Watch应用优化的一些心得技巧总结找到一些图片优化的方法
WatchKit用的图片库:Github上的WKImageCache,或者直接用KFSwiftImageLoader,或者有新的库,暂时没有去研究,求补充。
- 最后提供一个WatchKit下用的NSURLSession方法,网上都是Swift写,OC这样写:
1 | NSString *requestUrl= @"http://www.google.com"; |
四、审核的一些坑
前面提到勾选 include Glance Scene
和 include Complication
,结果在实现时,没有搞好,直接在Glance Scene里显示一个下载链接的二维码,苹果审核员问我二维码是干什么用的?它会变吗?
- Glance Scene最好要用一些有意义的数据显示
- Complication这个,我是勾选了,第二次又被拒绝,我想说,苹果审核能一次审核全部功能吗????
- 取消Complication功能,就是把下图的Data Source Class删除,在把五个勾去掉就可以了:
终于改了,希望审核明天通过吧!!
五、总结
关于Watch App审核,如果你选择了某个功能,但没有实现,那么一定会被拒绝的,大家注意一下这点,坑就来那里~
用了一个星期,了解了WatchKit的基础功能,实现了基本的需求。其实发现,刚开始很害怕实现不了,或者说,去做时知道一定会遇到很多问题,所以不敢去碰它。作为工程师,我们需要恒心和勇气,才能面对接下来的大数据时代,我们的知道时刻要充电,做好准备吧!
最后想吐槽一下苹果Watch,不知道是不是只有我遇到这个问题,表盘下面掉漆,这是苹果的技术吗???
参考
> 注:本文首发于 [iHTCboy's blog](http://iHTCboy.com),如若转载,请注来源