2024年10月9日发(作者:剧达)
iOS开发者所需要知道的 iOS 10 SDK 新特性
总览
距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数。
在我们回顾过去四五年 iOS 系统的发展的时候,不免感叹变化速度之快,迭代
周期之短。iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,
以及 Cloud Kit 的加入,iOS 9 里的分屏多任务特性等等。Apple 近年都是在
WWDC 发布新的系统和软件,然后在秋季和冬季 (或者来年春季) 召开硬件产品
的发布会。WWDC 上每一项软件的更新其实都预示了相应的硬件的方向,相信
今年也不会例外。
对于iOS开发者来说,好消息是 iOS 10 中并没有加入太多内容。按照适配的需
求,来年的 iOS 开发至少应该可以从 iOS 8 甚至 iOS 9 开始,我们将有时间对
之前的版本特性进行更好的梳理,消化和实践。相比与开疆扩土,iOS 10 更专注
的是对现有内容的改进,以弥补之前迅速发展所留下的一些问题,这其实正是
Apple 当下所亟需做的事情。
生态整合与 Extension 开发
在 iOS 10 里 Apple 延续了前几年的策略,那就是进行平台整合。全世界现在没
有另外一家厂商在掌握了包括桌面,移动到穿戴的一系列硬件设备的同时,还掌
控了相应的从操作系统, 到应用软件,再到软件商店这样一套完整的布局。Apple
显然也非常明白这个优势意味着什么。所以近年来 Apple 一直强调平台整合,
如果你的应用能够同时在 iOS,watchOS 以及 macOS 上工作的话,毫无疑问将
会更容易吸引用户以及 Apple 的喜爱。
另外一点则是各个应用之间的整合和交互。不难发现,随着近年来 extension 开
发的兴起,Apple 逐渐在从 app 是“用户体验的核心”这个理念中转移,变为用
户应该也可以在通知中心,桌面挂件或者手表这样的地方完成必要交互。而应用
之间的交互在以前可以说是 iOS 系统的禁区,但是去年随着 Workflow 的成功,
Apple 对于应用之间的交互有助于用户生产力的提升有了清晰的认识。今年 SDK
中几个重大更新其实都是围绕这个主题来进行的。
iOS 10 中,Apple 为我们添加了茫茫多 extension 的新模板,以至于在同事之间
开玩笑都是我们马上就要丢掉 iOS app 开发者的工作,而转变为 iOS extension
开发者这样了。新加入的扩展的种类和数量都足以说明使用应用扩展以及进行扩
展开发在今后 iOS 开发中的重要地位。
SiriKit
Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性。SiriKit 为我们
提供一全套从语音识别到代码处理,最后向用户展示结果的流程。Apple 加入了
一套全新的框架 ork 来表示 Siri 获取并解析的结果。你的应用需
要提供一些关键字表明可以接受相关输入,而 Siri 扩展只需要监听系统识别的
虽然名义上是独立 app,但实际上工作的依然是一个 extension。在该扩展中,
ork 将承担与系统的 message 界面交互的主要职责。你通过提
供一个自定义的 View Controller,来获取用户在使用你的 message app 时进行
对话的上下文,以及发送接收等操作,并做出合适的响应。这个扩展在用来进行
直接在 Message 应用中一些自定义共享会很好玩。但是鉴于 Apple 暂时没有打
算将 跨平台的原因,可能也注定了这只会是一种补充,而无法成
为主流。
iMessage Apps 笔记
IDE 和工具改进
除了整合平台战略思想下的一些 SDK 改变,今年和 iOS 开发者相关的更多的是
开发工具的进步和革新了。
Xcode 8
Xcode 8 展现出了很多有意思的新特性,比如更强大的 View Debugging,可以帮
助我们追查内存引用问题的 Memory Debugging 等。这些工具十分强大,也将帮
助我们在开发过程中及早发现问题,而不要将它们带入在最终产品中去。
在 app 签名方面,Apple 终于意识到了他们在 Xcode 7 中所犯得错误。我想可
能不止一个人被证书和描述文件出问题时的 "Fix Issue" 按钮坑过。这个按钮不
仅不会修正问题,反而会直接注销现有的开发者证书,然后“自作主张”地重新申
请。大多数情况下,这让事情变得更加糟糕。特别是对于新 加入的开发者,他
们并不理解 Apple 的证书系统,错误的操作和处置,往往让开发环境变得不可
挽回。Xcode 8 中,同一个开发者帐号现在允许多个开发证书,而完全重做的 app
签名系统也足够好用,并且避免了误操作的可能性。在兼顾自动配置的基础上,
也为大型项目和复杂的 CI 环境提供了足够灵活的配置空间,这绝对值得点赞。
另外 Xcode 终于提供了进行代码编辑器扩展的能力。现在开发者可以创建
XCSourceEditorExtension
来对 Xcode 的功能进行扩展了,在没有文档帮助和
官方支持的情况下摸索着为 Xcode 制作插件的历史也即将结束。
Xcode 8 笔记
Swift 3
Swift 开源已经过去半年时间。在 Swift 2.2 中我们已经看到了开源的社区力量对
语言产生的深刻影响,而在 Swift 3 中这一影响的效果将更加明显。
最大的变化在于 Foundation 框架的重新导入,可能过一段时间再回头看的话,
这将标志着 Swift 与 Objective-C 彻底分家。Foundation 框架中的 API 现在以
更符合 Swift 的方式被导入到语言中。大体来说,这些变化包括去除
NS
前缀,
将绝大部分 class 转换为 struct (虽然底层还是 copy-on-write 的引用实现,可以
参看
ReferenceConvertible
协议的内容),去掉 API 中重复的语义等。如果在
当前你还能看出 Swift 和 Objective-C 在使用 Foundation 或者说开发 app 时
同根同源的话,Swift 3 正式发布后可能情况会大不相同。
由于引用类型向值类型的转换,也将导致我们在使用 Swift 开发时的思考方式发
生变化。以往的 Foundation 框架中类型的可变性是由不可变类型和它的可变类
型版本 (比如
NSData
和
NSMutableData
) 来进行区分的。而在 Swift 3 中,一
般来说将只有作为结构体的不可变类型 (比如
Data
), 对于这类结构体的改变,
将会是更安全的基于写时复制的行为,而不再是原来可变对象那样的危险的内存
操作。这在很多时候除了保证数据共享时的安全性以外,内 部的引用特性也保
证了调用速度。实际上,因为减少了不必要的复制 (比如根据一个不可变对象创
建相应的可变对象),实际上通过 Swift 3 的 API 使用 Foundation 的速度将比原
来更快!
关于 Swift 3 的更多内容,我会在我的《Swifter - 100 个 Swift 必备 tips》一书
中通过补充章节的方式进行说明。同时,该书现有的 Swift 2 相关的描述和示例
也会按照 Swift 3 的语法规范和特性进行更新,以适应最新版本。
Apple 生态和其他
另外影响比较重大消息是,在 iOS 9 引入的 ATS 将在来年更加严格。2017 年
起,新提交的 app 将不再被允许进行 http 的访问,所有的 app 内的网络请求
必须加密,通过 https 完成。所以如果你家 app 的服务器或者某些访问页面还
是 http 的话,需要尽早过度到 https。
另外,watchOS 3 和 tvOS 也有一些新的内容。其中最重要的当属 watchOS 中
可以使用 SceneKit 和 SpriteKit。虽然这两个框架本意是做游戏,但是 watch 的
小屏幕和低性能可能并不足以支撑我们在这样一个受限平台很好的作品。但是这
两个框架可以为交互乏味的 watchOS 提供很好的动画效果的补充,可能会是它
们在 watchOS 上更合适的用途。
最后,OS X 改名为 macOS,有些媒体和开发者将其解读为去乔布斯化,其实我
更倾向于这是一种强迫症和完美主义的基本需求。不管名字如何改变,Apple 在
iOS,macOS,watchOS 和 tvOS 这四个产品线上的布局已经完成,整个生态现
在看来也还十分健康。Apple 在用户权益和隐私上的重视,以及像是在 https 上
的推动,无疑都是这个时代前进的动力。
2024年10月9日发(作者:剧达)
iOS开发者所需要知道的 iOS 10 SDK 新特性
总览
距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数。
在我们回顾过去四五年 iOS 系统的发展的时候,不免感叹变化速度之快,迭代
周期之短。iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,
以及 Cloud Kit 的加入,iOS 9 里的分屏多任务特性等等。Apple 近年都是在
WWDC 发布新的系统和软件,然后在秋季和冬季 (或者来年春季) 召开硬件产品
的发布会。WWDC 上每一项软件的更新其实都预示了相应的硬件的方向,相信
今年也不会例外。
对于iOS开发者来说,好消息是 iOS 10 中并没有加入太多内容。按照适配的需
求,来年的 iOS 开发至少应该可以从 iOS 8 甚至 iOS 9 开始,我们将有时间对
之前的版本特性进行更好的梳理,消化和实践。相比与开疆扩土,iOS 10 更专注
的是对现有内容的改进,以弥补之前迅速发展所留下的一些问题,这其实正是
Apple 当下所亟需做的事情。
生态整合与 Extension 开发
在 iOS 10 里 Apple 延续了前几年的策略,那就是进行平台整合。全世界现在没
有另外一家厂商在掌握了包括桌面,移动到穿戴的一系列硬件设备的同时,还掌
控了相应的从操作系统, 到应用软件,再到软件商店这样一套完整的布局。Apple
显然也非常明白这个优势意味着什么。所以近年来 Apple 一直强调平台整合,
如果你的应用能够同时在 iOS,watchOS 以及 macOS 上工作的话,毫无疑问将
会更容易吸引用户以及 Apple 的喜爱。
另外一点则是各个应用之间的整合和交互。不难发现,随着近年来 extension 开
发的兴起,Apple 逐渐在从 app 是“用户体验的核心”这个理念中转移,变为用
户应该也可以在通知中心,桌面挂件或者手表这样的地方完成必要交互。而应用
之间的交互在以前可以说是 iOS 系统的禁区,但是去年随着 Workflow 的成功,
Apple 对于应用之间的交互有助于用户生产力的提升有了清晰的认识。今年 SDK
中几个重大更新其实都是围绕这个主题来进行的。
iOS 10 中,Apple 为我们添加了茫茫多 extension 的新模板,以至于在同事之间
开玩笑都是我们马上就要丢掉 iOS app 开发者的工作,而转变为 iOS extension
开发者这样了。新加入的扩展的种类和数量都足以说明使用应用扩展以及进行扩
展开发在今后 iOS 开发中的重要地位。
SiriKit
Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性。SiriKit 为我们
提供一全套从语音识别到代码处理,最后向用户展示结果的流程。Apple 加入了
一套全新的框架 ork 来表示 Siri 获取并解析的结果。你的应用需
要提供一些关键字表明可以接受相关输入,而 Siri 扩展只需要监听系统识别的
虽然名义上是独立 app,但实际上工作的依然是一个 extension。在该扩展中,
ork 将承担与系统的 message 界面交互的主要职责。你通过提
供一个自定义的 View Controller,来获取用户在使用你的 message app 时进行
对话的上下文,以及发送接收等操作,并做出合适的响应。这个扩展在用来进行
直接在 Message 应用中一些自定义共享会很好玩。但是鉴于 Apple 暂时没有打
算将 跨平台的原因,可能也注定了这只会是一种补充,而无法成
为主流。
iMessage Apps 笔记
IDE 和工具改进
除了整合平台战略思想下的一些 SDK 改变,今年和 iOS 开发者相关的更多的是
开发工具的进步和革新了。
Xcode 8
Xcode 8 展现出了很多有意思的新特性,比如更强大的 View Debugging,可以帮
助我们追查内存引用问题的 Memory Debugging 等。这些工具十分强大,也将帮
助我们在开发过程中及早发现问题,而不要将它们带入在最终产品中去。
在 app 签名方面,Apple 终于意识到了他们在 Xcode 7 中所犯得错误。我想可
能不止一个人被证书和描述文件出问题时的 "Fix Issue" 按钮坑过。这个按钮不
仅不会修正问题,反而会直接注销现有的开发者证书,然后“自作主张”地重新申
请。大多数情况下,这让事情变得更加糟糕。特别是对于新 加入的开发者,他
们并不理解 Apple 的证书系统,错误的操作和处置,往往让开发环境变得不可
挽回。Xcode 8 中,同一个开发者帐号现在允许多个开发证书,而完全重做的 app
签名系统也足够好用,并且避免了误操作的可能性。在兼顾自动配置的基础上,
也为大型项目和复杂的 CI 环境提供了足够灵活的配置空间,这绝对值得点赞。
另外 Xcode 终于提供了进行代码编辑器扩展的能力。现在开发者可以创建
XCSourceEditorExtension
来对 Xcode 的功能进行扩展了,在没有文档帮助和
官方支持的情况下摸索着为 Xcode 制作插件的历史也即将结束。
Xcode 8 笔记
Swift 3
Swift 开源已经过去半年时间。在 Swift 2.2 中我们已经看到了开源的社区力量对
语言产生的深刻影响,而在 Swift 3 中这一影响的效果将更加明显。
最大的变化在于 Foundation 框架的重新导入,可能过一段时间再回头看的话,
这将标志着 Swift 与 Objective-C 彻底分家。Foundation 框架中的 API 现在以
更符合 Swift 的方式被导入到语言中。大体来说,这些变化包括去除
NS
前缀,
将绝大部分 class 转换为 struct (虽然底层还是 copy-on-write 的引用实现,可以
参看
ReferenceConvertible
协议的内容),去掉 API 中重复的语义等。如果在
当前你还能看出 Swift 和 Objective-C 在使用 Foundation 或者说开发 app 时
同根同源的话,Swift 3 正式发布后可能情况会大不相同。
由于引用类型向值类型的转换,也将导致我们在使用 Swift 开发时的思考方式发
生变化。以往的 Foundation 框架中类型的可变性是由不可变类型和它的可变类
型版本 (比如
NSData
和
NSMutableData
) 来进行区分的。而在 Swift 3 中,一
般来说将只有作为结构体的不可变类型 (比如
Data
), 对于这类结构体的改变,
将会是更安全的基于写时复制的行为,而不再是原来可变对象那样的危险的内存
操作。这在很多时候除了保证数据共享时的安全性以外,内 部的引用特性也保
证了调用速度。实际上,因为减少了不必要的复制 (比如根据一个不可变对象创
建相应的可变对象),实际上通过 Swift 3 的 API 使用 Foundation 的速度将比原
来更快!
关于 Swift 3 的更多内容,我会在我的《Swifter - 100 个 Swift 必备 tips》一书
中通过补充章节的方式进行说明。同时,该书现有的 Swift 2 相关的描述和示例
也会按照 Swift 3 的语法规范和特性进行更新,以适应最新版本。
Apple 生态和其他
另外影响比较重大消息是,在 iOS 9 引入的 ATS 将在来年更加严格。2017 年
起,新提交的 app 将不再被允许进行 http 的访问,所有的 app 内的网络请求
必须加密,通过 https 完成。所以如果你家 app 的服务器或者某些访问页面还
是 http 的话,需要尽早过度到 https。
另外,watchOS 3 和 tvOS 也有一些新的内容。其中最重要的当属 watchOS 中
可以使用 SceneKit 和 SpriteKit。虽然这两个框架本意是做游戏,但是 watch 的
小屏幕和低性能可能并不足以支撑我们在这样一个受限平台很好的作品。但是这
两个框架可以为交互乏味的 watchOS 提供很好的动画效果的补充,可能会是它
们在 watchOS 上更合适的用途。
最后,OS X 改名为 macOS,有些媒体和开发者将其解读为去乔布斯化,其实我
更倾向于这是一种强迫症和完美主义的基本需求。不管名字如何改变,Apple 在
iOS,macOS,watchOS 和 tvOS 这四个产品线上的布局已经完成,整个生态现
在看来也还十分健康。Apple 在用户权益和隐私上的重视,以及像是在 https 上
的推动,无疑都是这个时代前进的动力。