iOS9では、WebViewなどで、HTTPへのアクセスができなくなっています。ネットで検索してみると、
【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法
まじですか、要検証↓
HTTPでのリクエストは使えなくしていく気満々な模様。
シンプルなアプリでテストしてみたところ、
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だった場合は、同様のエラーでアクセスできません。
推奨されていないということですが、App Transport Security(ATS) でこの制限を全体的に許可してあげることで、アクセスできるようにはなるようです。Info.plistに「NSAppTransportSecurity」をDictionaryで作成し、「NSAllowsArbitraryLoads」をBoolean型としてtrue(YES)にします。Xcode 6の既存のプロジェクトをXcode 7にしてこのようなエラーが発生した場合は、とりあえずこの方法で対処すると動くようになるかもしれません。
ブラウザ機能を内部に持つようなアプリの場合は、現状としてはアクセスできなくなるサイトも多くあり、このような設定にするしかないのではないでしょうか?
また、Info.plistの「NSAppTransportSecurity」>「NSExceptionDomains(Dictionary型)」でドメインを登録し、「NSTemporaryExceptionAllowsInsecureHTTPLoads」をtrue(YES)にしておくことで、HTTPであってもアクセスできるサイトを設定することも可能です。
特定のドメインしかアクセスしないことが確定しているケースでは、むしろこの方がよさそうですね。(しかしながら、WebViewなどを使ってページを表示した場合、ページ内に外部リンクがある場合は同様にアクセスできないため、表示されなかったり機能しないものが出てくる可能性もありますね。)
いずれにしても、結構大きな仕様変更なため、このエラーが発生するケースは多そうです。
[追記]:サブドメインを登録したい場合は、登録したドメイン以下に「NSIncludesSubdomains」をBoolean型で作り、true(YES)にしておきます。
[追記] : クラスメソッドさんの記事に全部細かく書いてありますね。全部知りたい方はご参考に。
「[iOS 9] iOS 9 で追加された App Transport Security の概要」
[追記(2015.10.20)] : Webサイトの方をSSL対応しておこう、と考えたりした場合は、低コストでSSLを導入するMEMOを書いたのでそちらもご覧ください。↓
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。
コメント
「[iOS 9] iOS 9 で追加された App Transport Security の概要」のリンク先間違っていませんか?
ありがとうございます!修正しておきました!