iOS9適配問題

歡迎加QQ群討論:157672725

最近升級到XCode7之后發(fā)現(xiàn)工程需要針對iOS9做一些適配,如下幾點是我項目中遇到的適配問題,僅供大家參考如有問題歡迎加Q群157672725討論:

  • 網(wǎng)絡適配ATS問題
  • Bitcode導致的編譯問題
  • 狀態(tài)欄樣式問題
  • 白名單問題

網(wǎng)絡適配ATS問題

App Transport Security(ATS)是Apple為提高系統(tǒng)及應用安全性而在iOS 9和OS X EI Capitan中引入的新特性。一旦開啟ATS后,應用所有的網(wǎng)絡請求將會自動轉換為HTPPS傳輸(HTTP形式的傳輸將會失?。?。

解決辦法:
1.在Info.plist中添加NSAppTransportSecurity,并添加item設置NSAllowsArbitraryLoads為YES,表示支持所有HTTP請求。

這里寫圖片描述

源碼形式:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

2.添加白名單

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

3.改變服務器(改用HTTPS),需要注意一下幾點
3.1Transport Layer Security協(xié)議版本要求TLS1.2以上
3.2服務的Ciphers配置要求支持Forward Secrecy
3.3證書簽名算法符合ATS要求等

目前我選擇第1種方法
理由:服務器和第三方的框架使用的API大部分是HTTP形式的,服務器修改成HTTPS需要申請證書之類的,相對比較耗時,所以可以先考慮使用第一種做法。


Bitcode導致的編譯問題

開啟Bitcode編譯后,可以使得開發(fā)者上傳App時只需上傳Intermediate Representation(中間件),而非最終的可執(zhí)行二進制文件。在用戶下載App之前,AppStore會自動編譯中間件,產生設備所需的執(zhí)行文件供用戶下載安裝。
Xcode 7 會開啟 Bitcode,如果項目中第三方庫不包含bitcode,將會導致編譯失敗。


解決辦法:
1.更新第三方庫使包含 Bitcode

2.關閉Bitcode
在Build Settings 中搜索bitcode 【記得選中ALL】將ENABLE_BITCODE 設置為NO

這里寫圖片描述

目前我選擇了第2種方法
理由:代碼中的第三方庫中的.a文件不是bitcode的會導致編譯出錯,故目前選擇第2種,等待第三方庫的更新。


狀態(tài)欄樣式問題

如果你使用[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];的形式來設置狀態(tài)欄樣式,則運行的時候會出現(xiàn)以下警告。

<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

原因:在info.plist里面設置了View controller-based status bar appearance為NO,默認為YES,該種方式兼容iOS6、iOS7、iOS8但是到了iOS9會報警告。

解決辦法:
1.將View controller-based status bar appearance設置為YES
2.去除以下方式改變狀態(tài)欄

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

3.使用新的改變狀態(tài)欄方法
在自定義控制器里面添加如下方法:

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

4.clean 或者刪除應用程序重新運行,驗證結果。


白名單問題

運行程序的時候出現(xiàn)類似以下的警告,表示你沒有添加白名單
error: "This app is not allowed to query for scheme mqqopensdkapiV2"

解決辦法:這里我推薦友盟的教程http://dev.umeng.com/social/ios/ios9

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 很可能你的應用是與一個支持HTTPS傳輸數(shù)據(jù)的服務器交互,但是并沒有使用TLS 1.2或更高。在這種情況下,你定義...
    Www劉閱讀 3,271評論 0 5
  • 今天遇到xcode7.0正式版打企業(yè)包后,在5s ios9上閃退。其他機型和系統(tǒng)正常。 是bitcode引起的 h...
    jdong閱讀 299評論 0 1
  • 你以為愛情就是你對他好到無微不至,把心肝肺全部都掏出來獻給他。 其實有時候并不是。 喜歡是一個人的事情,但愛卻是兩...
    橙涉閱讀 500評論 4 1
  • 不摔那么一跤, 就不知道有誰愿意停下來等你。 不有求于人, 就不會知道誰會在關鍵時刻關心你。 有段時間你突然和一些...
    初歸a閱讀 362評論 2 1
  • 01 今天是和趙先生在一起的第四年,一晃眼竟已經(jīng)要邁入第五年了,我和他都很難相信兩個人居然可以走到現(xiàn)在。 想起剛認...
    長安吃貨閱讀 315評論 0 0

友情鏈接更多精彩內容