iOS9中的新坑

iOS9程序员需要知道的

从iOS8过渡到iOS9出现了一些需要注意的问题下面就我知道或者搜集到的知识列出来以供参考

App Transport Security(ATS)

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

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

移除了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后苹果新出的一种进程。

App Thinning

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

App Thinning主要有三个机制:

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

  • 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不变

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义...
    Www刘阅读 2,958评论 0 5
  • 这里将介绍下我们日常开发一些从iOS8过度到iOS9给我们带来的一些变化,及解决方法。 原文链接 信息收集 lan...
    潘柏信阅读 1,452评论 1 11
  • 看着孩子们的试卷,有些心酸难过。孩子们平时都那么的乖,可是分数却是这样不尽如人意~分析一下:1.平时自己太懒,不够...
    糖果老师199058阅读 131评论 0 0
  • 在微博上看过一个话题,一个你爱的,一个爱你的,二选一,你选哪个?于是我问最好的闺蜜心软小姐,她嘴角噙着一抹笑,无奈...
    没有时光机的叮当猫阅读 528评论 5 7
  • 1、 如果你还能继续,努力奔跑,在我身后,我一定奋不顾身来到你的身边。 如果你还在寻找,踮脚张望,相同城市,我一定...
    消失的书店阅读 138评论 0 0