考えられることとは対照的に (一例: WORKING WITH APPLE'S APP TRANSPORT SECURITY )NSAllowsArbitraryLoads
は、ブラックリスト/ホワイトリスト モードを切り替えるフラグとして機能しません。少なくとも、Charles ではうまく機能しません。
ブラックリスト アプローチ (IOS 9.0 では機能しません - Charles はステージング ホストとの間のトラフィックを認識しません):
例 B: いくつかの例外を除いて、すべての ATS
動作しないことがわかっている一部を除いて、すべてのドメインが ATS で動作すると予想される場合は、ATS を使用しない場合に例外を指定し、他のすべてのトラフィックをオプトインしたままにすることができます。このシナリオでは、 NSExceptionDomains を使用して、ATS のデフォルト設定をオーバーライドするドメインを指定します。
ホワイトリスト アプローチ (機能しますが、実際にはこれを行う良い方法ではありません):NSAllowsArbitraryLoads
が に設定されている場合YES
、アプリケーション トランスポート セキュリティ機能は、 にリストされているドメインを除くすべてのドメインで無効NSExceptionDomains
になります。
例 C: いくつかの例外を除いて、ATS が無効になっています
逆に、ATS をサポートできることが明確にわかっているドメインでのみ ATS を動作させたい場合もあります。たとえば、Twitter クライアントを開発する場合、ATS をサポートできない可能性のあるロードしたい URL が無数にありますが、ログイン呼び出しや ATS を使用するための Twitter へのその他の要求などは必要です。この場合、ATS をデフォルトとして無効にしてから、ATS を使用したい URL を指定できます。
ここで説明されている別のアプローチ: This One Weird Trick Makes Developing iOS Apps Against a Local Server Way Easierでは、PlistBuddy を使用してアプリケーションの plist ファイルにその場でパッチを適用する「Run Script Build Phase」を追加することを提案しています。開発者がローカル マシン上のサーバーに対して作業するときに ATS を使用しないようにアプリを作成する例を次に示します (もちろん、ステージング ホストでもかまいません)。
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSIncludesSubdomains bool true" $INFO_PLIST
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSThirdPartyExceptionAllowsInsecureHTTPLoads bool true" $INFO_PLIST
IMO、Plist にパッチを適用することは、上記のホワイトリスト アプローチを使用するよりも、ステージング ホストの ATS を条件付きで無効にするためのより良い方法であるため、PlistBuddy を使用します。