環境
- macOS HighSierra 10.13.4
- Xcode 9.3
- Swift 4.1
事象
ビルド実行 > シュミレータ立ち上げ 後に、
コンソールにて「HTTPがどうだ」とか言われた以下内容のエラーが発生し、正常な画面表示がされない。
エラー内容
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.
原因
App Transport Security
iOS9から導入されたAppTransportSecurityによるもので、初期設定ではHTTPS通信しか行えないように設定されている。
そのため、この設定環境下でHTTP通信を行うと同事象が発生する。
原因のコード
- 表示するWebページのURL文字列を定義する。
- そのURL文字列をURLRequest型に変換する。
- 変換したURLをもとに、Webページを表示する。
ViewController.swift
@IBOutlet weak var webView: UIWebView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// URLをもとにサイトを表示する
let strUrl = "http://google.com"
let urlRequest = URLRequest(url: URL(string: strUrl)!)
self.webView.loadRequest(urlRequest)
}
上記のwebView
にあたるUIWebViewクラスからのHTTP通信が許可されていないことによるもの。
対処方法
HTTP通信の設定を許可するよう変更する。
info.plistに変更追加する
- 左側に位置するNavigatorAreaで、対象のViewControllerと同階層に存在する [info.plist] を開く。
- 最終行にカーソルを当て [+] をクリックする。
- 項目の追加内容から [App Transport Security Settings] を選択する。
- 選択後、追加した項目の左側にある三角印 [▶] をクリックする。
- クリックすると三角印が下向 [▼] になり展開された状態となる
- その状態で、新たに [+] をクリックし新たに項目を追加する。
- 項目の追加内容から 2番目の設定項目 [Allow Arbitrary Loads in Web Content] を選択する。
- 同項目の右側のValueを [NO] → [YES] へ変更する。
これにより、UIWebViewクラスからのHTTP通信が許可されるようになる。