元柔道整復師エンジニアBlog

- 元柔道整復師エンジニアBlog -

『 エンジニアをリングする。』

【Swift】ビルド実行にて「App Transport Security has blocked a cleartext HTTP・・・」というエラー発生時の対処方法

環境

事象

ビルド実行 > シュミレータ立ち上げ 後に、 コンソールにて「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通信を行うと同事象が発生する。

原因のコード
  1. 表示するWebページのURL文字列を定義する。
  2. そのURL文字列をURLRequest型に変換する。
  3. 変換したURLをもとに、Webページを表示する。
@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    // URLをもとにサイトを表示する
    let strUrl = "http://google.com"
    let urlRequest = URLRequest(url: URL(string: strUrl)!)
    self.webView.loadRequest(urlRequest)
}

上記のwebViewにあたるUIWebViewクラスからのHTTP通信が許可されていないことによるもの。

対処方法

HTTP通信の設定を許可するよう変更する。

info.plistに変更追加する

  1. 左側に位置するNavigatorAreaで、対象のViewControllerと同階層に存在する [info.plist] を開く。
  2. 最終行にカーソルを当て [+] をクリックする。
  3. 項目の追加内容から [App Transport Security Settings] を選択する。
  4. 選択後、追加した項目の左側にある三角印 [▶] をクリックする。
  5. クリックすると三角印が下向 [▼] になり展開された状態となる
  6. その状態で、新たに [+] をクリックし新たに項目を追加する。
  7. 項目の追加内容から 2番目の設定項目 [Allow Arbitrary Loads in Web Content] を選択する。
  8. 同項目の右側のValueを [NO] → [YES] へ変更する。

これにより、UIWebViewクラスからのHTTP通信が許可されるようになる。