iOS10.1 ATS

前回の検証がBeta版だったので安定版でも検証した

検証環境

  • iPad Pro 9.7
  • iOS10.1
  • Xcode 8.1
  • Swift3

検証方法

  • 非SSLリクエスト先はhttp://www.example.com
  • SSLリクエスト先はhttps://www.example.com
  • 非SSLリクエストとSSLリクエストを行い結果を確認する(合計8つのリクエスト)
    • UIWebView
    • WKWebView
    • NSURLSessionで該当URLのソースコードをダウンロードして表示
    • NSDataで該当URLのソースコードをダウンロードして表示
  • これらのリクエスト結果がATSの設定パターンでどのように変わるのかを比較する

検証手順

  • 上記検証方法に対応したプロジェクトを作成して実機起動(シミュレータは実機と異なる動作をすることが多いため)
  • http(s)リクエストのキャッシュが残らないよう都度アプリを再インストールする
  • 8リクエストが終わったら次のApp Transport Securityの設定パターンに変えていく(Clean Build Folderするの忘れてた

結果

iOS10.1で非SSL4つの検証方法全てが成功したのはこの設定のみでした。

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

まとめた

row(行)は検証した動作、column(列)は"Allow Arbitrary Loads" : "Allow Arbitrary Loads in Web Content"

Ghostのmarkdownだとテーブルが表示できないのでtableタグ使ったけどどうだろうか。

YES : YESYES : NONO : YESNO : NOYES : -NO : -- : -
No SSL UIWebView×[^1]×[^1]×[^1]×[^1]
No SSL WKWebView×[^2]×[^3]×[^2]×[^2]
No SSL NSURLSession×[^1]×[^1]×[^1]×[^1]×[^1]×[^1]
No SSL NSData×[^4]×[^4]×[^4]×[^4]×[^4]×[^4]
SSL UIWebView
SSL WKWebView
SSL NSURLSession
SSL NSData

やっぱり開発環境ではApp Transport Security Settings.Allow Arbitrary Loadsを設定しておいてhttpリクエストもできるようにした方がいいのかな、とか思いますね。本番環境ではhttps必須にするとして。