ATS(App Transport Security)を"Xcode8 beta2"+"iOS10 beta2"でテストしてみた(追記)
前回、"Xcode8 beta1"と"iOS10 beta1"でATSと新しいKeyNSAllowsArbitraryLoadsInWebContent
の調査したが、想定と違う結果になり、バグだったのでは?という結論に至った。
beta2リリースから1週間経ってしまったが、beta2で改めて確認してみた。
今回NSAllowsArbitraryLoadsInWebContent
は、Keyの候補として出るようになっていた。
[追記]
LAN内のコンテンツを読む場合の挙動が気になったため、新たにテストして表に追記しました。
テスト方法
テスト方法は前回+α(プログラムの使い回し)
- ATSは、最初Xcode7BuildのipaとiOS9の組み合わせで発動していたので、Xcode7BuildとXcode8Buildで違いでるか比較
- NSAllowsArbitraryLoadsInWebContentの設定で挙動がどう変わるか確認
- HTTPSは、https://www.apple.com/を使用
- HTTPは、http://www.yahoo.co.jp/を使用
- HTTP(LAN)は、MAMPを使用してhttp://192.168.0.12/を使用 (追記)
- UIWebView / WKWebView / NSURLSession / SFSafariViewController の4つで比較
- キャッシュ?のようなものが残り不自然な挙動があったため、テスト毎にテストアプリをインストールし直して実行 (追記)
- ATSは表のKeyのみを設定
- 補足としてnoneとなっているものはKeyを削除している状態のこと
↓↓↓以下結果↓↓↓
Xcode7.3.1 Build
Xcode8.0 beta2 Build
結果
今回はNSAllowsArbitraryLoadsInWebContent
が正常に効いたようで、はてな開発者ブログの方で言及されていた通り、WKWebViewでのみ通信ができる状態になった。
ほぼこれが最終系になると思われるが、仕様変更なんてよくあることなので、正式版まで逐一確認していけたらと思う。
[追記]
iOS10では、LAN内に対してはATSの影響が及ばなくなっていました。
あまりLAN内でのネットワークアクセスをするということは、外部にアクセスすることに比べれば非常に少ないと思いますが、大きい変更点だと思います。iOS9の時は、フォーラムでもLocalIPだけを除外対象にできないかという質問も多々ありましたし。
2017年01月からATSが基本的に必須になりますが、こうなるとLANにアクセスするアプリはiOS9をサポートするために、ATSを外すことになるため、Appleへの申請時に理由を書いて審査を通してもらう必要がありそうです。
iOS10のみサポートするというのもいささか暴力的で無理ありますし…。
===関連記事===