本文总结了iOS9中与开发者相关的关键特性,目前销售的iOS设备上运行着这些功能。本文还列出了一些文档,在这些文档中更加详细的描述了新功能。
关于已知问题的最新新闻和信息,参见iOS 9 版本说明( iOS 9 Release Notes)。iOS 9 中新增加的API列表,参见iOS 9.0 API差异( iOS 9.0 API Diffs)。关于新设备的更多信息,参见iOS设备兼容性参考( iOS Device Compatibility Reference)。
iPad多任务改进
iOS 9 增强用户在ipad上使用Slide Over、拆分视图、画中画的多任务体验。Slide Over特性允许用户选择另一个app并迅速与之交互。拆分视图特性让用户能够在iPad Air2上并排使用两个app。画中画特性(也成为PiP)让用户在其他应用上漂浮一个窗口用来观看视频。
当用户想要在屏幕上同时看到两个应用,当这一切发生时,你无法控制。尽管拆分视图和Slide Over是用户控制的,但为了确保用户有一个很好的多任务体验,有几件事你需要做。
你的应用有效的利用系统资源,这是非常重要的,这样当它与另一个运行的应用共享系统资源时可以运行的很好。在内存的压力下,系统会预先退出消耗最多内存的应用。关于创建运行良好高效iOS应用的指南,参见iOS应用高效指南( Energy Efficiency Guide for iOS Apps)。
如果你还没有准备好,确保采用size类,这样当用户决定在设备屏幕一部分观看时,你的应用看起来不错。
想学习更多关于当用户使用拆分视图、SlideOver时,你的应用可以更好的响应,参见采用多任务提高ipad体验( Adopting Multitasking Enhancements on iPad)。
有了拆分视图和Slide Over,用户可以控制他们是否想使用PiP在另一个运行的应用上观看视频。如果视频播放不是你的应用的主要功能,你不需要做任何事情来支持PiP体验。
当用户选择画中画,使用AVKit或者AV Foundation 的API。视频播放类中定义的媒体播放框架在iOS 9中弃用,并且不支持PiP。学习关于你的视频播放应用如何应对PiP,参见画中画快速入门(Picture in Picture Quick Start)。
3D 触摸
3D触摸给iOS 9 用户提供了额外的交互维度。在支持的设备上,用户可以在主屏幕上按应用图标快速选择特殊应用动作。在一个应用内,用户可以使用各种压力来预览一个项目、在单独的视图上打开一个项目,并完成相关行为。
iOS 9 提供一下3D 触摸API:
主屏幕快速行动API用来添加快捷方式到你的应用图标,这样可以预见并加速用户与你的应用交互(参见UIApplicationShortcut* API,例如 UIApplicationShortcutItem)。
UIKit 预览和弹出API让你轻松获得应用额外内容,同时维持用户环境(参见UIViewControllerPreviewing, UIViewControllerPreviewingDelegate和 UIViewController中的方法)。使用预览快速行动API,用按压的方式来替换应用中的触摸并按住动作(参见UIPreview* API,例如UIPreviewAction和 UIPreviewActionItem)。
Web视图的预览和弹出API使你可以预览HTML链接地址(参见WKWebView)。
UITouch力量性能让你可以往应用中添加自定义基于力量的用户交互。
无论你采用哪些API,你的应用必须在运行时检查3D Touch是否可用。关于3D Touch的帮助,参见在iPhone上使用3D Touch(Adopting 3D Touch on iPhone)。
搜索
iOS 9 中的搜索为用户提供更加新颖的方式来获取应用内的信息,即便该应用并未安装。当你的内容可搜索,用户可以通过Spotlight 和Safari搜索结果或者Handoff和Siri建议来访问你应用内的行为和深层内容。使用关于搜索的API,你可以决定在搜索结果中什么样的索引指向什么样的信息,在点击你应用或网站结果后用户重定向的位置。
结合iOS 9 搜索非常简单:你不需要搜索的任何经验,大部分开发者发现只需要几个小时便可以使他们的内容普遍的搜索到。学习如何使你的应用或网站内容更容易搜索,参见应用搜索编程指南( App Search Programming Guide)。
在iOS 9 搜索中隐私是一个重要的特性,为了给用户最好的搜索体验同时保护用户隐私数据,iOS 9 提供以下索引:
私人设备索引。每个设备包含一个私有索引,这些索引的信息不与苹果或苹果设备同步。当你在用户设备上创建一个项目的索引,只有该用户可以在搜索结果中看到该项目。
苹果服务器端索引。服务器端索引只存储公开可用数据,这些数据在你的网站上曾经标注过的。
iOS 9 提供以下API让你的内容更加容易搜索:
NSUserActivity 类包含新方法和属性可以帮助你为应用中用户执行行为创建索引,例如,访问导航点或创建和查看内容。几乎所有的应用可以利用NSUserActivity API为用户提供有用的内容。
核心焦点框架(CoreSpotlight.framework)提供的API可以帮助你添加特定应用内容到设备索引,并保持深度链接到你的应用。了解更多关于核心焦点API,参阅核心焦点框架参考( Core Spotlight Framework Reference)。
Web标记允许你的相关网页内容可搜索并帮助你丰富用户的搜索体验。学习如何标记网页内容,参见标记网页内容( Mark Up Web Content)。
此外,添加一个智能应用横幅为用户提供一个简单的方法链接到你的运营(学习如何使用智能应用横幅,参阅利用智能应用横幅推广应用(Promoting Apps with Smart App Banners))
- 通用链接让你用标准HTTP或HTTPS链接代替自定义URL方案。通用链接适用于所有用户:如果用户安装了你的应用,该链接直接将用户带到你的应用,如果他们没有安装你的应用,该链接会在Safari打开你的网站,了解更多关于通用链接,参阅通用链接帮助(Support Universal Links)。
游戏
iOS 9 包含几个技术改进,可以比以往更加容易实现游戏的图形和音频功能。利用高级框架易于开发,或者利用新的低级增强功能来巩固GPU的力量。
GameplayKit
GameplayKit框架(GameplayKit.framework)提供了用于构建游戏的技术基础。使用GameplayKit开发游戏机制,并将其与任何高级图形引擎结合,例如SceneKit或SpriteKit,来构建一个完整的游戏。这个框架提供了创建游戏的模块化结构,包括:
随机工具添加游戏的不可预测性同时不影响调试
实体-组件体系结构来设计游戏代码,可重用性更好
状态机,可以解开游戏系统中复杂的程序代码
GameplayKit还包括通用游戏算法的标准实现,这样你可以少花点时间阅读白皮书,有更多的时间使你的游戏更加独特。以下列出的是GameplayKit中的几个标准的算法实现。
回合制游戏中人工智能
代理模拟器使你描述的行为可以自动的高目标的继续下去。
构建数据驱动的游戏逻辑、模糊推理和紧急行为的规则系统
了解更多关于GameplayKit,参见GameplayKit编程指南( GameplayKit Programming Guide)和GameplayKit框架参考(GameplayKit Framework Reference.)。下载示例代码FourInARow: Using the GameplayKit Minmax Strategist forOpponent AI, AgentsCatalog: Using the Agents System in GameplayKit,and DemoBots: Building a Cross Platform Game with SpriteKitand GameplayKit.
I/O模型
I/o模型框架(ModelIO.framework)提供了3D模型资产和相关资源的一个系统级理解。你可以在以下几种类型的任务中使用这个框架:
引入网格数据、材质描述、灯光和相机设置及来自流行编辑软件和游戏引擎使用的文件格式中的其他场景信息
处理或产生这些数据,例如网格上的灯光信息或创建天空纹理
使用 MetalKit, GLKit或SceneKit API有效的加载资源数据到GPU缓冲区用于渲染
导出加工或生成资源数据为几种文件格式
了解更多关于I/O模型,参见I/O模型框架参考( Model I/O Framework Reference)。
MetalKit
MetalKit框架(MetalKit.framework)提供了一组实用函数和类,用于减少创建金属应用所需的努力。MetalKit为三个关键领域提供开发支持:
加载纹理帮助应用很容易异步加载各式各样来源的纹理。支持常见的文件格式例如PNG和JPEG,以及特定的纹理格式如KTX个PVR。
模型处理提供特定金属功能,以便于更容易使用I/O模型。使用这些高度优化的函数和对象来在I/O模型网格和金属缓冲区之间更高效的传递数据。
视图管理提供了一个金属视图的标准实现,大大减少了创建一个图形渲染app所需的代码量。
了解更多关于MetalKit API,参见金属框架参考( MetalKit Framework Reference)。更多关于一般的金属信息,参见金属编程指南( Metal Programming Guide),金属框架参考(Metal Framework Reference)和金属材质语言指导(Metal Shading Language Guide.)
金属性能着色器
金属性能着色器框架(MetalPerformanceShaders.framework)提供高度优化设计的算法和图形着色器,可以轻松高效的集成到你的应用。这些数据并行着色器是专门利用iOS GPU的独特硬件特点。
使用金属性能着色器类为所有支持的硬件实现最优性能,而不需要针对特定的iOS GPU更新你的着色器代码。MetalPerformanceShader 对象无缝的融合你的金属应用,可以用于资源对象例如缓冲区和纹理。
金属性能着色器框架提供的常用着色器:
MPSImageGaussianBlur类提供的高斯模糊
MPSImageHistogram类提供的图像直方图
MPSImageSobel类提供的sobel边缘检测
金属中的新特性
金属框架(Metal.framework)添加的新特性使你的图形渲染应用看起来更好并更高效。这些特性包括:
改善金属材质语言和金属标准库
计算着色器可以写入到更大范围的像素格式
增加OS X私有和深度材质模板
增加单独正面和背面模板引用值来提高阴影质量
SceneKit新功能
SceneKit框架(SceneKit.framework)包含iOS 9新特性,包括:
金属渲染支持。查看SCNView 和 SCNSceneRenderer类在支持的设备上呈现搞性能金属渲染。
在Xcode中一个新的场景编辑器,在Xcode中设计场景,用更少的时间和更少的代码,建立游戏和交互式3D应用(相关示例代码项目,下载地址: Fox: Building a SceneKit Game with the Xcode Scene Editor)。
位置音频。查看SCNAudioPlayer和SCNNode类添加空间音频效果,即自动跟踪场景中听者的位置。
更多关于这些和其他新功能,参见SceneKit框架参考( SceneKit Framework Reference)。
SpriteKit新特性
SpriteKit框架(SpriteKit.framework)包括iOS 9 中新特性,例如:
金属渲染支持。在设备上支持金属、金属渲染实现自动使用,即便是你正在使用自定义OpenGL ES着色器的情况下。
Xcode中一种改进的场景编辑器和一个新的动作编辑器。在Xcode中设计场景,使用更少的时间和更少的代码建立游戏和互动2D应用(有关示例代码,下载地址: DemoBots: Building a Cross Platform Game with SpriteKitand GameplayKit)。
相机节点(即SKCameraNode 对象)使创建滚动游戏更加简单。简单的将相机节点放入到你的场景中并设置场景相机属性。
位置音频。了解如何添加自动跟踪场景中听者位置的空间音频效果,参见SAudioNode类参考( SKAudioNode Class Reference)。
更多关于这些和其他新功能,参见SpriteKit框架参考(SpriteKit Framework Reference)。
应用瘦身
应用瘦身帮助你为不同的平台开发和自动化安装。应用瘦身包括以下内容:
切割。将艺术作品纳入到资源目录并在平台上标记,允许应用商店提交安装所需要的资源。
按需资源。在iTunes应用商店储存库主机应用的附加内容允许它获取所需资源用于同步下载和安装。更多的了解这项技术,请参见按需资源指南(On-DemandResources Guide)。
Bitcode。归档应用提交到应用商店作为中间代表,这是提交时编译成的64或32位可执行文件。
了解更多关于应用瘦身,参阅应用瘦身(iOS, watchOS)。
支持从右到左语言
iOS 9 对从右到左语言提供全面的支持,这使得更容易为你提供翻转的用户界面。例如:
标准UIKit控件自动翻转文本。
UIView 定义语义内容属性使你可以指定特定的视图该如何出现在从右到左的内容中。
UIImage 添加imageFlippedForRightToLeftLayoutDirection方法,在适当的时候可以很容易以编程的方式翻转图片。
了解更多关于提供用户界面,参见从右到左语言帮助( SupportingRight-to-Left Languages)。
应用传输安全
应用传输安全(ATS)是在应用间安全通信的最佳实践。ATS防止意外泄露,提供默认的安全行为,这很容易采用,在iOS9和OS X v10.11中默认开启。你应该尽快采用ATS,无论你正在创建一个新应用或是更新一个存在的应用。
如果你正在开发一个新应用,你应该使用HTTPS。如果你有一个现有的应用,你应该尽可能多的使用HTTPS,并创建一个计划尽快迁移应用。此外,如果通过上层应用的API进行通信,那么你需要通过TLS1.2版本高级算法进行加密保护,如果你没有这么做,那么就会报错。如果你的APP确实需要非加密领域,你必须在你的app Info.plist文件中定义这个领域。
扩展点
iOS 9介绍了几个新的扩展点(扩展点定义了使用政策并在你创建一个应用的扩展时提供使用的API)。具体:
网络扩展点:
使用包通道提供者扩展点来实现客户端定制VPN通道协议。
使用应用代理提供者扩展点来实现一个自定义客户端透明的网络代理协议。
使用过滤数据提供者和过滤器控制提供者扩展点来实现动态、设备内网络内容过滤。
每个网络扩展点需要苹果的特别许可。
Safari扩展点:
使用共享链接扩展点使用户可以看到你在Safa分享链接的内容。
当你的用户浏览网页时,使用内容块扩展点提供Safari一个列表描述你想要的内容块
索引管理扩展点支持重建应用数据索引而不用启动应用。
音频装置扩展点运行你的应用提供乐器、音频效果、发声器和其他类似GarageBand、Logic和其他音频装置主机应用的应用。扩展点也带来了一个完整的iOS音频插件,允许你载应用商店销售音频装置。
了解更多关于创建应用程序扩展,参见应用扩展编程指南( App ExtensionProgramming Guide)。
联系和联系UI
iOS 9 介绍了联系和联系UI框架(Contacts.framework和 ContactsUI.framework),提供了地址簿和地址簿UI框架的替代品。了解更多,参见联系框架参考(ContactsFramework Reference)和联系UI框架参考(ContactsUI Framework Reference)。
手表连通性
手表连通性框架(WatchConnectivity.framework)提供iPhone和配对的苹果手表间双向通信。使用这个框架来协调你iOS应用和你相关手表应用的活动。该框架支持同时运行应用间的即时消息和其他情况下但的背景信息。了解更多,参见手表连通性框架参考(WatchConnectivity Framework Reference)。
钥匙链
钥匙链提供了更多保护选项和安全领域一种新的加密密钥。具体:
新限制访问控制列表允许创建触摸ID或密码约束。
新触摸ID约束,当添加或删除指纹时作废钥匙链。
支持应用提供钥匙链熵加密,使用访问控制列表中应用密码选项。
支持身份验证文本使你可以通过调用SecItem分开验证。
支持生成密钥、使用kSecAttrTokenIDSecureEnclave 属性在安全领域使用。注意,访问这些密钥可以被访问控制列表上支持的所有约束所控制。
Swift 改进
了解Swift新特性,参见Swift语言( Swift Language)。
额外框架变化
除了上面描述的重大变化,iOS 9 包括其他改进。
AV 基础框架
AV基础框架(AVFoundation.framework)添加新AVSpeechSynthesisVoiceAPI让你可以指定一个声音标识符而不是语言。你可以使用name 和quality 属性来获取声音的信息。
AVKit 框架
AVKit框架(AVKit.framework)包含AVPictureInPictureController和 AVPlayerViewController类,帮助你加入画中画。关于画中画的更多信息,参见iPad多任务改进( MultitaskingEnhancements for iPad)。
CloudKit框架
如果你有一个CloudKit应用,你可以使用CloudKit网络服务或ClouldKit JS,这是一个javascript库,为用户提供一个web界面访问应用中的相同数据。你必须创建数据库的schema,并且用于web界面来取回、创建、更新和删除记录、区域和订阅。更多信息,参见CloudKit JS参考(CloudKit JS Reference),CloudKit 网络服务参考(CloudKit Web Services Reference),CloudKit目录:介绍CloudKit(Cocoa和JavaScript)(CloudKitCatalog: An Introduction to CloudKit (Cocoa and JavaScript)* *)。
基础框架
基础框架(Foundation.framework)包含以下改进:
按需加载NSBundle资源的API。
字符串文件支持基于文本的可变长度的字符串。
对电量和发热管理的NSProcessInfoAPI。
HealthKit框架
HealthKit框架(HealthKit.framework)包含以下改进:
支持跟踪生殖健康和紫外线照射领域。了解用于描述特征、数量和其他项目的常量,参见HealthKit常量参考(HealthKit Constants Reference)。
支持删除条目和跟踪删除条目。更多信息,参见HKDeletedObject, HKAnchoredObjectQuery和中HealthKit常量参考(HealthKit Constants Reference)的deleteObjects:withCompletion: and deleteObjectsOfType:predicate:withCompletion:方法。
本地认证框架
本地认证框框(LocalAuthentication.framework)包含以下改进:
获取当前登记的指纹的能力,当一个指纹登记或删除,应用可以改变行为。
支持取消代码提示的用户。
支持评估钥匙链访问控制列表和钥匙链中使用身份验证环境。
支持触摸ID匹配的重用。之前的电话解锁匹配可用于evaluateAccessControl:和evaluatePolicy:localizedReason:reply:。
MapKit框架
MapKit框架(MapKit.framework)包含以下几个补充,可以为你提供更丰富的用户体验,具体:
MapKit支持查询交通ETA并发布地图交通方向
地图视图支持3D立体模式
可以完全自定义注释
MapKit搜索结果和CLGeocoder可以提供一个时区的结果。
PassKit 框架
PassKit框架(PassKit.framework)包含Apple支付改进几个额外支持。具体:
在iOS 9,Apple 支付支持发现卡、借记卡和信用卡。有关更多信息,参见PKPaymentRequest 类参考(PKPaymentRequestClass Reference)中的“支付系统”。
发卡机构和支付系统可以在他们的应用中直接添加卡到Apple支付。更多信息,参见PKAddPaymentPassViewController类参考( PKAddPaymentPassViewController Class Reference)。
Safari服务框架
Safari服务框架(SafariServices.framework)包含以下改进:
SFSafariViewController可用于在应用中显示网页内容。它共享cookies和其他Safari数据,拥有Safari的很多特性,例如Safari的自动填充和Safari阅读器。不同于Safari本身, SFSafariViewController UI是专门用于显示一个页面,让用户回到你应用位置的一个完成按钮。
如果你的应用显示网页内容,但不自定义内容,考虑用SFSafariViewController更换WKWebView 或基于UIWebView的浏览器。
UIKit框架
UIKit框架(UIKit.framework)包含许多改进,例如:
API支持3D触摸功能,例如主屏幕快捷操作(例如,UIApplicationShortcutItem),预览和弹出(使用UIViewControllerPreviewing, UIViewControllerPreviewingDelegate 和UIViewController中的新方法),和快速预览动作(使用 UIPreviewAction, UIPreviewActionGroup和 UIPreviewActionItem)。
UIStackView 类可以帮助你管理一组类似堆栈的子视图,可以水平或垂直排列。
UIView(例如leadingAnchor和 widthAnchor)NSLayoutAnchor , NSLayoutDimension新的布局锚,这一切使布局简单。
新的布局指南帮助你采用可读内容边距并定义内容在视图内绘制。更多信息,参见UILayoutGuide。
新 UIApplicationDelegate方法可以用来打开一个文档(并修改它),而不是使用文档的副本。为了支持在一个地方打开的功能,应用也添加其他信息到Info.plist文件,设置LSSupportsOpeningDocumentsInPlace 的值为YES。
UITextInputAssistantItem 类帮助你布局快捷栏中的按钮。
改进触摸事件,例如在上次刷新显示和触摸的预测获得中间触摸的能力。
改进UIKit动态,比如支持不规则的碰撞边界,新UIFieldBehavior类,支持额外可自定义的不同字段类型及额外的UIAttachmentBehavior附件类型。
UIUserNotificationAction中的新behavior 属性,可以支持在用户通知中输入文本。
新NSDataAsset类使根据你的社保内存和图形功能获取内容更加容易
所有标准UIKit控制适当翻转支持从右到左的语言。此外,导航、手势、集合视图和表格单元布局也将适当的翻转。
弃用的API
以下API已弃用:
地址簿和地址簿UI框架。使用联系和联系UI框架代替。
基础框架中 NSURLConnection的API。使用NSURLSessionAPI代替。
特定API用法的完整列表,参阅iOS 9 API差异( iOS 9.0 API Diffs)。