2015年9月26日土曜日

Xcode7に更新後に、iOS9のHTTP通信箇所でエラー。

Xcode7に更新して、iOS9の端末でHTTP通信箇所でエラーが発生するようになりました。
原因と解決方法について、調べた内容をメモとして残しておきます。

エラーはUIWebViewのloadRequestを実行箇所で発生してました。
特に変わった処理ではなく、httpから始まるサイトをUIWebViewに表示させてようとしただけでした。
そして、UIWebViewの表示は真っ白なままで、次のエラーログが出力されていました。

CFNetwork SSLHandshake failed (-9824)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

なお、iOS7とiOS8の端末では、正常にHTTP通信できて
UIWebViewのloadRequest実行時に指定したサイトの内容を表示できているのです。
多分、同じ問題に遭遇している人もいると思い、ググってみると
次のURLに解決方法が記載してました。

https://forums.developer.apple.com/thread/3484
http://nlogic.jp/?p=412

どうやら、iOS9では、HTTP通信をしようとするとHTTPS通信に
置き換えようとするらしいのです。
そして、それを解決する方法ですが、HTTP通信をHTTPS通信に
置き換えさせないようにするために、info.plistに次の設定を追加します。

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

あと、UIWebViewのloadHTMLStringを実行して、
自前でHTMLを描画しており、そのHTML内のiframeで
httpから始まるurlを指定して、画面表示を行う機能を実装している箇所で
そのiframe部分は真っ白に表示され、urlに該当する内容は表示される
上記と同様な現象も発生しておりました。
これは、冒頭のように、CFNetwork SSLHandshake failed (-9824)のエラーログは
出力されていませんでしたが、
上記のinfo.plistの設定を行った後は、iframe部分は正しく表示されるようになりました。

0 件のコメント :

コメントを投稿