开发者总结的WatchKit App开发技巧
苹果4月初宣布所有注册开发者已经可以向App Store提交基于WatchKit开发的Apple Watch app了,不过不少开发者遇到了模拟器中没有发现的问题。这篇文章主要收集了一些提交tips和常见问题的解决方案,但首先你要先学习下苹果的官方指南。
文中大部分tips来自于从开发论坛和我自己的一些经验,根据收集情况,这篇文章会不定期更新。
iTunes Connect
可在iTunes Connect中上传Apple Watch截图和icon,并且iTunes Connect会在上传了第一个WatchKit build后展示出来。
截图
确保截图尺寸是312x390px。
截图只能是app的界面内容,并且是全空间截图。
不要在Apple Watch框架或者图片中设计截图。
不要将Apple Watch app置于iPhone app截图中。
不要在截图中添加额外的文本/宣传资料。
早期苹果要求开发者使用Apple Watch真机上运行的app截图,不过现在也可以使用模拟器中的运行图。点击command+S或者从File > Save Screen Shot中截图。截图默认会保存在桌面上。
App icon
确保你的app icon不包含alpha channel,不然将会在审核期间被拒,或者产生一些模糊的错误信息。
如果遇见了file names must match pattern "*@x.png"这个错误,请确保Watch app target的资产目录中已经包含了Watch app icon,因为iPhone app和Watch app不能共享一个资产目录。
请确保你的icon不包含黑色背景,以防icon和黑色的屏幕混在一起,并且也会增加被拒的风险。
Deployment Targets
虽然你的iPhone app可能支持iOS 8.2之前的系统,但WatchKit extension支持的操作系统必须是iOS 8.2或者更高版本。
如果你在WatchKit extension中使用了框架,那么iPhone app的部署目标必须是8.0及以上版本的系统,原因是你的WatchKit extension是与host app绑定在一起的。
Build Process
如果你使用Xcode以外的工具开发应用,或者你使用了自定义的构建脚本,请确保你的最终打包文件遵守苹果开发者论坛中的相关描述。
Version & Build Numbers, Bundle Identifiers, Names
确保iPhone app、WatchKit extension以及Watch app有着相同的编译号和版本号。
用iPhone app的bundle identifier作为WatchKit extension的bundle identifier的前缀,比如如果iPone app的bundle identifier是com.company.AppName,那么WatchKit extension的bundle identifier就是com.company.AppName.watchkitextension。
Jackrabbit Mobile的David Olesch建议,要确保app target和watch app target展示的名称应该一致,他曾因为该问题被拒。
在Xcode 6.3中打开你的应用程序,Deployment Target也会更改为iOS 8.3。如果要改回来,可能会被苹果拒绝。
Provisioning
WatchKit extension需要自己的app ID和Provisioning profile.
App Store描述
如果你在App Store描述中提及Apple Watch,请遵守苹果的指南,比如其中对字母大写的要求等。少数开发者曾因没有遵守苹果的指南而被拒。
Apple Watch通常应用英语书写,并且A和W要大写。你不能写成UPPERCASE和lowercase这种形式,也不能使用苹果的logo代替单词"Apple"。
性能
要尽可能地确保你的app在模拟器中响应积极。如果应用在模拟器中运行比较卡,那么在真机上卡顿情况只会加重,不止一位开发者曾因这个原因被拒。
如果你使用了openParentApplication:reply:,那我强烈建议你遵守这篇文章中的建议。我在真机上进行测试时发现,如果不使用文中的技巧,那么使用openParentApplication:reply:是非常不可靠的。一些参与真机体验的开发者也确认了这个问题。至少一位开发者曾因openParentApplication:reply:调用出现问题而被拒绝。
Swift
如果iPhone app使用了Swift编译,请设置框架和扩展的"Embedded Content Contains Swift"的 build setting为NO,设置iPhone app target的"Embedded Content Contains Swift" build settingYES。
App