当前位置: 首页 > 科技观察

iOS8到iOS9变化笔记

时间:2023-03-17 17:21:24 科技观察

这里介绍一下我们日常开发从iOS8到iOS9所带来的一些变化,以及解决方法。信息收集语言:zh-Hans(iOS8)——>zh-Hans-CN(iOS9)所有进程列表不可用。AppTransportSecurity是iOS9和OSXElCapitan的一项新功能。AppTransportSecurity的目的是提高Apple操作系统的安全性以及在其上运行的任何应用程序的安全性。ATS是Apple对NSURL层做的封装。iOS9之后默认开启ATS,即网络传输需要HTTPS。iOS9之后如果想继续使用HTTP,有两种方法:在Info.plist中添加NSAppTransportSecurity类型的Dictionary,在NSAppTransportSecurity下添加NSAllowsArbitraryLoads,Boolean为YES。直接使用CFNetwork进行网络请求。ASIHTTPRequest是基于CFNetwotk做的封装。有需要的可以看ASI里面的源码。如果你想在某个时间段使用HTTPS,ASI对SSL/TSL有一点证书验证。问题是证书校验要自己打包。刚才说了,ATS是Apple对NSURL层做的封装,所以如果我们使用CFNetwork或者更底层的网络请求,是不受ATS限制的。删除了发现的DNS解析服务。iPhone升级到iOS8后,WiFi有时会出现问题,尤其是Mac升级到OSXYosemite后。有时电脑从休眠中醒来无法连接WiFi,有时突然掉线。关闭WiFi并重新连接。这是因为Apple到了OSXYosemite系统之后,将之前的mDNSResponder换成了discovereddDNS。mDNSResponder在iOS9和OSXYosemite10.4之后回归。mDNSResponder:Apple一直用来控制DNS和Bonjour服务的进程。discoveredd:Apple在OSXYosemite之后推出的新进程。AppThinningAppThinning是一项节省iOS设备存储空间的功能。让iOS设备在安装、更新、运行App等场景下只下载需要的资源,减少App占用的空间,从而节省设备的存储空间。AppThinning主要有三种机制:切片:开发者将App安装包上传到AppStore后,Apple服务会自动将安装包切割成不同的应用变体(Appvariants)。当用户下载安装包时,系统会根据下载的机型安装对应的单体应用变体。On-DemandResources:ORD(On-DemandResources)是指开发者为资源添加标签并上传后,系统会根据App的运行情况,动态下载并加载所需的资源,并在需要时自动删除这些资源存储空间不足。Bitcode:启用Bitcode编译后,开发者在上传App时只需要上传IntermediateRepresentation(中间件),而不需要上传最终的可执行二进制文件。在用户下载App之前,AppStore会自动编译中间件,生成设备需要的执行文件,供用户下载安装。其中,Bitcode的机制可以支持动态AppSlicing,对于苹果未来的硬件升级,该机制可以保证开发者兼容新设备,无需重新发布版本。Xcode7默认启动Bitcode。如果不想使用,可以手动关闭Bitcode:选择项目—>点击Target—>点击BuildSettings—>在搜索栏中搜索bitcode—>将EnableBitcode对应的Yes改为No。启用Bitcode编译机制需要注意以下几点:如果应用启用了Bitcode,那么与其集成的其他第三方库也必须是Bitcode编译包,才能真正进行Bitcode编译。启用Bitcode编译后,编译生成的.app体积会变大(中间代码,不是用户下载的包),.dSYM文件不能用来符号化crashlog(用户下载的包)用户被Apple服务重新编译,生成新的符号文件),使用dSYM收集Crash日志同学们要注意了。通过Archive方式上传AppStore包,在XcodeOrganizer工具中可以下载对应安装包的新符号文件。后台定位在iOS9之后,为了保护用户地理位置的隐私,苹果对App请求后台定位设置了权限。添加更多代码。如果不兼容iOS9,就无法在后台偷偷定位。如果没有后台定位权限,也可以后台定位,但是会出现蓝条。开启后台定位功能:locationManager.allowsBackgroundLocationUpdates=YES;locationManager是CLLocationManager的对象,用来管理整个location。重点:配置info.plist,添加一个Requiredbackgroundmodes,Array类型,然后将Requiredbackgroundmodes中Item0对应的Value设置为Appregistersforlocationupdates,解决了后台location出现蓝条的问题的iOS9。在UITestingXcode7中,Apple引入了一种在应用程序中进行测试的新方法——UITesting,UITesting允许我们找到要与之交互的UI元素,并检查属性和状态。UITesting已经完全集成到Xcode7测试报告中,可以和单元测试一起执行。类似于之前从Xcode5出来的XCTest。Xcode机器人为此提供支持,命令行支持在UI测试失败时立即通知。可以参考Github上的Demo。步骤:在DemoTests.m中创建一个以test开头的方法在setUp()中启动应用程序XCUIApplication().launch()创建一个以test开头的新方法并在其中获取应用程序letapp=XCUIApplication()让app=XCUIApplication(),app.buttons[“查看详细信息”].tap()?.buttons是当前界面所有按钮的集合,按钮的名字写在[]中,tap()是按钮执行对应的方法,可以是网络请求,界面跳转等。URLscheme在iOS9中,如果使用URLscheme,必须在“Info.plist”中将要对外调用的URLscheme加入白名单,否则无法使用。配置info.plist,添加一个LSApplicationQueriesSchemes,Array类型,然后在LSApplicationQueriesSchemes的Item中添加urlscheme,urlscheme为任意字符串,就是你需要使用的urlscheme,完成iOS9URLscheme白名单适配。Xcode7运行之前项目后出现大量警告,如:(null):warning:/var/folders/p4/z7zy68r92hd3p5ry5g2v3k_8rlwzzr/C/org.llvm.clang.dalmo/ModuleCache/1TXZDLI9N2EMV/Foundation-3DFYNEBRQSXST。pcm:没有这样的文件或目录。作为一个洁癖,反正我是受不了了。警告的一般原因与启用Bitcode并且.dSYM文件不能用于符号化这一事实有关。Xcode尝试创建一个dSYM文件,但您不需要它。SolutionBuildSettings-->BuildOptions-->DebugInformationFormatDebugDWARFwithdsYMFileunderDWARFRelease或之前默认的DWARFwithdsYMFile不变