下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

iOS 8到iOS 9 之间的巨大变化

作者:课课家教育     来源: http://www.kokojia.com点击数:944发布时间: 2016-01-29 15:15:07

标签: iosapp移动开发

  这里将介绍下我们日常开发一些从iOS8过度到iOS9给我们带来的一些变化,并让课课家解决方法。

  信息收集

  language:zh-Hans(iOS8)——>zh-Hans-CN(iOS9)

  所有的进程列表都获取不到了

  APPTransportSecurity

  iOS9和OSXElCapitan的一个新特性,AppTransportSecurity的目地是提高Apple操作系统的安全性以及在此操作系统上运行的任何应用的安全性。ATS是苹果针对与NSURL这一层做的封装,iOS9后ATS默认是开启的,即网络传输需要使用HTTPS。如果想在iOS9后继续使用HTTP的话,有两条路可以走:

  在Info.plist中添加NSAppTransportSecurity类型Dictionary,在NSAppTransportSecurity下添加NSAllowsArbitraryLoads,Boolean为YES。

iOS8到iOS 9 之间的巨大变化_ios_app_移动开发

  直接使用CFNetwork做网络请求,ASIHTTPRequest就是基于CFNetwotk做的封装,如果有需求的同学可以看看ASI里面的源码,如果某个时间段你又想要使用HTTPS的话,ASI对SSL/TSL的证书验证有点问题,证书验证还得自己封装一下才行。刚才我说道,ATS是苹果针对与NSURL这一层做的封装,所以我们使用CFNetwork或者更底层做网络请求的话是不受ATS限制的。

  移除了discoverydDNS解析服务

  iPhone升级到iOS8后WiFi有时候会有问题,特别是Mac升级到OSXYosemite后,时而电脑休眠唤醒唬就连不上WiFi,有时候还突然掉线,经常要手动去关闭WiFi在重新连接,这是因为苹果到了OSXYosemite系统后,把之前的mDNSResponder换成了discoverydDNS。iOS9和OSXYosemite10.4后mDNSResponder又回来了。

  mDNSResponder:苹果以前一直使用控制DNS和Bonjour服务的一种进程。

  discoveryd:OSXYosemite后苹果新出的一种进程。

  AppThinning

  AppThinning是一个关于节省iOS设备存储空间的功能,它可以让iOS设备在安装、更新及运行App等场景中仅下载所需的资源,减少App的占用空间,从而节省设备的存储空间。

  AppThinning主要有三个机制:

  Slicing:开发者把App安装包上传到AppStore后,Apple服务会自动对安装包切割为不同的应用变体(Appvariant),当用户下载安装包时,系统会根据设备型号下载安装对应的单个应用变体。

  On-DemandResources:ORD(随需资源)是指开发者对资源添加标签上传后,系统会根据App运行的情况,动态下载并加载所需资源,而在存储空间不足时,自动删除这类资源。

  Bitcode:开启Bitcode编译后,可以使得开发者上传App时只需上传IntermediateRepresentation(中间件),而非最终的可执行二进制文件。在用户下载App之前,AppStore会自动编译中间件,产生设备所需的执行文件供用户下载安装。

  其中,Bitcode的机制可以支持动态的进行AppSlicing,而对于Apple未来进行硬件升级的措施,此机制可以保证在开发者不重新发布版本的情况下而兼容新的设备。Xcode7默认是开始了Bitcode,如果不想使用可以手动关闭Bitcode:

  选择项目——>点击Target——>点击BuildSetttings——>搜索栏里搜bitcode——>把EnableBitcode对应的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,添加一个Requiredbackgroundmodes,Array类型的,然后在Requiredbackgroundmodes里面Item0对应的Value设置为Appregistersforlocationupdates,这样就解决了iOS9后台定位出现蓝条的问题了。

  UITesting

  Xcode7中苹果引入了一种新的方式在应用中进行测试——UITestting,UITestting允许我们找到UI元素与之交互,还能检查属性和状态。UITestting已经完全集成进了Xcode7的测试报告,可以和单元测试一起执行。使用起来跟之前Xcode5出来的XCTest差不多,Xcodebots提供对此的支持,而且commandline支持当UI测试失败时会立即发出通知。

  可以参考Github上的Demo,步骤:

  在DemoTests.m里创建一个test开头的方法

  在setUp()里启动应用XCUIApplication().launch()

  新建一个方法test开头的,在里面获取应用letapp=XCUIApplication()

  的到letapp=XCUIApplication(),app.buttons[“ViewDetail”].tap()?。buttons是当前这个界面的所有按钮的集合,[]里面写按钮的名字,tap()就是执行这个按钮所对应的方法,可以是网络请求、界面跳转等等。

  URLscheme

  在iOS9中,如果使用URLscheme必须在"Info.plist"中将你要在外部调用的URLscheme列为白名单,否则不能使用。

  配置info.plist,添加一个LSApplicationQueriesSchemes,Array类型的,然后在LSApplicationQueriesSchemes的Item里面添加urlscheme就行了,urlscheme是任意一个字符串,就是你自己需要使用的urlscheme,iOS9URLscheme白名单适配就完成了。

  出现大量的警告

  Xcode7后运行以前的项目后出现大量的警告如:

  作为一个有洁癖的我反正是不能忍,出现警告的大致原因跟我上面提到的开启Bitcode,.dSYM文件不能用来符号化有关,Xcode试图去创建dSYM文件,但是你又不需要。

赞(15)
踩(4)
分享到:
下一篇:Swift模式匹配
华为认证网络工程师 HCIE直播课视频教程