iOS10 ATS設定について

iOS10.1で検証しなおして表にしました。
この記事の内容はBeta版の動作です。

iOS10からATS(App Transport Security)の設定が増えるということと、「Webに接続するiOSアプリは2017年1月からHTTPSの使用が絶対条件になる、デベロッパーはご注意を」で色々と騒がれていましたが最近はあんまり聞かないですね。iOS10のリリースも近いはずなのに。

上のリンクのソースはこのPDFのp.100みたいです。

App Transport Security
+ Required by App Store at end of 2016
+ TLS v1.2, with exceptions for already-encrypted buld data like media streaming

この件についてはiOS 10のApp Transport Securityと2016年末からのATS必須化についてAppleのエンジニアに聞いてきた(以下、ATS必須化について)で色々とまとめられていますが実際に確認しました。

検証環境

  • iPad Pro 9.7
  • iOS10 beta4
  • Xcode 8.0 beta 4 (8S188o)
  • Swift3

検証方法

  • UIWebViewhttp://www.example.comを表示する
  • WKWebViewhttp://www.example.comを表示する
  • NSURLSessionhttp://www.example.comのソースコードをダウンロードしてWKWebViewに表示する
  • NSDatahttp://www.example.comのソースコードをダウンロードしてWKWebViewに表示する

検証手順

  • 上記検証方法に対応したプロジェクトを作成して実機起動(シミュレータは実機と異なる動作をすることが多いため)
  • httpリクエストのキャッシュが残らないよう都度アプリを再インストールする
  • App Transport Security の設定を変更した際にはXcodeプロジェクトのClean Build Folderを実行する(Product → Clean をオプション押しながらクリック or オプション+シフト+コマンド+K)

結果

iOS10 beta4で4つの検証方法全てが成功したのはこの設定のみでした。

"App Transport Security Settings" : {
    "Allow Arbitrary Loads" : YES,
}

ATS必須化についてではこの設定でもAllow Arbitrary Loads in Web Content がNOなら同じと書かれていましたが挙動が違いました。

"App Transport Security Settings" : {
    "Allow Arbitrary Loads" : YES,
    "Allow Arbitrary Loads in Web Content" : NO,
}

もちろんiOS10 beta4での話なので確定では無いのですが。

ちょっと気になるのはATS必須化についてで1つ目の設定について

ATSが無効な状態。
これでApp Storeにアプリを申請すると、
審査でなぜATSを無効にしているのか聞かれ、
正当な理由を説明できる必要がある。

と書かれているのでここだけチェックかなと思っています。もちろんセキュアな通信だけにできるのであれば一番ですが外部サービスに依存したりすると厳しいところですね。

もちろんiOS10 beta4での話なので確定では無いです。保証はできないです。

あとわりとどうでもいいレベルで気になったことが2つありました。

  1. iOS10はbeta4のためかWKWebViewでのみATSに関するエラーが出力されませんでした
  2. ATSのエラーはコンソールに出力されますが通信が開始される前に破棄されるためUIWebViewなどのリクエスト前に呼ばれるデリゲートメソッドも呼ばれませんでした