そこで、昨晩リリースされた iOS の新しいベータ SDK には、開発者が http ではなく https を使用することを推奨する「App Transport Security」が含まれています。原則的には、これは素晴らしいアイデアであり、私はすでにステージング/本番環境で https を使用しています。ただし、iOS アプリがラップトップで実行している Web サービスに接続しているときに、ローカル開発環境に https を設定していません。
今朝少しいじってみたところ、URL 読み込みシステムは、http URL を渡しても、代わりに https を使用することに決めるようです。この動作を無効にする方法を知っている人はいますか (特定の URL に対してだけでも)?
ベストアンサー1
AppleのInfo.plist リファレンス詳細については、@gnasher729 さんに感謝いたします。
Info.plist で特定のドメインの例外を追加できます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
除外された各ドメインのすべてのキーはオプションです。講演者はどのキーについても詳しく説明しませんでしたが、すべてかなり明白だと思います。
(ソース:WWDC 2015 セッション 703、「プライバシーとアプリ」、30:18)
アプリに正当な理由がある場合は、単一のキーですべてのアプリ トランスポート セキュリティ制限を無視することもできます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
アプリに正当な理由がない場合、拒否される可能性があります。
NSAllowsArbitraryLoads を true に設定すると動作しますが、Apple は、特別な理由なくこのフラグを使用するアプリを拒否する意向を明確にしています。私が考えられる NSAllowsArbitraryLoads を使用する主な理由は、ユーザーが作成したコンテンツ (リンク共有、カスタム Web ブラウザーなど) です。この場合、Apple は、管理している URL に対して ATS を強制する例外を含めることを期待しています。
TLS 1.2 経由で提供されていない特定の URL にアクセスする必要がある場合は、NSAllowsArbitraryLoads を yes に設定せずに、それらのドメインに対して特定の例外を記述する必要があります。詳細については、NSURLSesssion WWDC セッションを参照してください。
NSAllowsArbitraryLoads ソリューションを共有する際には注意してください。これは Apple が推奨する修正ではありません。
—チャーウッド(@marco-tolman に感謝)