【Xcode7,iOS9】エラー解決: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.
Xcode警告への対処、解決
エラー: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.
【動作環境】
*Mac OS X Yosemite ver.10.10.5
*Xcode ver.7.0 beta 6
Xcode7でのビルド。
執筆時点(2015年9月10日)にご留意を。
iOS9のApp Transport Security、略してAPS。
どこか少しでも通信を行うiPhoneアプリを作るなら避けては通れないでしょう。
ATS が有効の場合、http通信はできません。
https通信が求められます。
https通信を推奨するのがAppleの方針でしょう。
この記事ではとりあえずApp Transport Security(APS)を無効にして、https通信ではなくhttp通信で通信を行うことができる現実的な方法を示しておきます。
Info.plistにNSAppTransportSecurity (Dictionary)を追加し、NSAllowsArbitraryLoads (Bool)をYESに設定します。
注意して欲しいのは、(AppName)Tests.mというようなテストがある場合、その下位にあるInfo.plistでもこの設定をしておくことです(Info.plistが2つある時、片方のplistで設定し忘れを起こすことがあります。plistに設定したのになんでhttp通信できないんだ!となる時はここだったりします)。
そうすると表が出てくると思います。
どこでもいいので+を押して、NSAppTransportSecurity (Dictionary)をまず追加してください。
ありがたく候補が出てきてくれるのですが、この中にないため手書きで追加。
そのままだと型がStringになっているのでDictionaryにしてください。
NSAppTransportSecurity (Dictionary)の下位にNSAllowsArbitraryLoads (Bool)を追加。
エレベーター降りるみたいな左端の矢印が下に向いてますよね、下位に設定できているか確認して追加してください。
NSAllowsArbitraryLoadsも手書き、Bool型に。そしてYESを設定。
ここで注意して欲しいのはスペルミスです。
スペルミスはどんな熟練者であっても決して軽視できないミスです。
スペルミス例:AllowsがAllowesになっていないか、ArbitraryがArbitaryになっていないか
以上でhttp通信が可能になったかと思います。
NSAllowsArbitraryLoads (Bool)をYESにすることですべてのドメインのATSを無効にできます(つまり、デフォルトはNO)。
他にも、特定のドメインのみhttp通信を有効にするなどの方法もあります。
今後Appleはよりセキュアな通信を推奨する方針なのでしょう。