IOS 9では、特定のホストがホワイトリストに登録されていない限り、Appleはアプリの安全でないHTTP接続をブロックしています。
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
明白な理由でWebViewがこれらのルールから免除されていますか、それとも、特定のページからのすべてのリンクを含む、ブラウザーが開くホストをホワイトリストに登録することを期待していますか?
これが私たちの責任なのか、それが免除なのかはわかりませんでした。
SFSafariViewController NSAppTransportSecurityキーなしでHTTPを表示できます。
IWebViewおよびWKWebView HTTPページを表示するには、上記のNSAppTransportSecurityキーが必要です。
Appleガイダンスに従って、アプリの.plistに以下を挿入しました。
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections - with and without SSL (DANGEROUS)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
そして、(HTTPSサーバーから)webViewをロードしようとすると、次のエラーが表示され、ロードされません。
NSURLSession/NSURLConnection HTTPロードが失敗しました(kCFStreamErrorDomainSSL、-9813)
したがって、除外されないだけでなく、.plistに正しい追加を行っても機能しないように見えます。
この質問はもともとiOS 9に関するものでした。ただし、Appleの documentation によると:
IOS 10.0以降では、次のサブキーがサポートされています。
- NSAllowsArbitraryLoadsInWebContent
- ...
NSAllowsArbitraryLoadsInWebContentを使用すると、WebViewがロードする可能性のある各ページをホワイトリストに登録する必要がなくなります。
NSAllowsArbitraryLoadsを保持して、iOS 9との後方互換性を維持し、Xcode 8プロジェクトInfo.plistの新しい設定を有効にします:
アプリ(たとえば、サードパーティのWebブラウザー)が任意のコンテンツをロードする必要がある場合、AppleはATSを完全に無効にする方法を提供しますが、この機能を控えめに使用するのが賢明だと思います:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>