Focus一次探索watchOS的实践。再次慨叹下Apple的审核速度,just one day...
Focus - 有些事情需要这份执着
人这一辈子总有一些一定要去做必须要去体验的东西。
对于这些事物的追求需要这份执念。
Focus帮助我们专注于做最重要的事情,给她一个期限,可能是一两年,也可能只有几天或者几小时,总之一旦决定拥有她,那么中途就不要背弃她。
人这一辈子不要过得太复杂,专注于现在,执着于每次的努力,当回看过往,必将为自己而骄傲。
Focus App Store:传送门
Focus长什么样
Focus参数
- Language: pure Swift3
- Support: iOS9+、watchOS3.0+(包含Complication、WatchConnectivity)
- Vender: Realm(iOS、watchOS)、DCPathButton、IQKeyboardManagerSwift、SCLAlertView、SnapKit
- OpenSource:梳理完毕后开源
为什么要做这么个App
Apple发布了新款的Apple Watch Series2,之前一直想涉足watchOS的领域,一看设备更新了就赶紧入手了一款。这么贵的东东,不开发点东西感觉对不起自己花出去的银子。于是在认真体验了一段时间后,进行了以下产品思考:
最后决定先尝试制作一款GTD类APP,跟其它同质App的区别呢就在于只关注于一件事情的实现引导。提供的Apple Watch端App包含了几乎所有iOS端的功能,同时结合Complication可以将Focus的精简信息展现到表盘中。利用Apple Watch的贴近特点,进行一些轻度提醒。(说不定过段时间可能会搞一下那个偷偷录音的APP _)
Focus让我了解了什么
1. Swift3
Swift3更新以来,还没有将原有的swift2项目进行迁移,正好拿个人项目进行了实践。
综合体会就是更加优雅简洁了,这里就不展开描述了。推荐几个不错的教程,首先是官方文档,然后有猫神的《Swifter - 100 个 Swift 必备 tips》(买的正版,动态更新为了swift3的版本),还有raywenderlich的swift相关教程也在第一时间更新为了swift3版本。
2. watchOS 3.0
初涉watch SDK,现在的感觉是相较iOS SDK各有优劣,不过watch SDK的劣势多了一些。
几个小例子:
- table这一块,watchOS的处理会更“简约”一些,没有这么多的数据代理,转而采用了配置方法的调用,初始化配置更集中了。这里也是针对watch的使用场景进行了SDK层面的精简优化。
- 自带一个计时性质的文本控件date、timer,一般的场景只需要简单配置就可以使用了(不过可定制项比较有限,Focus中为了统一,还是改为自己实现一个倒计时)
- 感觉watchOS中的picker就是一个噩梦。。。,官方是没有提供watchOS版本的日期选择器的,所以需要自己用picker进行组装,里面好多坑,这块等开源后感兴趣的同学可以参考下。
- 关于控件封装,原本搞完了watchOS版本的日期选择器是打算抽离封装一下的,但是发现watchOS的控件封装真的没有太好的途径,总不能把一个controller分享出来吧。。。(虽然github上有人这么搞)
几个建议:
将iOS与watchOS的公用模块提取为单独的framework方便复用。
-
iOS与watchOS的数据同步通过WatchConnectivity,由于一些技术文章的更新缓慢,其中介绍的appgroup方式其实已经不适用了(被坑了一轮)。
同时建议除了配置自动的同步机制外,添加一个按钮触发的同步操作,以方便用户及时进行同步。例如Focus中当点击iPhone或者watch主页面中央的小漏斗时,会弹出同步提示窗口:
sync.PNG 关于文本录入这块watchOS3已经可以使用presentTextInputController(withSuggestions:allowedInputMode:)了,弹出的输入模块可以进行语音录入,建议选择以及新更新的Scribble,也建议大家使用。(虽然中文的录入还是有点难用)
3. Realm
早就听说了realm的大名,一直想尝试一下,正好借助这个机会集成了进去。不过得出的结论是,其实就目前的realm而言,个人感觉不太适合用于watch相关的应用。主要原因就是库文件略大,watch应用四五十兆的应用大小限制,使得每一寸空间都显得特别珍贵(App Store审核的限制,其实相较Apple Watch的存储来说集成realm造成的空间占用还是可以接受的)。
说说使用realm的几点感受:
用起来确实很爽,很容易上手,基本就是在操作对象,用过coredata的同学应该很习惯这种方式。
数据库版本迁移这块仔细一点也很容易搞定。
因为要同时集成iOS跟watchOS两个版本的realm所以不要将他们放在同一个项目文件夹下,分别创建文件夹添加引用。
-
官方的提供的run script:
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh"
需要在iOS和watch extension的Build Phases中都要进行添加调用。(我就是因为没有在extension中添加调用导致模拟器真机运行正常,上传App Store却总是验证报错...)
对于添加了realm的watchOS项目建议打开bitcode,也是为了优化watch APP的体积。
4. “新”产品上线
好久没有完整的操作一遍应用的上线流程了,体会有几点:
- Xcode8.1的自动管理签名还是挺好用的,尚未发现问题。使用该配置后,记得Build Settings中Code Signing Identity的子选项都要配置为iOS Developer。
- 发现Certificate中添加了专门用于生成服务器推送证书的功能。(估计早就更新了,之前没在意)
- 新的itunes connect功能真的挺好用,相较原来的版本慢慢的幸福感。
- 慨叹下目前Apple的审核速度,真实快啊,上传到上架one day。
可利用的资源
- watchOS官方资源(包括Human Interface Guidelines、App Programming Guide for watchOS 等)
- swift官方资源
- Raywenderlich
- 猫神相关文章(虽然是watchOS 2的,但是很受用)
- 图形素材:dribbble(寻找创意)、easyicon(图标)、MakeAppIcon(iPhone App图标与watch App图标生成)
小结
Focus会持续更新,目前主要解决了我自己的一些痛点,希望她也能够帮助到你。如果有什么好的建议欢迎留言讨论。Watch中的App种类确实很有限,不像iOS的这么丰富,有好的产品创意也欢迎一起讨论。watchOS 3.0的更新让Apple Watch焕发了新的生机,有了不少新的可能,让我们一起把我们的Apple Watch丰富起来吧_。
最后附上50个促销代码,感兴趣的同学可以下载使用。