Apple Watch 应用开发有哪些注意事项?

据说已经有上千个应用提交给了苹果,但是今天 Apple Watch 上市预约预售,第一批据说只有 10 余个通过,看起来很难通过的样子…
关注者
776
被浏览
105326

20 个回答

作为首批适配了Apple Watch的应用的产品狗,来答一下。真是虐了好几个月,我都没时间做早餐了快。。。 把各种坑摆出来说一说吧,希望对大家有帮助。

利益相关:搜狗地图产品负责人。



1. 最最基础的

一定务必仔细研读一下两个文档。如果有什么功能你想做但是文档里没找到的,八成就是没接口支持,做不了(看似废话,但真的是最有用的,所有你能做的你只能在这里面挖掘)

Apple Watch Human Interface Guidelines: Designing for Apple Watch

WatchKit - Apple Developer



2. 交互和UI

1> Watch只支持这么几种手势:系统的点击、force touch、digital crown旋转,不支持自定义手势。交互方式上会比较受限,在手机App上能实现的手势很多都在Watch上用不了。

2> Crown的所有操作都是Watch定义好的,不要试图对Crown的操作做任何定义。

3> 苹果希望Glance能在不同时间不同地点展示不同的内容。那么问题来了,Glance是依靠模板展现的,并且一旦你选定一个模板就不能改了。也就是说不同内容都要用同一个模板展现……臣妾做不到啊……所以选模板很重要,需要能适应所有的情况。



3. 开发类

1> 大家之前应该都看过原生的App多么炫酷,但是实际上自己做的时候会有很多问题,因为很多接口不对外。比如不支持动画(只支持帧动画),只有原生地图支持动态渲染地图引擎,意思就是原生的地图可以扒拉放大缩小,其它家的就不可以。(嗯,我司是地图类应用,你感受一下这坑…)

2> Notification分为短通知和长通知,短通知显示的是title,长通知显示的是body。但是以前手机app通常只有body没有title,所以要修改应用的推送接口,支持title,否则短通知就是空的。

3> 尽可能把逻辑和功能放到扩展里面来实现,这样响应速度会比较快。除非有不支持的权限比如定位,是迫不得已要放到手机App里面来执行的。但这样响应时间会很长,比较影响体验,看怎么权衡吧。


4. 最最重要的,就是尽快找到真机适配。

模拟器真的是靠不住的,一定要尽快找到真机适配。我们按42mm的尺寸来做的设计,在模拟器上跑的时候没问题,一上真机就发现字体、图片、布局都有幺蛾子,被裁的、被压扁的…

大概就这些,供参考。

这次我要认真的回答一下,
从WatchKit出来的时候开始玩,在公司负责Apple Watch的版本,自己上架过Apple Watch的应用。

我随便做的app已经通过审核并且上架了,不是第一批也赶在用户拿到表之前了。
Air Watch on the App Store on iTunes


不要脸的安利一下,第二个支持watch的app也上线了,也是赶在发货之前。


Timy - 通知中心农历 作者是 ying zhong
appsto.re/cn/vuYL6.i
非常简单的app,就是在手表上面看看空气质量,这就是他的全部
真的是随便做的。

我想说的其实是,不难通过,我是一次过的。
好好读官方的HIG和Programming Guide。

开发方面说几个tips吧

1、模拟器iPhone锁屏的时候,手表会不可用,这是模拟器bug,真机没这个问题

2、模拟器在iPhone app进程没启动的时候可以唤醒iPhone的host app,真机不行(但是官方app可以,因为目前第三方的app全都是extension形式运行,并不是watch上面的native app

3、模拟器在iPhone横屏的时候,force touch手表会导致手表有一瞬间横屏,放心,这个也是模拟器bug

4、真机的性能可能没有你想象的那么好,特别是对于数据传输方面,并不是一直能保持很稳定的速度,要尽量缩减iPhone和watch之间的数据传递,只在有数据变化的时候去做刷新

5、使用Darwin Notification来做iPhone和watch的双向通知
这个特别重要,以至于需要解释一下。
当你的iPhone端数据变化的时候需要通知到watch,Foundation框架下的NSNotificationCenter是没有用的,需要使用CoreFoundation的Darwin Notification,可以参考下notify.h上面的接口。
事实上不仅仅是watch和iPhone可以这么做,keyboard extension和host app也可以。(他们都是extension)。

6、使用presentTextInputControllerWithSuggestions来进行语音输入

7、构建UI的一些技巧
A. 使用嵌套的group来处理一些布局关系
B. 选中多个组件可以合并调整他们的位置关系
C. 可以对38mm和42mm建立不同的size
D. 使用startAnimatingWithImagesInRange来实现动画,要准备好一堆的图
E. 利用hidden来做一些界面变化的效果

其他的想到什么再补好了
为什么?