iOS 17以降とmacOS 14以降におけるWKWebViewのプロキシデータストア
iOS 17またはmacOS 14以降では、ビューを作成してナビゲートする前にproxyConfigurationsを設定し、CONNECT仲介者が必要とする場合は認証情報も渡します。
import Network
import WebKit
@available(iOS 17.0, macOS 14.0, *)
@MainActor
func makeWebView(username: String, password: String) -> WKWebView {
let endpoint = NWEndpoint.hostPort(
host: "proxy.example.net", port: 8080)
let proxy = ProxyConfiguration(
httpCONNECTProxy: endpoint, tlsOptions: nil)
proxy.applyCredential(username: username, password: password)
let store = WKWebsiteDataStore.nonPersistent()
store.proxyConfigurations = [proxy]
let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = store
return WKWebView(frame: .zero, configuration: configuration)
}返されるビューは、専用の非永続WKWebsiteDataStoreを使用します。目的のウェブサイトはそのビューを通じて読み込みます。仲介者のアカウントを使うか、認証情報を必要としないプロキシの場合はapplyCredentialを省略します。この未認証のHTTP分岐では、HTTPプロキシ一覧がデータストア用の候補エンドポイントを提供します。
このストアを共有するすべてのビューは、そのプロキシポリシーを共有します。この専用ストアは一時的なウェブサイトデータも持つため、別のビューの既存のウェブサイトログインを継承しません。
設定はナビゲーションより前に保ちます。WebKitは、ストアのプロキシ設定を変更すると現在のネットワーク処理が中断される可能性があると警告しています。
別個のURLSession取得とそれに続くloadHTMLStringは、そのHTML取得だけを対象とします。画像、スクリプト、以降のナビゲーションは引き続きビューのネットワーク処理を使います。ストアはその経路を設定するための公開フックです。