可可笔记
首发于可可笔记
关于 WWDC 16 总得说点什么

关于 WWDC 16 总得说点什么

WWDC 16 其实全程尿点很多,我看的不是特别的认真,由于没有看到自己最希望的 macOS 开发的改进(例如 UIKit for macOS),所以也就没有特别的兴奋点,并且今年很奇怪,作为现在大力推进的 Swift,也没有在发布会上占据很多的篇幅。

关于 iOS 10 SDK 的改进,之前已经有过一篇文章了,本文大概是一些感想方面的东西,比较杂乱,请谨慎观看。

# 一点失落 #

作为有一点点经验的 iOS 开发者和一个刚在 Mac App Store 发布过两款 app 的人,我的感觉当然就是 macOS 开发比 iOS 开发要难受太多了(这里最主要指的还是 AppKit),太多陈旧的 API,有些事情有很多的可达路径,新手一开始并不知道哪个是 Best Practice,太过于复杂的 UI 框架等等,都是我所不喜欢的。我非常希望 UIKit 这样优雅的 GUI 框架可以出现在 macOS 上面,一方面做 macOS 开发会更轻松,另一方面对于同时开发两个平台的开发者而言迁移的成本会更低。之前有个传言是说 macOS 上面的 Photos 应用采用了全新的 UXKit 框架:UXKit:提供类UIKit API的新框架惊现OS X 10.10.3,但是在这次 WWDC 当中,依然没有看到这方面的消息。

# 第三方的叹息 #

第三方开发者,特别是工具类 Apps 的开发者,现在往往都面临这一个局面,就是发现 macOS 和 iOS 开始在整合一些功能,而这些夹缝中生存的开发者,很有可能就因为苹果一个轻而易举的整合就给干掉了。比如今年的 MacID、NearLock,以及 Pin 勉强算一个吧 : )。并且如果你仔细观察 iOS 10 的话,会发现时钟 app 提供了类似于 Sleep Cycle 的功能,照片应用提供了标注的功能。早期的 iOS,官方几乎不屑于做任何这样锦上添花的功能,那个时候机会非常的多,可能第三方开发者只要抓住一个痛点做好,就能取得一些成绩。而现在这样做的门槛已经越来越高,iOS & macOS 本身的完善以及苹果时不时来个官方逼死同人,实在是难免唏嘘。

# 新的机会 #

说起来现在 iOS 开发已经和以前有很大的不同,如果说 iOS 8 以前,iOS 开发就是搞定一个 app 的话,那现在做 iOS 以及完全不像以前那么单调。App Extension 的出现让这件事情出现了新的机会,尽管 iOS 8 出来的时候只有那么几种 Extensions,但到了 iOS 10,App Extension 已经达到了惊人的 19 种,他们涵盖了 iOS 的方方面面,我相信在之后只会越来越丰富。所以以后桌面上那个图标只是很小的一个方面,你的 app 出现在 Siri,出现在通知,出现在 Spotlight,出现在任何可能的系统服务里面,与系统服务完全无缝的融合在一起,这是苹果给 iDevices 描绘的新景象。我相信这些地方还是孕育着新的机会的,他们的能力等着开发者们去探索。

# 一点教训 #

iOS 10 Beta1 出来之后,Pin 和小历在上面都挂了,不过挂的原因各有不同。小历挂掉的原因是不可避免的,因为 iOS 10 对 widgets 做了很大的改进,所以在使用新的 SDK 改造之前,所有的第三方 widgets 都会面临同一个问题:widgets 被截断了。并且像 iOS 10 widget 不兼容这样的情况,在 iOS 10 正式发布之前,第三方 app 都无法修复这样的 bug。因为这样的不兼容并不是由于代码没写好引起的,而是因为要兼容一定要用新的 SDK,而开发者不能使用 beta 版本的 SDK 发布线上的 app,所以尝鲜的朋友必将忍受长期的 widget 不兼容。

但是 Pin 还有另一个挂掉的原因,是因为不小心。大家都知道,UIKit 是线程不安全的,任何时候使用它都需要想想是不是运行在主线程。否则可能当时运行的好好地,不知道怎么着就中招了。Pin 就是这么个情况,有几个地方不小心在 global queue 读取了 [UIPasteboard generalPasteboard],在 iOS 10 之前,这个代码跑起来没有什么问题,但是在 iOS 10 之上,这个代码会直接返回 nil,并被提示 UIPasteboard 只能被跑在主线程。所以千万不要去挑战官方 API 就已经告诉你的事情,同时要保持警惕。

# 一些变化 #

关于 iOS 体验的变化很多互联网媒体都有讨论,这里说的仅仅是一些开发层面的变化,当然由于我现在才体验了一天,而且我的 app 大多都是 widgets,所以会和 widgets 相关一些。

widgets:这个绝对是 iOS 10 体验变化最大的一个,有一个不幸的变化是,使用 widgets 的成本变高了,如果你在 app 内下拉通知中心,需要左滑之后才能看到 widgets,如果是在桌面的话,需要一直滑到最左边。同时 widgets 的 UI 发生了巨变,我想大多数的 widgets 都要重做 UI 了。同时还有另外两件事情,一件好事一件坏事,坏事是 widgets 的高度调节并不像以前那么自由,只支持用户 expand 或是 collapse 整个面板,让开发者在两个高度之间切换(并且其中一种高度还是固定的,2.5 倍 tableViewCell 的高度),当然也有可能是 beta1 的 bug,另外 widgets 的调试成功率也很低。好事是,widgets 里面现在终于可以弹出键盘了,这意味着用户可以直接在 widgets 里面处理输入,可以想象的空间很大。

URL Schemes:这里是一个坏消息,我这句话是说给一些 Launcher 应用的,系统设置的 URL,诸如 prefs:root=MOBILE_DATA_SETTING_ID 这样的,被干掉了。这样的事情在 iOS 6 的时代就发生过一次,现在是 prefs 开头的 scheme 彻底打不开设置应用了。当然 Pin 的一部分功能也受到这个影响,不过 Pin is not a launcher,我也不希望 Pin 的用途是打开系统设置,所以无所谓。

权限申明:以前在 iOS 开发过程中,请求图片或者相机是不用申明任何权限的,会由系统向用户申请,由用户决定是否授权。之后出现了 UsageDescription 这样的字段,用于给某个权限申请提供更好的文字描述。在 iOS 10 里面,我看到不论是日历、提醒事项还是相机、图库,都需要在 Plist 里面申明 UsageDescription,否则会挂掉,这几个字段是新的,也可以做本地化,已测。

Xcode:Xcode 出现了一些可喜的变化,虽然我一直承认他很烂。其中最重要的莫过于 Runtime Issues 和 Xcode Source Editor Extension,一个是增强了调试的体验,另一个是可以让你增强编辑的体验(说白了就是官方的 Xcode 编辑器插件)。

总之这次 WWDC 之后我的心情绝对是复杂的,感觉有很多事情要做,又觉得有些事情不用做了。

闲言碎语说的够多了,就到这儿吧,谢谢观看。

- EOF -

编辑于 2016-06-15

文章被以下专栏收录

    分享 Cocoa 开发中遇到的坑和有趣的事,付费社区:https://xiaozhuanlan.com/devnotes