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>
This commit is contained in:
2026-02-15 10:17:22 +01:00
parent 151e69ff28
commit ce2a814e5a
10 changed files with 547 additions and 26 deletions

View File

@@ -15,6 +15,8 @@ struct Nextcloud_Cookbook_iOS_ClientApp: App {
@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
@@ -29,7 +31,7 @@ struct Nextcloud_Cookbook_iOS_ClientApp: App {
if onboarding {
OnboardingView()
} else {
MainView()
MainView(pendingImportURL: $pendingImportURL)
}
}
.preferredColorScheme(colorScheme)
@@ -39,6 +41,16 @@ struct Nextcloud_Cookbook_iOS_ClientApp: App {
.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
}
}
}
}