📱

Xcodeのシュミレーターでネットワークに繋がらない

に公開

現象

wkwebviewを使って外部WEBページを表示する処理があるのですが、iOS18.4のシュミレーターで動かしたときだけ、なぜか初回アクセスだけがうまくいって、その後はWEBページが正常に表示されなくなります。
他のバージョンのiOSでは問題ないですし、実機の18.4.1でも問題なく表示できます。
原因についてはSSL/TLS設定だったり、HTTPS3だったりしますが、はっきりとしたことはわかりません。
chatGPTに訊いてみると、「シュミレーターOSのバグじゃね?」と言われましたが、アップルの対応を待っている時間的余裕もないので、色々調べてみました。
その結果、「プライベートブラウズにすれば動くよ」という記事をちらほらと見かけましたので、試してみたいと思います。
もちろん恒常的な解決方法ではないと思いますが、とりあえず動作テストできればOKです。

対策

対策はWKWebViewのconfigurationに「.nonPersistent()」を設定します。
対策前のソースはこんな感じでした。

let config = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: config)
context.coordinator.webView = webView
webView.isOpaque = false
webView.navigationDelegate = context.coordinator
webView.load(URLRequest(url: loardUrl))

そこで、URLRquestの前に下記を追加します。

let config = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: config)
context.coordinator.webView = webView
webView.isOpaque = false
webView.navigationDelegate = context.coordinator
webView.configuration.websiteDataStore = .nonPersistent() //←これを追加
webView.load(URLRequest(url: loardUrl))

これでひとまずは正常にWEBページを表示できるようになりました。

参考ページ

https://developer.apple.com/forums/thread/777999



「ikitell! 見守りサービス」 - 目覚ましアラームアプリと見守りサービスを統合しました!

Discussion