Web ページが取れないとき

iOS 9 より App Transport Security の基準を満たしていないサーバーとの通信が失敗するようになりました。

状況

  • NSString stringWithContentsOfURL の戻り値が null
  • UIWebView loadRequest 後に何も返ってこない
  • iOS 9 未満では正常

条件

  • iOS 9 向けにビルドし、iOS 9 のデバイスで動かす
  • 特定の URL(ATS 基準外)

対応

ATS を適用しないドメインを info.plist に設定します。

Xcode - Open As Property List

※ blabla.com を目的のドメインに変える

Xcode - Open As Source Code
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>blabla.com</key>
            <dict>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

参考

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33