iOS9程序員需要知道的
從iOS8過渡到iOS9出現(xiàn)了一些需要注意的問題下面就我知道或者搜集到的知識(shí)列出來以供參考
App Transport Security(ATS)
iOS9和OS X El Capitan的一個(gè)新特性,App Transport Security 的目地是提高Apple 操作系統(tǒng)的安全性以及在此操作系統(tǒng)上運(yùn)行的任何應(yīng)用的安全性。ATS是蘋果針對(duì)與 NSURL這一層做的封裝,iOS9后ATS默認(rèn)是開啟的,即網(wǎng)絡(luò)傳輸需要使用HTTPS洽糟。如果想在iOS9后繼續(xù)使用HTTP的話,有兩條路可以走:
- 在Info.plist中添加NSAppTransportSecurity類型Dictionary,在NSAppTransportSecurity下添加NSAllowsArbitraryLoads种蘸,Boolean為YES。
- 直接使用CFNetwork做網(wǎng)絡(luò)請(qǐng)求竞膳,ASIHTTPRequest就是基于CFNetwotk做的封裝航瞭,如果有需求的同學(xué)可以看看ASI里面的源碼,如果某個(gè)時(shí)間段你又想要使用HTTPS的話坦辟,ASI對(duì)SSL/TSL的證書驗(yàn)證有點(diǎn)問題刊侯,證書驗(yàn)證還得自己封裝一下才行。剛才我說道锉走,ATS是蘋果針對(duì)與NSURL這一層做的封裝滨彻,所以我們使用CFNetwork或者更底層做網(wǎng)絡(luò)請(qǐng)求的話是不受ATS限制的藕届。
移除了discoveryd DNS解析服務(wù)
iPhone升級(jí)到iOS8后WiFi有時(shí)候會(huì)有問題,特別是Mac升級(jí)到OS X Yosemite后亭饵,時(shí)而電腦休眠喚醒唬就連不上WiFi休偶,有時(shí)候還突然掉線,經(jīng)常要手動(dòng)去關(guān)閉WiFi在重新連接辜羊,這是因?yàn)樘O果到了OS X Yosemite系統(tǒng)后椅贱,把之前的mDNSResponder換成了discoveryd DNS。iOS9和OS X Yosemite10.4后mDNSResponder又回來了只冻。
mDNSResponder: 蘋果以前一直使用控制DNS和Bonjour服務(wù)的一種進(jìn)程庇麦。
discoveryd:OS X Yosemite后蘋果新出的一種進(jìn)程。
App Thinning
App Thinning是一個(gè)關(guān)于節(jié)省iOS設(shè)備存儲(chǔ)空間的功能喜德,它可以讓iOS設(shè)備在安裝山橄、更新及運(yùn)行App等場(chǎng)景中僅下載所需的資源,減少App的占用空間舍悯,從而節(jié)省設(shè)備的存儲(chǔ)空間航棱。
App Thinning主要有三個(gè)機(jī)制:
Slicing: 開發(fā)者把App安裝包上傳到AppStore后,Apple服務(wù)會(huì)自動(dòng)對(duì)安裝包切割為不同的應(yīng)用變體(App variant)萌衬, 當(dāng)用戶下載安裝包時(shí)饮醇,系統(tǒng)會(huì)根據(jù)設(shè)備型號(hào)下載安裝對(duì)應(yīng)的單個(gè)應(yīng)用變體。
On-Demand Resources: ORD(隨需資源)是指開發(fā)者對(duì)資源添加標(biāo)簽上傳后秕豫,系統(tǒng)會(huì)根據(jù)App運(yùn)行的情況朴艰,動(dòng)態(tài)下載并加載所需資源,而在存儲(chǔ)空間不足時(shí)混移,自動(dòng)刪除這類資源祠墅。
Bitcode:開啟Bitcode編譯后,可以使得開發(fā)者上傳App時(shí)只需上傳Intermediate Representation(中間件)歌径,而非最終的可執(zhí)行二進(jìn)制文件毁嗦。 在用戶下載App之前,AppStore會(huì)自動(dòng)編譯中間件回铛,產(chǎn)生設(shè)備所需的執(zhí)行文件供用戶下載安裝狗准。
其中,Bitcode
的機(jī)制可以支持動(dòng)態(tài)的進(jìn)行App Slicing茵肃,而對(duì)于Apple未來進(jìn)行硬件升級(jí)的措施腔长,此機(jī)制可以保證在開發(fā)者不重新發(fā)布版本的情況下而兼容新的設(shè)備。Xcode7默認(rèn)是開始了Bitcode免姿,如果不想使用可以手動(dòng)關(guān)閉Bitcode:
選擇項(xiàng)目——>點(diǎn)擊Target——>點(diǎn)擊Build Setttings——>搜索欄里搜bitcode——>把Enable Bitcode對(duì)應(yīng)的Yes改成No饼酿。
啟用Bitcode編譯機(jī)制榕酒,需要注意以下幾點(diǎn):
如果應(yīng)用開啟Bitcode胚膊,那么其集成的其他第三方庫也需要是Bitcode編譯的包才能真正進(jìn)行Bitcode編譯
開啟Bitcode編譯后故俐,編譯產(chǎn)生的.app體積會(huì)變大(中間代碼,不是用戶下載的包)紊婉,且.dSYM文件不能用來崩潰日志的符號(hào)化(用戶下載的包是Apple服務(wù)重新編譯產(chǎn)生的药版,有產(chǎn)生新的符號(hào)文件),使用dSYM來收集Crash日志的同學(xué)得注意了喻犁。
通過Archive方式上傳AppStore的包槽片,可以在Xcode的Organizer工具中下載對(duì)應(yīng)安裝包的新的符號(hào)文件
后臺(tái)定位
iOS9后蘋果為了對(duì)保障用戶的地理位置的隱私對(duì)App請(qǐng)求后臺(tái)定位有了權(quán)限設(shè)置,則需要多加一些代碼肢础。如果不適配iOS9还栓,就不能偷偷在后臺(tái)定位,如果沒有后臺(tái)定位的權(quán)限也是可以在后臺(tái)定位的传轰,只是會(huì)出現(xiàn)藍(lán)條剩盒。
開啟后臺(tái)定位功能:locationManager.allowsBackgroundLocationUpdates = YES;
locationManager是CLLocationManager的對(duì)象,用來管理整個(gè)定位的慨蛙。
重點(diǎn):配置info.plist辽聊,添加一個(gè)Required background modes,Array類型的期贫,然后在Required background modes里面Item 0對(duì)應(yīng)的Value設(shè)置為App registers for location updates跟匆,這樣就解決了iOS9后臺(tái)定位出現(xiàn)藍(lán)條的問題了。
UI Testing
Xcode7中蘋果引入了一種新的方式在應(yīng)用中進(jìn)行測(cè)試——UI Testting通砍,UI Testting允許我們找到UI元素與之交互玛臂,還能檢查屬性和狀態(tài)。UI Testting已經(jīng)完全集成進(jìn)了Xcode7的測(cè)試報(bào)告封孙,可以和單元測(cè)試一起執(zhí)行垢揩。使用起來跟之前Xcode5出來的XCTest差不多,Xcode bots提供對(duì)此的支持敛瓷,而且command line支持當(dāng)UI測(cè)試失敗時(shí)會(huì)立即發(fā)出通知叁巨。
可以參考Github上的Demo,步驟:
在DemoTests.m里創(chuàng)建一個(gè)test開頭的方法
在setUp()里啟動(dòng)應(yīng)用XCUIApplication().launch()
新建一個(gè)方法test開頭的呐籽,在里面獲取應(yīng)用let app = XCUIApplication()
的到let app = XCUIApplication()锋勺,app.buttons[“View Detail”].tap()?。buttons是當(dāng)前這個(gè)界面的所有按鈕的集合狡蝶,[]里面寫按鈕的名字庶橱,tap()就是執(zhí)行這個(gè)按鈕所對(duì)應(yīng)的方法,可以是網(wǎng)絡(luò)請(qǐng)求贪惹、界面跳轉(zhuǎn)等等苏章。
URL scheme
在iOS9中,如果使用URL scheme必須在”Info.plist”中將你要在外部調(diào)用的URL scheme列為白名單,否則不能使用枫绅。
配置info.plist泉孩,添加一個(gè)LSApplicationQueriesSchemes,Array類型的并淋,然后在LSApplicationQueriesSchemes的Item里面添加urlscheme就行了寓搬,urlscheme是任意一個(gè)字符串,就是你自己需要使用的urlscheme县耽,iOS9 URL scheme白名單適配就完成了句喷。
出現(xiàn)大量的警告
Xcode7后運(yùn)行以前的項(xiàng)目后出現(xiàn)大量的警告如:(null): warning: /var/folders/p4/z7zy68r92hd3p5ry5g2v3k_8rlwzzr/C/org.llvm.clang.dalmo/ModuleCache/1TXZDLI9N2EMV/Foundation-3DFYNEBRQSXST.pcm: No such file or directory。
作為一個(gè)有潔癖的我反正是不能忍兔毙,出現(xiàn)警告的大致原因跟我上面提到的開啟Bitcode唾琼,.dSYM文件不能用來符號(hào)化有關(guān),Xcode試圖去創(chuàng)建dSYM文件澎剥,但是你又不需要父叙。
解決方法:
Build Settings ——>Build Options——>Debug Information Format
Debug下的DWARF with dsYM File改成DWARF
Release下的還是之前默認(rèn)的DWARF with dsYM File不變