这里将介绍下咱们平常开发一些从iOS8过分到iOS9给咱们带来的一些变化,及解决方法。html
信息收集
language:zh-Hans(iOS8) ——> zh-Hans-CN(iOS9)
全部的进程列表都获取不到了ios
App Transport Security
iOS9和OS X El Capitan的一个新特性,App Transport Security 的目地是提升Apple 操做系统的安全性以及在此操做系统上运行的任何应用的安全性。ATS是苹果针对与 NSURL这一层作的封装,iOS9后ATS默认是开启的,即网络传输须要使用HTTPS。若是想在iOS9后继续使用HTTP的话,有两条路能够走:git
-
在Info.plist中添加
NSAppTransportSecurity
类型Dictionary,在NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
,Boolean 为 YES。github -
直接使用CFNetwork作网络请求,ASIHTTPRequest就是基于CFNetwotk作的封装,若是有需求的同窗能够看看 ASI里面的源码,若是某个时间段你又想要使用HTTPS的话,ASI对SSL/TSL的证书验证有点问题,证书验证还得本身封装一下才行。刚才我说 道,ATS是苹果针对与NSURL这一层作的封装,因此咱们使用CFNetwork或者更底层作网络请求的话是不受ATS限制的。api
移除了discoveryd DNS解析服务
iPhone升级到iOS8后WiFi有时候会有问题,特别是Mac升级到OS X Yosemite后,时而电脑休眠唤醒唬就连不上WiFi,有时候还忽然掉线,常常要手动去关闭WiFi在从新链接,这是由于苹果到了OS X Yosemite系统后,把以前的mDNSResponder换成了discoveryd DNS。iOS9和OS X Yosemite10.4后mDNSResponder又回来了。安全
mDNSResponder: 苹果之前一直使用控制DNS和Bonjour服务的一种进程。
discoveryd:OS X Yosemite后苹果新出的一种进程。bash
App Thinning
App Thinning是一个关于节省iOS设备存储空间的功能,它可让iOS设备在安装、更新及运行App等场景中仅下载所需的资源,减小App的占用空间,从而节省设备的存储空间。网络
App Thinning主要有三个机制:
-
Slicing: 开发者把App安装包上传到AppStore后,Apple服务会自动对安装包切割为不一样的应用变体(App variant), 当用户下载安装包时,系统会根据设备型号下载安装对应的单个应用变体。app
-
On-Demand Resources: ORD(随需资源)是指开发者对资源添加标签上传后,系统会根据App运行的状况,动态下载并加载所需资源,而在存储空间不足时,自动删除这类资源。工具
-
Bitcode:开启Bitcode编译后,可使得开发者上传App时只需上传Intermediate Representation(中间件),而非最终的可执行二进制文件。 在用户下载App以前,AppStore会自动编译中间件,产生设备所需的执行文件供用户下载安装。
其中,Bitcode的机制能够支持动态的进行App Slicing,而对于Apple将来进行硬件升级的措施,此机制能够保证在开发者不从新发布版本的状况下而兼容新的设备。Xcode7默认是开始了Bitcode,若是不想使用能够手动关闭Bitcode:
选择项目——>点击Target——>点击Build Setttings——>搜索栏里搜bitcode——>把Enable Bitcode对应的Yes改为No。
启用Bitcode编译机制,须要注意如下几点:
-
若是应用开启Bitcode,那么其集成的其余第三方库也须要是Bitcode编译的包才能真正进行Bitcode编译
-
开启Bitcode编译后,编译产生的.app体积会变大(中间代码,不是用户下载的包),且.dSYM文件不能用来崩溃日志的符号化(用户下载的包是Apple服务从新编译产生的,有产生新的符号文件),使用dSYM来收集Crash日志的同窗得注意了。
-
经过Archive方式上传AppStore的包,能够在Xcode的Organizer工具中下载对应安装包的新的符号文件
后台定位
iOS9后苹果为了对保障用户的地理位置的隐私对App请求后台定位有了权限设置,则须要多加一些代码。若是不适配iOS9,就不能偷偷在后台定位,若是没有后台定位的权限也是能够在后台定位的,只是会出现蓝条。
开启后台定位功能:locationManager.allowsBackgroundLocationUpdates = YES;
locationManager是CLLocationManager的对象,用来管理整个定位的。
重点:
配置info.plist,添加一个Required background modes,Array类型的,而后在Required background modes里面Item 0对应的Value设置为App registers for location updates,这样就解决了iOS9后台定位出现蓝条的问题了。
UI Testing
Xcode7中苹果引入了一种新的方式在应用中进行测试——UI Testting,UI Testting容许咱们找到UI元素与之交互,还能检查属性和状态。UI Testting已经彻底集成进了Xcode7的测试报告,能够和单元测试一块儿执行。使用起来跟以前Xcode5出来的XCTest差很少,Xcode bots提供对此的支持,并且command line支持当UI测试失败时会当即发出通知。
能够参考Github上的Demo,步骤:
-
在DemoTests.m里建立一个test开头的方法
-
在setUp()里启动应用
XCUIApplication().launch()
-
新建一个方法test开头的,在里面获取应用
let app = XCUIApplication()
-
的到
let app = XCUIApplication()
,app.buttons[“View Detail”].tap()?
。buttons是当前这个界面的全部按钮的集合,[]里面写按钮的名字,tap()就是执行这个按钮所对应的方法,能够是网络请求、界面跳转等等。
URL scheme
在iOS9中,若是使用URL scheme必须在"Info.plist"中将你要在外部调用的URL scheme列为白名单,不然不能使用。
配置info.plist,添加一个LSApplicationQueriesSchemes
,Array类型的,而后在LSApplicationQueriesSchemes
的Item里面添加urlscheme就好了,urlscheme是任意一个字符串,就是你本身须要使用的urlscheme,iOS9 URL scheme白名单适配就完成了。
出现大量的警告
Xcode7后运行之前的项目后出现大量的警告如:
(null): warning: /var/folders/p4/z7zy68r92hd3p5ry5g2v3k_8rlwzzr/C/org.llvm.clang.dalmo/ModuleCache/1TXZDLI9N2EMV/Foundation-3DFYNEBRQSXST.pcm: No such file or directory。
做为一个有洁癖的我反正是不能忍,出现警告的大体缘由跟我上面提到的开启Bitcode,.dSYM文件不能用来符号化有关,Xcode试图去建立dSYM文件,可是你又不须要。
解决方法
-
Build Settings ——>Build Options——>Debug Information Format
-
Debug下的DWARF with dsYM File改为DWARF
-
Release下的仍是以前默认的DWARF with dsYM File不变
参考资料: