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 : YES | YES : NO | NO : YES | NO : NO | YES : - | 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必須にするとして。