2016-04-29

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
  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSExceptionDomains</key>
  4. <dict>
  5. <key>blabla.com</key>
  6. <dict>
  7. <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
  8. <true/>
  9. </dict>
  10. </dict>
  11. </dict>

参考

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