今回作成するアプリ

実装

コード

import SwiftUI
import SafariServices

struct ContentView: View {
    // Safari ViewControllerを開くかどうか
    @State var showSafari = false
    // URLの初期化
    @State var urlString = "https://apple.com"
    
    var body: some View {
        Button(action: {
            // URLを変更したい場合ここに書く
            self.urlString = "https://apple.com"
            // Safari VCを開くことをアプリに伝える
            self.showSafari = true
        }) {
            Text("Present Safari")
        }
        // Safari sheet
        .sheet(isPresented: $showSafari) {
            SafariView(url:URL(string: self.urlString)!)
        }
    }
}

struct SafariView: UIViewControllerRepresentable {

    let url: URL

    func makeUIViewController(context: UIViewControllerRepresentableContext<SafariView>) -> SFSafariViewController {
        return SFSafariViewController(url: url)
    }

    func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariView>) {
    }

}

動作

環境

macOS Ventura 13.0.1

Xcode 14.2

iOS 16.2

Simulater iPhone 14 Pro Max

アイキャッチ画像 出典: App.com