[What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW11 "What's New in iOS 9")
####iOS 9.0
iOS 9 在 Slide Over, Split View, and Picture in Picture 这几个方面对 iPad 进行了多任务处理的加强。Slide Over (分割)属性可以让你选到次要 app ,并且快速的与它交互。 Split View (分屏)属性让你可以在 iPad Air 2 的一个屏幕上同时操作两个 app。Picture in Picture (画中画)属性可以让你在一个全局的悬浮框中看视频,悬浮于别的 app 页面上层。
用户自己决定什么时候使用分屏工作,而你一无所知。尽管如此,你还是要做很多事情来给用户更好的体验:
1. 你的 app 需要有效的运行,更好的和其他运行的 app 分享系统资源。内存有压力时,系统会优先杀掉消耗内存较多的。至于如何开发出高效的 iOS Apps 你可以看 [*Energy Efficiency Guide for iOS Apps*](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243)
2. 如果你的 app 还没做好准备,那你最少要适配一下 Size Classes ,让你的 app 在分屏时好看一些
class="Apple-tab-span"> 更多关于如何应对 Slide Over 和 Split View 的内容请看 [*Adopting Multitasking Enhancements on iPad*](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145)
和 Slide Over 和 Split View 一样,用户随时都能根据自己的喜好去操作 PiP 中的视频。这时,如果你有播放视频功能,你啥都不用改,但是如果你有的话,你需要适配 PiP。你可以用 AVKit 或者 AV Foundation APIs,因为 Media Player framework 里面回放的 API 在 iOS 9 中不支持 PiP,而且还被废弃了。 更多请参考 [* Picture in Picture Quick Start *](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForPictureInPicture.html#//apple_ref/doc/uid/TP40015145-CH14)
3D Touch 给了 iOS 9 用户提供了一个新维度的交互方式。在支持该功能的设备上,你可以在手机主页面的 app icon 上按压触发指定的功能。用户可以用不同的压力来预览一个条目的内容、打开一个单独的页面并进行相关操作。
iOS 9 提供了以下的 3D Touch 的 API:
1. 主屏上的快速操作 API 用来给你的 app 添加用户可能或确定使用的快捷方式。(UIApplicationShortcut 的 API)
2. UIKit 的 Peek 和 Pop API 让你可以轻松的给用户提供更多额外的内容(参考 UIViewControllerPreviewing, UIViewControllerPreviewingDelegate, 和 UIViewController 中新的 APIs)。使用 peek API 你可以提供一个压力操作替换原有的点击方式
3. WebView 也支持 peek & pop API,你可以用它预览 HTML 内容(WKWebView)
4. UITouch 里面的 force 属性让你可以自定义基于 force touch 的交互
不管你是否用了 3D Touch 的 API,你都要在运行时判断是否支持 3D Touch。API:[*Adopting 3D Touch on iPhone*](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/uid/TP40016543)demo:[*ApplicationShortcuts: Using UIApplicationShortcutItem*](https://developer.apple.com/library/content/samplecode/ApplicationShortcuts/Introduction/Intro.html#//apple_ref/doc/uid/TP40016545),[*ViewControllerPreviews: Using the UIViewController previewing APIs*](https://developer.apple.com/library/content/samplecode/ViewControllerPreviews/Introduction/Intro.html#//apple_ref/doc/uid/TP40016546)。
iOS 9 的搜索给用户提供了全新的获取 app 内部信息的途径,即使他还没安装 app。当你将你的内容设置为可以搜索,用户可以直通过 SpotLight、Safari 的搜索结果、Handoff 以及 Siri 建议应用这些渠道,直接访问你 app 深处的内容。使用搜索相关的 API ,你可以决定在哪些内容上加索引、哪些信息可以放在搜索结果里以及用户点击搜索结果(from app or website)后可以重定向到哪里。
集成 iOS 9 的搜索是比较简单的:你不需要任何搜索相关的经验;很多开发者发现只要几个小时就能配置好。想知道如何配置搜索的话,参考[*App Search Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/index.html#//apple_ref/doc/uid/TP40016308)。
隐私是搜索功能一个重要的属性。为了给用户很好的搜索体验时,保护他们的隐私,iOS 9 给出了如下的索引方式:
1. 一个私有的基于设备的索引:每个设备都有一个私有的索引库,这些信息不会给 Apple ,也不会同步给其他设备。当你标记一个用户的私有设备索引时,只有这个用户才能在搜索结果中见到他
2. Apple 服务端的索引:服务端的索引仅仅存储你在网站上标记的公开数据
iOS 9 提供了一下的 APIs 帮助你设置搜索:
1. 当用户操作 app 查看或创建内容时,NSUserActivity 包含了很多新的方法和属性来帮助你设置索引。每个 app 都可以使用 NSUserActivity APIs 来给用户提供可用的信息
2. CoreSpotlight.framework 提供了用于添加基于设备的 app 特定内容索引以及设置深度 app 内容链接的 API。[*Core Spotlight Framework Reference*](https://developer.apple.com/documentation/corespotlight)
3. Web 的标记让你可以关联网站的内容到搜索中,以丰富搜索结果。[*Mark Up Web Content*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/WebContent.html#//apple_ref/doc/uid/TP40016308-CH8)
除此之外,添加一个 Smart App Banner,可以让用户更容易的链接到你的 app [*Promoting Apps with Smart App Banners*](https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6)
4. 通用链接使用标准的 https/http 链接代替 URLs schmes。这个链接在用户安装 app 时会直接进入 app;没有安装时会用 Safari 打开你的网页。参考[*Support Universal Links*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12)
iOS 9 包含了很多新的技术,帮你提升游戏的画质和音效。不管是 frameworks 里面的 APIs 还是 底层的 APIs,都可以用来释放 GPU 的力量。
GameplayKit.framework 提供了很多构建游戏的基础技术。使用 GameplayKit 开发一些游戏机制,然后用任意一个上层引擎去合并它,构成一个完整的游戏。这个 framework 提供了构建游戏的模块化基础组建,包括:
1. 随机工具,用于增加游戏的不可预知性且不影响测试
2. 实体系统,使游戏代码复用性更好
3. 状态机,用于拆解复杂的代码
GameplayKit 也包含了一些基本的算法。所以你会省读书学习的时间,使用这些时间去做好你独有的游戏。下面列出一些标准的算法接口:
1. 一种小型的人工智能,用于敌对的回合制游戏
2. 一个代理模型,描述高级目标的自动移动行为(寻路功能咯)
3. 规则系统用于,建立数据驱动的游戏逻辑、模糊推理和紧急行为
参考[*GameplayKit Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/index.html#//apple_ref/doc/uid/TP40015172),[*GameplayKit Framework Reference*](https://developer.apple.com/documentation/gameplaykit)。
ModelIO.framework 提供了一个系统级别的 3D 模型的素材和依赖资源库。你可以用用它来完成以下的任务:
1. 导入网格数据、材质描述、光影、相机效果,以及来源于主流软件和引擎其他场景相关信息
2. 处理生成这些数据:烘焙一个网格或创建一个天空纹理
3. 与 MetalKit, GLKit, 或者 SceneKit APIs 一起,有效的将资源文件加载到 GPU 缓冲区进行渲染
4. 导出处理的或者生成的资源数据为任意一种文件格式
参考[*ModelIO Framework Reference*](https://developer.apple.com/documentation/modelio)。
MetalKit.framework 提供了一系列实用的方法和类,用来减少开发一个 Metal app 的工作量。MetalKit 在这两个方面给了开发支持:
1. 纹理加载方面:帮助你的 app 轻松做到异步加载纹理。不仅支持普通的 PNG、JPEG,特殊的纹理格式也支持,例如 KTX 和 PVR
2. 模型处理方面:提供了 Metal 特有的方法,让你可以更好的使用 Model I/O 的接口。使用高度优化的方法和对象在 Model I/O 网格 和 Metal 缓冲区之间传输数据
3. 页面管理方面:页面管理器给了一个标准的 Metal view 的实现。这大大减少了图形渲染 app 的开发时间
参考[*MetalKit Framework Reference*](https://developer.apple.com/documentation/metalkit),[*Metal Programming Guide*](https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014221)。
MetalPerformanceShaders.framework 提供了高度优化的计算和图形着色器,这些都为高效集成到你的 app 中而设计。这些同步数据着色器都根据支持 Metal 的 iOS 设备进行了调整。
使用 MetalPerformanceShaders.framework 中的了类,构建支持所有设备的性能最优的着色器,而不需要针对特定 iOS 设备改动你的代码。MetalPerformanceShader 对象可以无缝的适配你的 app,包括可以被任何使用 Metal 资源的对象(比如缓冲区和纹理)。
通用的 MetalPerformanceShaders.framework 提供的着色器如下:
1. Gaussian blur(高斯模糊) - MPSImageGaussianBlur
2. Image histogram(图像直方图) - MPSImageHistogram
3. Sobel edge detection(索贝尔边缘检测) - MPSImageSobel
Metal.framework 加入了一些新的特性,是你的图形渲染 app 看上去更好,运行也更有效。如下:
1. 改进了 Metal Shading Language 和 Metal Standard Library
2. 计算着色器现在可以写入到更大的像素格式
3. 新增了一些私有的、深度的模版材质与 OS X 保持一致
4. 为改善阴影质量,增加了深度夹紧和前、后向的模板参考值
SceneKit.framework 为 iOS 9 增加了以下特性:
1. Metal 渲染的支持:[SCNView](https://developer.apple.com/documentation/scenekit/scnview),[SCNSceneRenderer](https://developer.apple.com/documentation/scenekit/scnscenerenderer)支持对应机型高性能的 Metal 渲染
2. Xcode 新增了一种场景编辑器:使用 Xcode 可以使用很少的代码和时间来创建游戏和支持 3D 交互 app。demo [*Fox: Building a SceneKit Game with the Xcode Scene Editor*](https://developer.apple.com/library/content/samplecode/Fox/Introduction/Intro.html#//apple_ref/doc/uid/TP40016154)
3. 位置音效:使用[SCNAudioPlayer](https://developer.apple.com/documentation/scenekit/scnaudioplayer),[SCNNode](https://developer.apple.com/documentation/scenekit/scnnode)可以添加空间音效,并跟踪听者的位置自动调整
SpriteKit.framework 在 iOS 9 增加了以下功能:
1. Metal 渲染的支持:在有 Metal 设备上,支持对应机型高性能的 Metal 渲染,即使你用的是自定义的 OpenGL ES 的着色器
2. Xcode 的场景编辑器进行了提升,顺带家了一个新的动作编辑器。可以用更少的代码和时间来构建游戏和 2D App [*DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit*](https://developer.apple.com/library/content/samplecode/DemoBots/Introduction/Intro.html#//apple_ref/doc/uid/TP40015179)
3. 相机节点:使用这个可以轻易的做出滚动类的游戏。仅需将一个相机节点加入到场景的属性中就好了[*SKCameraNode*](https://developer.apple.com/documentation/spritekit/skcameranode)
4. 位置音效:可以给场景添加空间音效,并跟踪听者的位置自动调整 [*SKAudioNode Class Reference*](https://developer.apple.com/documentation/spritekit/skaudionode)
#App Thinning
app 瘦身让你可以开发目标平台的 app 并且在安装的时候自动给用户一个最合适的包。这个优化包括以下方面:
1. 碎片化:app 内的插图与资源文件都可以按照对应的平台进行提供,前提是 App Store app
2. 按需加载:app 可以不一次性下载全部的内容。iTunes App Store 会部署主机,用来放置你按需加载的内容。这个加载安装支持异步(ps:如果是企业版的可以放在自己的 https 的服务器下)
3. bitcode:使用 bitcode 编译后 ,App Store 会对你上传的包再次编译,使之生成 32 位和 64 位的两套,以供对应的设备下载
参考[*App Thinning*](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35)
iOS 9 全面支持从右到左布局。这让你更容易的提供一个反向的界面:
1. UIKit 标准库的控件自动支持反向内容布局
2. UIView 定义了对应的特殊化的语义,你可以自行控制哪些 view 的内容支持反转
3. UIImage 新增了 imageFlippedForRightToLeftLayoutDirection 方法,用于在代码中适配反向的内容
ATS 这个是用于保证 app 与后端交互的安全的。ATS 防止意外的信息暴露,提供基础的安全服务,适配也很简单(iOS 9 and OS X v10.11 +)
如果你正在开发 app 你需要使用HTTPS,如果你的 app 已经发布了。你需要尽快制定一个计划来支持HTTPS。此外,你与上层 API 交互时,需要使用 TLS 1.2 进行加密。如果你还没打算处理 ATS,你需要在你的 info.plist 给你的请求加入白名单。
##Extension Points
iOS 9 新增了一系列扩展点(扩展点是用来给 app 的扩展应用提供使用协议和相关 APIs 的)
1. Network extension points
1.1 包隧道工具扩展点:可以用它定义 VPN 客户端的隧道协议
1.2 app 代理工具扩展点:可以用它自定义透明的客户端网络代理协议
1.3 数据过滤和数据控制工具扩展点:可以用它动态的在设备上过滤内容
2. Safari extension points
2.1 Safari 分享链接扩展点:允许用户在 Safari 分享链接中看到你的内容
2.2 Safari 内容屏蔽扩展点:你可以给 Safari 一个屏蔽掉列表,当用户访问列表内的内容时,将会被屏蔽
3. Index Maintenance extension point 支持在不打开 app 的情况下维护 app 的数据索引
4. Audio Unit extension point 允许你的 app 提供乐器、音效、声场以及更多的供其他 app(Audio Unit app)使用功能。这个扩展点也提供了一个完整的插件模型,让你的 Audio Units 可以在 App Store 上售卖
[*App Extension Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/index.html#//apple_ref/doc/uid/TP40014214)
iOS 9 加入了 Contacts.framework 和 ContactsUI.framework,这两个用于替换现有的 Address Book 和 Address Book UI frameworks。[*Contacts Framework Reference*](https://developer.apple.com/documentation/contacts)
WatchConnectivity.framework 提供了两种方式用于 iPhone 与其配套的 Watch 上的对应 app 进行通讯。这个 framework 支持两种方式,前台即时通讯和后台异步通讯。[*Watch Connectivity Framework Reference*](https://developer.apple.com/documentation/watchconnectivity)
钥匙串提供了更多保护选项和一种新的独立持有的加密密钥。以下:
1. 新的访问权限名单,让你可以创建仅仅基于 Touch ID 或密码的访问限制
2. 新的 Touch ID 访问权限可以通过在钥匙串中加入或删除指纹来控制
3. 支持 app 使用访问权限中的 Application Password 的选项,自主提供加密熵
4. 支持上下文认证,也就是说你可以单独从保密条目中调起一个认证
5. 支持使用 kSecAttrTokenIDSecureEnclave 属性进行密钥生成和独立加密熵生成。注意,这些密钥可以被访问权限名单所支持的限制进行控制
学习新的 Swift,参考[*Swift Language*](https://developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_7_0.html#//apple_ref/doc/uid/TP40015242-SW2)
iOS 9 在以下 frameworks 中有了很多提升:
AVFoundation.framework 新增了 AVSpeechSynthesisVoice 的 API,可以让你通过 id 判断音频,而不是语言。你也可以使用 name 和 quality 两个属性来获得音频的信息。
AVKit.framework 加入了 AVPictureInPictureController 和 AVPlayerViewController,用于帮助你实现画中画功能。
如果你有 CloudKit 的 app,你可以使用 CloudKit 的 web 服务或者 CloudKit JS(一个 js 的库)提供一个网页版的界面,使用户在你的 app 中访问 Cloud 中同样的数据。你必须为你的数据库设置 schema,给已经创建的网页界面提供获取数据、创建数据、更新数据和删除记录、空间和订阅功能。[*CloudKit JS Reference*](https://developer.apple.com/documentation/cloudkitjs),[*CloudKit Web Services Reference*](https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/index.html#//apple_ref/doc/uid/TP40015240),[*CloudKit Catalog: An Introduction to CloudKit (Cocoa and JavaScript)*](https://developer.apple.com/library/content/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599)
Foundation.framework 有了以下的加强:
1. 按需下载的 APIs
2. 字符文件对上下文可变宽字符串的支持
3. NSProcessInfo 用于电源和热量管理的 APIs
HealthKit.framework 有以下的增强:
1. 新增对生殖健康和紫外线系数的追踪选项
2. 支持删除条目和已删除条目的跟踪,参考 HKDeletedObject, HKAnchoredObjectQuery, and the deleteObjects:withCompletion: and deleteObjectsOfType:predicate:withCompletion: methods in [HKHealthStore Class Reference](https://developer.apple.com/documentation/healthkit/hkhealthstore)
LocalAuthentication.framework 新增了一下内容:
1. 可以获得当前登记的指纹;因此,指纹的增删对 app 的动作会有一些影响
2. 支持在代码层取消用户提示
3. 支持对钥匙串权限名单以及上下文权限的接入
4. 支持 Touch ID 匹配的复用;用于手机解锁的指纹可以在 evaluateAccessControl: 和 evaluatePolicy:localizedReason:reply: 中使用
MapKit.framework 新增了以下功能以提供更好的用户体验:
1. 支持查询ETA信息(预计到达、离开时间)以及在地图加入相应的标注
2. 支持 3D 城市观光模式
3. 动画可以完全自定义
4. MapKit 和 CLGeocoder 的搜索结果可以根据时区筛选
PassKit.framework 加入了很多用户增强 Apple Pay 的支持。特别是
1. 在 iOS 9 中 Apple Pay 支持发现卡、商店借记卡和其他信用卡[*PKPaymentRequest Class Reference*](https://developer.apple.com/documentation/passkit/pkpaymentrequest)
2. 卡的发行机构和支付公司可以在它们自己的 app 中将卡直接添加到 Apple Pay[*PKAddPaymentPassViewController Class Reference*](https://developer.apple.com/documentation/passkit/pkaddpaymentpassviewcontroller)
SafariServices.framework 有了以下的更新:
SFSafariViewController 可以在你 app 中用于展示 web 内容。它和 Safari 共享 cookie 和站点数据,也有 Safari 的其他优秀属性(Safari AutoFill and Safari Reader)。和 Safari 不一样,SFSafariViewController 的 UI 就是为了展示单页的,上面有个完成按钮,用于点击返回你的 app。
如果你的 app 需要展示 web 内容,并且不需要自定义。你可以用 SFSafariViewController 替换 WKWebView 或者 UIWebView 的页面。
UIKit.framework 包括了以下的更新内容:
1. UIStackView 用于维护当前页面的子页面,控制它们的垂直或水平布局
2. 新的约束方式支持锚点布局,UIView 的 (leadingAnchor & widthAnchor)以及 NSLayoutAnchor & NSLayoutDimension,都让你更容易的布局
3. 你的布局指导,让你更容易的适配好页面内容。参考[*UILayoutGuide*](https://developer.apple.com/documentation/uikit/uilayoutguide)
4. AppDelegate 里面新增了文件打开和修改(针对的是其他 app 共享的文件)直接操作方法,而不是操作备份。这个可以在 plist 里面设置 LSSupportsOpeningDocumentsInPlace 属性来开关
5. UITextInputAssistantItem 让你可以直接拖一个 barbutton 组在快捷栏上
6. 对 touch 事件的强化: 例如可以预估上次刷新页面到这次之间点击事件的能力
7. 对 UIKit 动力学增强,例如支持非矩形边界的碰撞;新增 UIFieldBehavior,支持多种字段类型(包括自定义的),以及 UIAttachmentBehavior 中的其他附件类型
8. UIUserNotificationAction 中新加了动作属性 behavior,让用户可以在通知处理时输入文本
9. NSDataAsset 让你可以更容易的根据设备的硬件去获取资源
10. UIKit 的控件全面支持从左到右布局
以下 APIs 被废弃:
1. Address Book 和 Address Book UI 被新的 Contacts 和 Contacts UI 替换
2. NSURLConnection APIs 被 NSURLSession APIs所替换
####iOS 9.1
iOS 9.1 只加了2个东西,Live Photos 和 Apple Pencil 的支持
Live Photos 让用户可以捕捉和重现一些快乐的时刻,它提供了比传统照片更丰富的内容。当用户按下快门的时候,这个特性会让你的镜头捕捉到更多的内容:更多的图片帧数,音频信息等。当你回放这些动态的照片时,可以看到更多的信息。
iOS 9.1 提供了相关的 APIs,允许 app 播放、导出和分享 Live Photos。Photos framework 新增的 PHLivePhoto 对象,它可以从 PHImageManager 中提取给你 Live Photos 的数据。当然你需要使用 PhotosUI framework 中的 PHLivePhotoView 来展示对应的内容。PHLivePhotoView 提供了完整的展示、交互以及视觉处理。
你可以使用 PHAssetResource 从 PHLivePhoto 里面获取数据用于分享。你可以通过 PHImageManager or UIImagePickerController 在相册中请求 LivePhotos 的资源。如果你的 app 有分享的扩展点,你还可以通过 NSItemProvider 来获取 LivePhotos。在接受端你可以使用 PHLivePhoto 来存放分享者提供的数据。
Live Photos 导出的数据是 PHAssetResource 类型的对象。上传这一堆数据时,你必须当成一个整体去对待。当你在服务端重新打包这段数据时,需要进行来源验证,不同来源的不能进行加载。
iOS 9.1 引入了一些 APIs,在 Apple Pencil 支持的设备上,允许用户进行对应的操作。为此,UITouch 做了以下改动:
1. preciseLocationInView: 和 precisePreviousLocationInView: 这两个方法,会在可用的情况下给你提供 touch 的坐标
2. altitudeAngle 属性和 azimuthAngleInView: 和 azimuthUnitVectorInView: 方法会为你确定笔尖的高度和方向
3. estimatedProperties 和 estimatedPropertiesExpectingUpdates 对象会帮你做好刷新 touches 前的预估准备
4. UITouchTypeStylus 会表征从笔尖收到的 touch
####iOS 9.2
iOS 9.2 对 CloudKit Framework 和 WatchKit Framework 进行了优化。
CKFetchWebAuthTokenOperation 提供了一个对象让你提供给 web 对象 API token 时,可以获得它的 token。
WKInterfaceDevice 支持从右到左布局,它会提供 layout 的方向参数(WKInterfaceLayoutDirection)以及内容展示用的控件信息(WKInterfaceSemanticContentAttribute)
####iOS 9.3
Media Player 和 StoreKit frameworks 提供了新的 API,让你可以将 Apple Music 的音轨加入到 Music Library 并播放它。首先,使用 SKCloudServiceController API 去看一下当前的设备是否允许你这么做。然后,使用 MPMediaLibrary 的 addItemWithProductID:completionHandler: 方法去添加一个音轨到音乐库中,并且使用 MPMusicPlayerController 的 setQueueWithStoreIDs: 方法去播放它。
CloudKit.framework 支持长操作,即使你退出了也可以在操作。例如大型文件的后台下载,或者用户操作的持久化同步。
如果你将一个 CKModifyRecordsOperation 标记为长操作,记住你的操作因为不会立刻结束,所以这会增加操作冲突的风险。为了防患于未然,你需要:
1. 创建一个 journal 记录,单次写入的记录(没有冲突的话),然后在读取的使用协调一下这个记录
2. 当你解决了冲突后,下次启动 app 时从新操作一次
在 HealthKit.framework 中的 HKActivitySummary 对象给了用户当天数据的集合。包括当天的运动量、能量消耗以及站了多久。 Apple Watch 会将数据存在 HealthKit store 中。你可以创建自己的数据集合(例如在你的 iPhone app 中展示 HKActivityRingView),但是这些数据不会被放在 HealthKit store 中。你可以用 HKActivitySummaryQuery 去读取 HealthKit store 中的 HKActivitySummary 数据。
iOS 9.3 新增了 HealthKitUI.framework,其中的 HKActivityRingView 可以用来展示 HKActivitySummary 的数据。(移动距离-红色;锻炼-蓝色;站立-绿色)
WatchConnectivity.framework 有了 iPhone 连接多个 Watch 的功能。所以,如果你的 app 是要与 Watch 版通讯的,你需要适配一下。使用新的界面管理 Watch 会话。新的界面提供了更多的信息,如配对的状态和发起配对的提示。所以你如果不适配的话,出现多个 Watch 的时候,你的 app 就可能跪了。
####iOS 9.x end