【iOS9】HTTP→HTTPSだと!App Transport Security(ATS)について

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

iOS9では、WebViewなどで、HTTPへのアクセスができなくなっています。ネットで検索してみると、

【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法

まじですか、要検証↓

HTTPでのリクエストは使えなくしていく気満々な模様。

シンプルなアプリでテストしてみたところ、

01

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.

とエラーが出て、どうも本当のようです。

仮にGoogleへhttpsで接続して、その検索結果からサイトへアクセスしようとしても、そのサイトがHTTPだった場合は、同様のエラーでアクセスできません。

02

推奨されていないということですが、App Transport Security(ATS) でこの制限を全体的に許可してあげることで、アクセスできるようにはなるようです。Info.plistに「NSAppTransportSecurity」をDictionaryで作成し、「NSAllowsArbitraryLoads」をBoolean型としてtrue(YES)にします。Xcode 6の既存のプロジェクトをXcode 7にしてこのようなエラーが発生した場合は、とりあえずこの方法で対処すると動くようになるかもしれません。

03

ブラウザ機能を内部に持つようなアプリの場合は、現状としてはアクセスできなくなるサイトも多くあり、このような設定にするしかないのではないでしょうか?

また、Info.plistの「NSAppTransportSecurity」>「NSExceptionDomains(Dictionary型)」でドメインを登録し、「NSTemporaryExceptionAllowsInsecureHTTPLoads」をtrue(YES)にしておくことで、HTTPであってもアクセスできるサイトを設定することも可能です。

04

特定のドメインしかアクセスしないことが確定しているケースでは、むしろこの方がよさそうですね。(しかしながら、WebViewなどを使ってページを表示した場合、ページ内に外部リンクがある場合は同様にアクセスできないため、表示されなかったり機能しないものが出てくる可能性もありますね。)

いずれにしても、結構大きな仕様変更なため、このエラーが発生するケースは多そうです。

[追記]:サブドメインを登録したい場合は、登録したドメイン以下に「NSIncludesSubdomains」をBoolean型で作り、true(YES)にしておきます。

05

[追記] : クラスメソッドさんの記事に全部細かく書いてありますね。全部知りたい方はご参考に。
[iOS 9] iOS 9 で追加された App Transport Security の概要」 

[追記(2015.10.20)] : Webサイトの方をSSL対応しておこう、と考えたりした場合は、低コストでSSLを導入するMEMOを書いたのでそちらもご覧ください。↓

ずっとヘテムルを利用しているのですが、独自SSLを導入すると1500円/月くらいかかるので、他のレンタルサーバも見ていたところ、さくらインタ...

コメント

  1. yoneapp より:

    「[iOS 9] iOS 9 で追加された App Transport Security の概要」のリンク先間違っていませんか?