【Swift】「SFSafariViewController」でWebページが表示されない時の対処法

iOS アプリで Webページを表示させたくて SFSafariViewController を使用していたのですが、開こうとしても白紙のページが表示されるだけという現象が発生しました。
1回目は成功するのですが、一度ページを閉じた後、再度開くと白紙になる…という状況です。
時間を開ければ表示されたりもするのですが、それだと使えないので対処法を調査しました。

 

さて対処法ですが、結局 SFSafariViewController をやめて WKWebView を使うのが一番手っ取り早いようでしたので、そちらの方法を採用することにしました。
ということで、実装のサンプルコードです。

まず、遷移先の WebView ページのコードがこちら。
地図を表示させているので、MapController.swift という名前になっています。
こちらは適宜変更してください。

import UIKit
import WebKit

class MapController: UIViewController, WKNavigationDelegate, WKUIDelegate {
    var webView: WKWebView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "マップ"
        let rightReloadButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(reloadPage(_:)))
        self.navigationItem.setRightBarButtonItems([rightReloadButton], animated: true)
        // WebView の設定
        webView = WKWebView(frame:CGRect(x:0, y:0, width:self.view.bounds.size.width, height:self.view.bounds.size.height))
        webView?.uiDelegate = self
        webView?.navigationDelegate = self
        self.view.addSubview(webView!)

        // URL設定
        let urlString = [表示したいWebページのURL]
        let url = URL(string: urlString)
        let request = URLRequest(url: url!)
        webView!.load(request)
    }
    
    // リロード処理
    @objc func reloadPage(_ sender: UIButton) {
        if webView?.url != nil {
            webView?.reload()
        }
    }
}

ナビゲーションバーの右端にはリロードボタンも追加しています。
こちらは必要がなければ削除してください。

そして、上記のページを開く時のコードはこちら

// 遷移するViewを定義する.
let mapController: MapController = MapController()
// View を移動する.
self.navigationController?.pushViewController(mapController, animated: true)

コメントを抜かせば、たった 2行でOKです。

 

もちろん、SFSafariViewController を使用すれば MapController.swift を用意しなくて済むのでコード行数も少なくて済むのですが、原因のわからないエラーが発生したので作り直してしまった方が簡単でした。
しかし、別の問題もあり、WebView を開いた数十秒後に下記のような警告が発生しました…。

Could not signal service com.apple.WebKit.Networking: 113: Could not find specified service

警告なので無視しても大丈夫そうではありますが…ちょっと気になるので、調べて見てすぐ解決できそうなら対応したいと思います。

 

以上、Swift の SFSafariViewController で Web ページが表示できない時の対処法でした。
根本的な解決にはなっていませんが…ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG