Edited at

iOS9でThe resource could not be loaded because the App Transport Security policy requires the use of a secure connection.のエラーが出る場合のメモ

More than 3 years have passed since last update.


問題

iOS9にアップデートしたら、cordovaで開発中のアプリで下記のエラーが発生した。

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.


原因

ATS(App Transport Security)に引っかかりHTTPへのアクセスができなかったのが原因と思われます。


ATS(App Transport Security)とは

◎参考


iOS9 : App Transport Securityの確認方法

ATS(App Transport Security) とは、iOS9とOS X 10.11から導入されるネットワークセキュリティ対策です。

基本的には、アプリとサーバーの間のネットワーク接続をSSLにすることを推奨するというもので、デフォルトの設定では、SSLではないネットワーク接続が失敗となります。 (なお、ATSが適用されるのは、iOS9用にビルドした場合のみであり、iOS8以前用にビルドされたアプリをiOS9で実行してもATSは適用されません。)



解決策

1番簡単な解決策はATSを無効にすることです。

info.plistファイルを変更して対応することができます。

私はcordovaでビルドしたアプリケーションの為、下記にありました。

/Users/me/app/platforms/ios/hogehoge/hogehoge-Info.plist

info.plistに下記を追加します。

これで全てのサーバーのATSを無効にできます。

    <key>NSAppTransportSecurity</key>

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

全てのサーバーのATSを無効にするのは非推奨です。

そこで、特定のドメインからのアクセスしかない場合は、

下記のように無効にするドメインを指定します。


<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>hogehoge.com</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>fugafuga.jp</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>

この設定を追加することで、 指定したドメインからのアクセスはhttpでもエラーになりません。