Xcode7 iOS9 大坑知多少

1.Bitcode

bitcode的理解應該是把程序編譯成的一種過渡代碼,然後蘋果再把這個過渡代碼編譯成可執行的程序。bitcode也允許蘋果在後期重新優化我們程序的二進制文件,有類似於App瘦身的思想。用了xcode7的編譯器編譯之前沒問題的項目可能會出現下列報錯。

  1. XXXX’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64 

問題的原因是:某些第三方庫還不支持bitcode。要不然是等待庫的開發者升級了此項功能我們更新庫,要不就是把這個bitcode禁用。禁用的方法就是找到如下配置,選爲NO.(iOS中bitcode是默認YES,watchOS中bitcodes是不讓改的必須YES。)

wKiom1YbLMWDRlhIAALqlfY91cg022.jpg

2.URL scheme

URL scheme一般使用的場景是應用程序有分享或跳其他平臺授權的功能,分享或授權後再跳回來。在iOS8並沒有做過多限制,但是iOS9需要將你要在外部調用的URL scheme列爲白名單,纔可以完成跳轉。如果iOS9沒做適配 會報如下錯誤

  1. canOpenURL: failed for URL : "mqzone://qqapp" - error: "This app is not allowed to query for scheme mqzone" 

具體的解決方案也是要在info.plist中設置 LSApplicationQueriesSchemes 類型爲數組,下面添加所有你用到的scheme

3.didFinishLaunchingWithOptions

如果運行的時候報下列錯誤,那就是你的didFinishLaunchingWithOptions寫的不對了

  1. ***** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294** 

iOS9不允許在didFinishLaunchingWithOptions結束了之後還沒有設置window的rootViewController。 也許是xcode7的編譯器本身就不支持。

解決的方法當然就是先初始化個值,之後再賦值替換掉
 

  1. UIWindow *window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds]; 
  2. window.rootViewController = [[UIViewController alloc]init]; 

4.NSAppTransportSecurity

iOS9讓所有的HTTP默認使用了HTTPS,原來的HTTP協議傳輸都改成TLS1.2協議進行傳輸。直接造成的情況就是App發請求的時候彈出網絡無法連接。解決辦法就是在項目的info.plist 文件里加上如下節點:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章