面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

ATS(App Transport Security)を"Xcode8 beta2"+"iOS10 beta2"でテストしてみた(追記)

前回、"Xcode8 beta1"と"iOS10 beta1"でATSと新しいKeyNSAllowsArbitraryLoadsInWebContentの調査したが、想定と違う結果になり、バグだったのでは?という結論に至った。
beta2リリースから1週間経ってしまったが、beta2で改めて確認してみた。

今回NSAllowsArbitraryLoadsInWebContentは、Keyの候補として出るようになっていた。
f:id:aryzae:20160712014146p:plain

[追記]

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

f:id:aryzae:20160717201119p:plain

Xcode8.0 beta2 Build

f:id:aryzae:20160717201130p:plain

結果

今回はNSAllowsArbitraryLoadsInWebContentが正常に効いたようで、はてな開発者ブログの方で言及されていた通り、WKWebViewでのみ通信ができる状態になった。
ほぼこれが最終系になると思われるが、仕様変更なんてよくあることなので、正式版まで逐一確認していけたらと思う。

[追記]

iOS10では、LAN内に対してはATSの影響が及ばなくなっていました。
あまりLAN内でのネットワークアクセスをするということは、外部にアクセスすることに比べれば非常に少ないと思いますが、大きい変更点だと思います。iOS9の時は、フォーラムでもLocalIPだけを除外対象にできないかという質問も多々ありましたし。

2017年01月からATSが基本的に必須になりますが、こうなるとLANにアクセスするアプリはiOS9をサポートするために、ATSを外すことになるため、Appleへの申請時に理由を書いて審査を通してもらう必要がありそうです。
iOS10のみサポートするというのもいささか暴力的で無理ありますし…。


===関連記事===

Xcode8.0 betaの記事

aryzae.hatenablog.com

Xcode8.0 beta3の記事

aryzae.hatenablog.com