Files
Nextcloud-Cookbook-iOS/Nextcloud Cookbook iOS Client/Nextcloud_Cookbook_iOS_ClientApp.swift
Hendrik Hogertz ce2a814e5a Add Share Extension for importing recipes via URL
Adds a Share Extension so users can share URLs from Safari (or any app)
to open the main app with the ImportURLSheet pre-filled. Uses a custom
URL scheme (nextcloud-cookbook://) as the bridge between the extension
and the main app.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 10:17:22 +01:00

57 lines
1.8 KiB
Swift

//
// Nextcloud_Cookbook_iOS_ClientApp.swift
// Nextcloud Cookbook iOS Client
//
// Created by Vincent Meilinger on 06.09.23.
//
import SwiftUI
import SwiftUI
@main
struct Nextcloud_Cookbook_iOS_ClientApp: App {
@AppStorage("onboarding") var onboarding = true
@AppStorage("language") var language = Locale.current.language.languageCode?.identifier ?? "en"
@AppStorage("appearanceMode") var appearanceMode = AppearanceMode.system.rawValue
@State private var pendingImportURL: String?
var colorScheme: ColorScheme? {
switch appearanceMode {
case AppearanceMode.light.rawValue: return .light
case AppearanceMode.dark.rawValue: return .dark
default: return nil
}
}
var body: some Scene {
WindowGroup {
ZStack {
if onboarding {
OnboardingView()
} else {
MainView(pendingImportURL: $pendingImportURL)
}
}
.preferredColorScheme(colorScheme)
.transition(.slide)
.environment(
\.locale,
.init(identifier: language ==
SupportedLanguage.DEVICE.rawValue ? (Locale.current.language.languageCode?.identifier ?? "en") : language)
)
.onOpenURL { url in
guard !onboarding else { return }
guard url.scheme == "nextcloud-cookbook",
url.host == "import",
let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
let recipeURL = components.queryItems?.first(where: { $0.name == "url" })?.value,
!recipeURL.isEmpty
else { return }
pendingImportURL = recipeURL
}
}
}
}