5

質問はそれをすべて言います。

NSAllowsArbitraryLoadsまとめて使用できることは承知していますがNSExceptionDomains、このブラックリストのアプローチに少し混乱しています。リストされている特定の本番ホストを除くすべてのATSを無効にしたくありませんNSExceptionDomains。それらは変更される可能性があり、リストを管理する必要があるからです。一般的なアプリ構成とともに、本番用に 3 つ以上の異なるホスト タイプがあります。[もちろん、完璧な世界では、App Transport Security を無効にしたいホストをリストアップし、他のすべてのホストに対して有効にするよう Apple が提案してくれますが、そうではありません! 逆に]

また、ユーザー定義の設定$(MY_USER_SETTING)(デバッグ/ステージング/リリースに対応する 3 つの異なる値をサポートできます) を継承しようとしましNSAppTransportSecurityたが、辞書とNSAllowsArbitraryLoadsブール値である文字列以外の型ではうまく機能しません。これらの値は継承されません。私のユーザー定義の設定。

背景: Charles Proxy を使用してデバッグ/ステージング構成の HTTP トラフィックを表示できるようにしたいのですが、iOS 9 では ATS を無効にする必要があり、これがリリース構成に影響を与えないようにしたいと考えています。 !

4

2 に答える 2

3

考えられることとは対照的に (一例: 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 を使用します。

于 2015-10-23T21:12:00.473 に答える
2

そこにあなたの答えがあると思います。ATS は、すべてのホストでデフォルトで有効になっています。ステージング ホストに対してのみ無効にすると、本番エンドポイントは影響を受けません。つまり、ステージング ドメインを例外ドメインに追加するだけです。それとも、あなたの質問の詳細を誤解しましたか?

于 2015-10-23T21:00:47.613 に答える