web-dev-qa-db-ja.com

iOS9のApp Transport SecurityとIPアドレス

開発ボックスで実行されているローカルサーバーを使用してiOSアプリを開発しています。デバイスでテストするときは、HTTPSではなくHTTP経由のIPアドレスを介して直接接続します(そのため、開発中に自己署名証明書を処理する必要はありません。デバイスはとにかく好きではありません)。

これで十分だと思いました:

enter image description here

ただし、NSAllowsArbitraryLoads = YESを追加せずに機能させることはできません。別名:

enter image description here

ここで、本番ビルドをロールするときはこれを削除する必要がありますが、開発中は削除しないでください... arg。 NSExceptionDomainsはIPアドレスで動作しますか。動作しない場合、NSAllowsArbitraryLoadsを有効にせずに他にできることはありますか?

52
esilver

ハードコードされたIPアドレスはiOS9では機能しません。私も同じ問題に直面しました。利用可能なソリューションのすべての順列と組み合わせを試しました。最後に、適切なドメイン名を使用する必要がありました。

だから、いいえ。iOS9では、ハードコードされたIPアドレスで逃げることはできません。

52
PanxShaz

NSAllowsArbitraryLoadsも有効にせずにできることは他にありますか?

回避策の1つは、 xip.io を使用することです。これは QJeffR in this Apple Developer Forums thread彼のコメント )でDavid Lによって共有されました:

(たとえば) 10.0.1.8.xip.io へのDNS呼び出しは 10.0.1.8 に解決され、NSExceptionDomainsキーにIPアドレスの代わりにドメインを使用できます。

25
TachyonVortex

@PanxShazが言ったように、ハードコードされたIPアドレスを入力することはできませんが、簡単な回避策を使用できます。

  1. /etc/hostsファイルをSudoを使用して、IPアドレスの新しいローカルドメイン名を追加します。例:

    192.168.99.100 docker-Host.localhost

  2. 次に、DNSをフラッシュします。

    dscacheutil -flushcache

  3. 最後に、アプリトランスポートセキュリティの例外でこの新しいローカルドメインを使用します。

5
anasaitali

IOS 10以降をターゲットにしている場合は、 NSAllowsLocalNetworking フラグを設定するだけです。

3
Herman Kan