import SwiftUI import RastrilloNative @main struct Companion: App { var body: some Scene { WindowGroup { CompanionView() } } } @MainActor final class CompanionModel: ObservableObject { @Published var origin = "https://your-app.example" @Published var status = "Enter your app's address." private let refresh = CoalescedRunner() func connect() async { await refresh.run { [self] in guard let base = URL(string: origin), base.scheme == "https", base.host != nil, base.user == nil, base.password == nil, base.query == nil, base.fragment == nil, base.path.isEmpty || base.path == "/" else { status = "Enter an HTTPS address without a path." return } status = "Connecting…" do { let (_, response) = try await URLSession.shared.data(from: base.appendingPathComponent("api/version")) guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { status = "Could not connect. Check the address and try again." return } status = "Connected." } catch { status = "Could not connect. Check your connection and try again." } } } } struct CompanionView: View { @StateObject private var model = CompanionModel() var body: some View { Form { TextField("App address", text: $model.origin) .autocorrectionDisabled() Button("Connect") { Task { await model.connect() } } Text(model.status) .accessibilityLabel(model.status) } .padding() .frame(minWidth: 300, minHeight: 180) } }