【iOS】swiftでWebViewにサイトが表示されない
こんにちは。
iOSの勉強を始めたばかりのぴぽです。
早速Webページ画面を表示するアプリを作成しようとしていたのですけど、サイトが表示されない問題にぶつかりました。
解決法をメモしておきます。
まず僕の書いていたコードです。
import UIKit class ViewController: UIViewController { @IBOutlet weak var webview: UIWebView! override func viewDidLoad() { super.viewDidLoad() let requestURL = NSURL(string: "http://www.google.com/") let req = NSURLRequest(url: requestURL! as URL) webview.loadRequest(req as URLRequest) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
その結果、
こんな風に真っ白な画面のままだったんですね。
どうやらこれはiOS9から追加されたApp Transport Security(ATS)が影響しているようです。
ATSとは、iOS 9.0およびOS X v10.11以降で導入された、「サーバとアプリケーション間でセキュアな通信を保証するための機能」です。
ATSを有効化にすることにより、Appleが推奨する条件を満たすHTTPS通信のみ許可され、条件を満たさないHTTPS通信やHTTP通信は強制的に接続失敗扱いとなります。
引用元 株式会社ラック
つまりHTTP通信は接続させませんよってことみたいです。
今回のコードだと
let requestURL = NSURL(string: "http://www.google.com/")
URLを"http"にしていたことが問題だったんですね。
let requestURL = NSURL(string: "https://www.google.com/")
と変更して見たところ
無事表示させることができました!
HTTPSが用意されていないサイトの場合、
通信したいドメインをinfo.plistに記述していくか、ATSを無効にするかの対策を取らないといけないようです。
参考になりそうなサイトを見つけたのであげておきます。
info.plistに記述する方法▼
qiita.com
ATSを無効にする方法▼
qiita.com