2016年5月25日 星期三

App Transport Security

開發環境更新至iOS 9之後,原先正常運作的App資料跑不出來了,這個有一搭沒一搭始終無法投注太多心力的App...,一發生狀況,最為難的情況就是不常維護整個環境生疏了, 光是找到這個錯誤訊息就花費不少時間...

 kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." 

一查詢原來iOS 9針對資料傳輸新增了控管機制 App Transport Security (ATS):

 App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one. If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file. 
 資料來源:What's New in iOS (9.0)


怎麼解決呢?


熟悉架構的人可以直接找到專案的info.plist,加入以下設定關閉ATS
<key>NSAppTransportSecurity</key>   
          <dict>    
          NSAllowsArbitraryLoads </key><true/>  
          </dict> 
或是切換至專案屬性設定\Info 於Custom iOS Target Properties分類項下:
 1、找到"App Transport Security Settings" Key,沒找到直接新增 (舊專案)
 2、找到"App Transport Security Settings"的子項目"Allow Arbitrary Loads",還是一樣沒找到就直接新增,並將值設定為YES。


在stackoverflow有篇相關的討論:
The resource could not be loaded because the App Transport Security policy requires the use of a secure connection

沒有留言:

張貼留言