ios9 新變化

這裏將介紹下咱們平常開發一些從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

  1. 在Info.plist中添加 NSAppTransportSecurity類型Dictionary,在NSAppTransportSecurity下添加NSAllowsArbitraryLoads,Boolean 爲 YES。github

  2. 直接使用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主要有三個機制:

  1. Slicing: 開發者把App安裝包上傳到AppStore後,Apple服務會自動對安裝包切割爲不一樣的應用變體(App variant), 當用戶下載安裝包時,系統會根據設備型號下載安裝對應的單個應用變體。app

  2. On-Demand Resources: ORD(隨需資源)是指開發者對資源添加標籤上傳後,系統會根據App運行的狀況,動態下載並加載所需資源,而在存儲空間不足時,自動刪除這類資源。工具

  3. Bitcode:開啓Bitcode編譯後,可使得開發者上傳App時只需上傳Intermediate Representation(中間件),而非最終的可執行二進制文件。 在用戶下載App以前,AppStore會自動編譯中間件,產生設備所需的執行文件供用戶下載安裝。

其中,Bitcode的機制能夠支持動態的進行App Slicing,而對於Apple將來進行硬件升級的措施,此機制能夠保證在開發者不從新發布版本的狀況下而兼容新的設備。Xcode7默認是開始了Bitcode,若是不想使用能夠手動關閉Bitcode:

選擇項目——>點擊Target——>點擊Build Setttings——>搜索欄裏搜bitcode——>把Enable Bitcode對應的Yes改爲No。

啓用Bitcode編譯機制,須要注意如下幾點:

  1. 若是應用開啓Bitcode,那麼其集成的其餘第三方庫也須要是Bitcode編譯的包才能真正進行Bitcode編譯

  2. 開啓Bitcode編譯後,編譯產生的.app體積會變大(中間代碼,不是用戶下載的包),且.dSYM文件不能用來崩潰日誌的符號化(用戶下載的包是Apple服務從新編譯產生的,有產生新的符號文件),使用dSYM來收集Crash日誌的同窗得注意了。

  3. 經過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,步驟:

  1. 在DemoTests.m裏建立一個test開頭的方法

  2. 在setUp()裏啓動應用 XCUIApplication().launch()

  3. 新建一個方法test開頭的,在裏面獲取應用let app = XCUIApplication()

  4. 的到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文件,可是你又不須要。

解決方法

  1. Build Settings ——>Build Options——>Debug Information Format

  2. Debug下的DWARF with dsYM File改爲DWARF

  3. Release下的仍是以前默認的DWARF with dsYM File不變

參考資料:

相關文章
相關標籤/搜索