http://www.apple.com/cn/ios/whats-new/
由于以前的版本也不大清楚,完全借鉴的微博@微博@iOS程序犭袁写的iOS9适配那篇文章。
1、App传输加密
网络适配_ATS:改用更安全的HTTPS;
HTTP+SSL/TLS+TCP=HTTPS或者HTTPS="HTTP over SSL";
无非就是安全,更安全,Apple让HTTP采用SSL/TLS协议,由HTTP转到HTTPS。官方文档称之为ATS, APP transport Security。为什么不使用HTTP通信,因为它不加密。信息数据全是明文传播,带来三大风险:①窃听风险②篡改风险③冒充危险。很容易被第三方进行各种操作。
如何解决适配问题:(1)、将公司的服务器端升级使用TLS 1.2,解析相关数据。
(2)、通过在info.plist中声明,倒退回不安全的网络请求依然能让APP访问指定http,但是Apple不建议。
苹果官方给出的方法是提供了一些可选配置项来决定是否开启ATS模式,让开发者自己选择开启或者不开启。
开发者可以针对默写确定的URL不使用ATS,这需要在工程中的info.plist中标记NSExceptionDomains。在NSExceptionDomains字典中,可以显式的指定一些不使用ATS的URL。这些你可以使用的例子可以是:
NSIncludesSubdomains
NSExceptionAllowInsecureHTTPLoads
NSExceptionRequiresForwardSecrecy
NSExceptionMinimumTLSVersion
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionMinimumTLSVersion
NSThirdPartyExceptionRequiresForwardSecrecy
这些关键字使我们可以更加细致的设置针对不使用ATS的域名情况下禁用ATS或者一些特殊的ATS选项。
对于向列表最后三个,关键字中的加了"ThirdParty"字样的词:
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionMinimumTLSVersion
NSThirdPartyExceptionRequiresForwardSecrecy
在功能上和不含有"ThirdParty"的关键字有同样的效果,而且实际运行中所调用的代码将会完全忽略是否使用"ThirdParty"关键字。所以,在开发中,我们应该使用适合你的场景的关键字而不用考虑这些。具体方法:
2、更灵活的后台定位
畅媒后台运行这是我们的后台定位,但是有蓝条,而如果请求后台定位的权限,适配iOS9,就可以完全在后台定位,不会有蓝条。那么如何请求后台定位权限:
按照这种方式,再配置info.plist:
如果没有配置info.plist的话,程序会崩溃掉,报错提示:
当然,还可以用另一种解决方式,就是在对应的target的Capabilities -> Background Modes -> 开启 Location Updates
3、企业级分发
有两处变化:
(1)、iOS9以后,企业级分发ipa包将遭到与Mac上dmg安装包一样的待遇:默认不能安装,也不再出现“信任按钮”,但是不知道是美版的原因还是iOS9.1补漏洞的原因,没有发现过这个情况。
(2)、iOS9以后,企业分发时可能存在:下载的ipa包与网页两者的 bundle ID 无法匹配而导致下载失败的情况
iOS9升级后众多企业分发的 app 已经出现了不能安装的情况,而iOS8或更早的系统不受影响。那是因为从iOS9以后,系统会在 ipa 包下载完之后,拿ipa包中的 bundle ID 与网页中的 plist 文件中的 bundle ID 进行比对,不一致不允许安装。
解决方法就是两者的bundle ID修改一致。
4、Bitcode
bitcode 是被编译程序的一种中间形式的代码。包含 bitcode 配置的程序将会在 App Store 上被编译和链接。 bitcode 允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新的版本到 App Store 上。通俗解释就是:在线版的android ART模式。
对于Bitcode的适配,我们有两种方法,一种是更新library使包含Bitcode,负责会出现警告
甚至有的会报错误,无法通过编译:
无论是警告还是错误,得到的信息是:我们引入的一个第三方库不包含Bitcode.
第二种方法:关闭Bitcode,
我觉得这里没什么变化,因为目前的项目不就是这样设置的么。
iOS推出App Thinning,个人理解它是指用户从苹果商店下载安装我们的APP时,根据这个用户的具体设备类型及操作系统对我们的APP进行裁剪,达到占用最少的磁盘空间。发挥最大的兼容性等目的。经过优化后,用户不会直接下载我们应用的完整bundle,而是下载最简配置+特定需求项,从而让下载过程缩短,腾出更多的内存空间。
APP Thinning目前包括:Slicing-切片(iOS),Bitcode(iOS,watchOS)以及On-Demand Resources(iOS)。
Slicing:Artwork被纳入Asset Catalog,并且被打上与平台对应的标记,这样AppStore便知道分发哪些用户真正需要的资源给用户下载安装。
Bitcode:Bitcode是LLVM编译器中间代码的编码,我们将中间代码提交给AppStore,然后由AppStore来进行编译-Comple和连接-Link,最终提供32位或64位的可执行文件供用户下载。目前iOS应用的中间代码提交是可选的,但是苹果已经要求watchOS应用提交必须包含Bitcode.
On-Demand Resource:懒加载资源,即部分资源放在云端或者AppStore,需要的时候才会请求下来,也是为了减缩APP包体积。
5、iOS9 URL Scheme 适配_引入白名单概念
在iOS9中,如果使用canoPenURL:方法,该方法所涉及到的URL scheme 必须在"Info.plist"中将它们列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes,键值内容是
白名单上限是50个:
iOS9中 openURL: 方法没有什么实质性的变化,仅仅多了一个确认动作
有个现成的项目Demo,但是没法运行,直接盗取截图
6、iPad适配Slide Over 和 Split View
目测作者的动态图就是Android那边的分屏操作
7、字体间隙变大导致UI显示异常
8、升级Xcode7后的问题
?到现在也不清楚当时是那里的问题,只是pull更新才解决的。
下面继续附上N截图,这些问题得我亲身体验一下
这个状态栏其实我试了以前的还是可以继续用啊。
9、搜索API
10、iOS国际化问题:当前设备语言字符串返回有变化。
11、支持从右到左的语言(RTL-Right To Left Language)
苹果人性化的一项更新,(什么是从右到左的语言?P.S. "言语的左至右从"。因为以前的中文是从右往左写的,现在更改过来了,但是还有很多语言是仍然是从右边往左阅读和书写的)。
现在所有的UIKit中的控件都支持对这种语言的显示与输入。
UIView定义了语法内容属性(semantic content attributes)来指定视图如何显示在一个自由向左的上下文中。
UIImage新增了方法imageFlippedForRightToLeftLayoutDirection,可以很方便的将图片做左右映射变换。
12、UITableView显示异常
13、APP扩展
iOS9提供几种新的App Extension(神马是App Extension?可以理解为小插件,是一种运行在我们App之外的一段程序。):
网络扩展:
使用Packet Tunnel Provider extension point来实现自定义VPN隧道协议客户端。
使用App Proxy Provider extension point来实现一个透明网络代理协议的客户端。
使用Filter Data Provider和Filter Control Provider extension points来实现动态的设备端网络内容过滤。
Safari扩展:
使用Shared Links extension point来让用户通过Safari的分享链接看到你的内容。
使用Content Blocking extension point提供一个屏蔽列表,让你的用户使用你的App浏览Web内容时屏蔽指定的内容。
Spotlight扩展:
使用indexing extension point对App内的数据进行索引。
使用Index Maintenance extension point实现在不重启App的情况下对App内的数据重新建立索引。
Audio Unit extension point允许App提供类似于GarageBand,Logic等App提供的乐器演奏,音频特效,声音合成功能。
14、Swift加强
15、一些系统框架的改动
AV Foundation Framework
AVKit Framework
CloudKit Framework
Foundation Framework
HealthKit Framework
Local Authentication Framework (本地授权)
MapKit Framework
PassKit Framework
Safari Services Framework
UIKit Framework
16、被弃用的APIs
Address Book 和 Address Book UI frameworks。取而代之的是 Contacts 和 Contacts UI frameworks 。
17、Watch Connectivity
WatchConnectivity.framework 提供iPhone和与之配对的iWatch之间进行双向的文件、数据传输。这套框架能够让配对的两个设备上同时运行的App进行即时通信,也可以进行后台通信。
网友评论