开发者需要关注的iOS 10更新
注:本文只列出概要及参考资料。详细扩展待补充。
1. 关注点
App Extensions
扩展(Extension)是iOS 8中加入的一个非常大的功能点,开发者可以通过系统提供给我们的扩展接入点(Extension point)来为系统特定的服务提供某些附加的功能。
iOS 10之前,已经提供了6个extension,iOS 10中又新增了大量extension。如:
- Call Directory
- Intents
- Intents UI
- Messages
- Notification Content
- Notification Service
- Sticker Pack
App Extension Programming Guide
SiriKit
苹果开放了Siri接口。但是,它目前只针对如下六个领域开放:
- Audio or video calling(音视频聊天)
- Messaging(消息通讯)
- Payments(支付)
- Searching photos(搜索图片)
- Workouts(健身)
- Ride booking(约车)
当用户使用Siri操作涉及你的服务时,Siri会给你的intent extension发送一个intent对象,它包含了用户的请求及相关的数据。你可以根据intent对象,产生一个相应的response对象给Siri。你也可以提供一个自定义的UI给Siri。
除了使用intent extension,还可以使用siri interactions,如果你的App注册了相关的interaction,系统也会启动你的App,并把相关的intent等数据传给它。
可以参考Introduction to SiriKit。及对应的示例UnicornChat。
wwdc视频可以参考Session #217、Session #225
Speech Recognition
新的Speech.framework可以分析录好、或实时的语音、并把语音转换为文字。如使用如下简单的代码,即可以完成在线语音转文字:
let recognizer = SFSpeechRecognizer()
let request = SFSpeechURLRecognitionRequest(url: audioFileURL)
recognizer?.recognitionTask(with: request, resultHandler: { (result, error) in
print (result?.bestTranscription.formattedString)
})
使用语音识别,需要在Info.plist中,加入NSSpeechRecognitionUsageDescription
的描述。
Proactive Suggestions
在iOS 10后,你可以提供一些用户可以在你App里面做的事情,这样,系统可以在额外的地方提高你App的曝光率。如带了QuickType suggestions
的键盘、地图、Siri interactions、锁屏等。通过一系列的技术,如NSUserActivity、Schema.org定义的一些markup(与网页相关)、使用一些库定义的API,如Core Spotlight, MapKit, UIKit,和 Media Player frameworks。
iOS 10中,给UITextInputTraits
加入 textContentType
属性,如果设置了该属性,系统就会调用相应的键盘,并进行输入提示。如设置了 UITextContentTypeFullStreetAddress
,它就会提示用户最近去过的地方。
如果视频类的App使用了MPPlayableContentManager
API接口,iOS 10可以在锁屏时,显示你的专辑,并可以在锁屏时播放音乐。
如果你的App是约车服务的,你可以使用MKDirectionsRequest API
,这样iOS 10在你输入Get a ride to...
时,就会提示你的应用。
Integrating with the Messages App
在iOS 10中,你可以创建iMessage extension来跟系统的Message App交互,可以让用户发送文字、sticker、多媒体文件等。你可以创建两种extension:
- Sticker表情包。
- iMessage app。它可以让你在Message App中展示自定义的UI,用它来在会话中创建表情浏览器,创建、发送、更新交互性的消息。
你可以使用Messages.framework
中的APIs来开发iMessage app
应用。可以查看Messages Framework Reference。
视频可以参照Session #204、Session #224
User Notifications
iOS 10中引入UserNotifications.framework
。应用或扩展可以使用这个库在用户接收到通知前对通知进行接收或修改。
iOS 10中还引入UserNotificationsUI.framework
。它可以让你在通知显示给用户前,对通知界面进行修改。你的扩展也可以以自定义的操作进行响应。
参考视频Sesson 707
通知现在支持media,可以查看高级的notification教程:
[Session 708] (https://developer.apple.com/videos/play/wwdc2016/708/)
Wide Color
除了rgb,支持更加广的颜色空间。
视频[Sesson 712](https://de veloper.apple.com/videos/play/wwdc2016/712)
App Search Enhancements
iOS 10对应用搜索也进行了提升
[Session #223](https://de veloper.apple.com/videos/play/wwdc2016/223)
Widget Enhancements
iOS 10中可以在锁屏时显示widget。而且widget可以支持显示模式,可以选择收缩、或扩展视图。
Apple Pay Enhancements
iOS 10 引入新的API,让你更多地使用Apple Pay
与你的网站交互。
PassKit.framework
引入新的API,可以让你在不使用UIKit的地方使用Apple Pay
。
加入Apple Pay
的测试环境。可以注册测试账号。
Security and Privacy Enhancements
iOS 10中引入一些改变,来提高你代码的安全性和保护用户的隐私。详见security
你必须在Info.plist
中加入使用权限的描述。如你要使用日历的数据,则要加入NSCalendarsUsageDescription
描述。
没加描述可能会崩溃。
CallKit
新引入的CallKit.framework
可以让用户在应用中引入系统的电话UI,而且可以把联系人等信息写入系统的通讯录。
CallKit
引入app extensions
来进行电话拦截和识别。你可以写一个系统扩展来告诉系统拦截哪些电话。
库的变化
Foundation
- NSDateInterval
- NSLocale
- NSMeasurement
- NSUnit
UIKit
- 新的动画类UIViewPropertyAnimator
- 3D touch中的peek和pop加入
UIPreviewInteraction
和UIPreviewInteractionDelegate
来更方便地定制UI。 - UIAccessibilityCustomRotor为辅助功能添加更多的定制化、并添加了更多的符号,如
UIAccessibilityIsAssistiveTouchRunning
用来标志AssistiveTouch
是否打开等。 - UIPasteboard加入安全与隐私,加入控制生命周期的选项。
- UIFont中添加
preferredFontForTextStyle:compatibleWithTraitCollection
来更好地在text控件中支持动态字体。 - 额外的控制
tab bar item
中的badge的背景色和字体属性。 - 在所有的可滚动的view中添加refresh control支持。如UICollectionView。
-
openURL:options:completionHandler
用来替换openURL:
- 新加
UICloudSharingController
和UICloudSharingControllerDelegate
用来支持iCloud分享。 - 加强
UICollectionView
和UICollectionViewDataSourcePrefetching
使你可以利用自动的prefetch来获得更好的滚动体验。
WebKit
WebKit.framework
中加入webView:shouldPreviewElement:
来支持3D touch的Preview。
AVFoundation
AVFoundation.framework
做了一些加强。主要是针对HLS的一些变化。参照视频Session #510、Session #504
Core Data
主要作了以下加强:
-
NSPersistentStoreCoordinator
支持连接池。 - 新增
NSPersistentContainer
类,用来连接。NSPersistentStoreCoordinator
、MOC和其他配置资源。 - CoreData与Xcode更紧密,生成NSManagedObject子类更方便。
- NSManagedObject添加了一些更方便的方法。
- Core Data为swift作了一些接口调整。
其他库更新
其他AVKit、Core Image、GameKit、GameplayKit、HealthKit、HomeKit、Metal、ModelIO、Photos、ReplayKit、ReplayKit、SpriteKit均有不同程度的改动。详细请参考官方release notes
、Api diffs
。
Xcode 8
Xcode 8加了一些新特性。如Auto Layout的改进、新的Threading Debugger、Memory Debugger、UI Debugger、Runtime issue等。
Xcode 8开始官方支持插件,原有的第三方插件不能用了。可以参考wwdc视频:
github上,已经有个国人开发的插件了:
xTextHandler
iTunes Connect
CI
iOS 10中引入prebuild test(xcodebuild 支持test选项)。可以更方便地进行持续集成。
Handoff、NSUserActivity
观看新年的iOS 10 keynote,可以明显看到苹果的4大平台,正在更加紧密地整合。如,SiriKit开始在macOS上使用、Apple pay可以在网页上支持、可以使用Apple watch进行解锁登录等。
从iOS 8引进的Handoff相关的Api,允许你在各个平台、设备上不间断地完成同一份工作。如你在iPhone发表一个观点到一半,然后在mac上登录同一个账户,完成剩下的工作。
虽然,现在的App可能只支持iPhone,但是将来如果要向另外一种终端扩展,那么首先就要支持Handoff。
Demo
这里主要使用苹果自带的demo进行演示。可以到官方sample code中下载。
2. 从看wwdc视频开始
首先肯定先看Keynote,它从用户的角度描述了iOS的重大更新。然后看Platforms State of the Union,它从开发者角度描述了iOS的主要更新点。然后观看自己感兴趣的一些地方。这里是比较推荐的几个视频Top 10 WWDC 2016 Videos。
接下来,查看官方的release note,对里面的各个主题进行学习。
接下来,结合wwdc视频及对应的sample code进行demo。
注: 也可以下载wwdc的手机客户端来看视频,不过都是标清的,比较模糊。
3. 兼容性
导航条有黑条、颜色值不对
目前看到不少应用导航条会有一些问题。不知道是预览版的bug,还是导航条的变化,需要关注。不过,如果没做过多的定制的话,一般没有问题。
有些界面会错乱
App只发现有界面会有导航条的问题。应该是frame和contraints混用时,有些没处理好会冲突(在iOS9上不会出现),设置frame前,先layoutIfNeeded
强制layout,就没问题了。
使用iOS9 idk编译出来的包,在iOS10上,tab背景色变灰
iOS9编出来的包,在iOS10上显示出来tabbar的背景色不对(应用中设置了tabbar的背景图片)。用新的sdk编出来的包,没问题。
尚未对iOS10优化。未更新至64位。
有些App会弹出该警告。Archive中没有加64位支持?
有些badge会显示...
如图:
应该与iOS 10中的tabbaritem中badge可定制背景色和text属性有关。
权限问题
在访问通讯录时,强制必须在Info.plist中加入NSContactsUsageDescription
等描述,否则应用会崩溃。
4. 持续更新
本文中只列出概要,后面会进行更深入的研究,请关注我。