From 562c388499fff80aaeb94e55b2ceb1b41761f1d1 Mon Sep 17 00:00:00 2001 From: Anselme Date: Mon, 27 May 2024 13:47:21 +0200 Subject: [PATCH] fix: handle multiple scheme (ios) --- plugin/src/ios/writeIosShareExtensionFiles.ts | 13 +++++++++--- src/utils.ts | 21 +++++++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/plugin/src/ios/writeIosShareExtensionFiles.ts b/plugin/src/ios/writeIosShareExtensionFiles.ts index a0314ec..7b74056 100644 --- a/plugin/src/ios/writeIosShareExtensionFiles.ts +++ b/plugin/src/ios/writeIosShareExtensionFiles.ts @@ -184,10 +184,17 @@ export function getShareExtensionViewControllerContent( scheme: string, appIdentifier: string, ) { + let updatedScheme = scheme; + if (Array.isArray(scheme)) { + console.debug( + `[expo-share-intent] multiple scheme detected (${scheme.join(",")}), using:${updatedScheme}`, + ); + updatedScheme = scheme[0]; + } console.debug( - `[expo-share-intent] add ios share extension (scheme:${scheme} appIdentifier:${appIdentifier})`, + `[expo-share-intent] add ios share extension (scheme:${updatedScheme} appIdentifier:${appIdentifier})`, ); - if (!scheme) { + if (!updatedScheme) { throw new Error( "[expo-share-intent] missing custom URL scheme 'expo.scheme' in app.json ! (see https://docs.expo.dev/guides/linking/#linking-to-your-app)", ); @@ -199,6 +206,6 @@ export function getShareExtensionViewControllerContent( ); return content - .replaceAll("", scheme) + .replaceAll("", updatedScheme) .replaceAll("", appIdentifier); } diff --git a/src/utils.ts b/src/utils.ts index 80dadd9..2948768 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -10,12 +10,21 @@ export const getScheme = (options?: ShareIntentOptions) => { return options.scheme; } if (Constants.expoConfig?.scheme) { - options?.debug && - console.debug( - "expoShareIntent[scheme] from expoConfig:", - Constants.expoConfig?.scheme, - ); - return Constants.expoConfig?.scheme; + let updatedScheme = Constants.expoConfig?.scheme; + if (Array.isArray(Constants.expoConfig?.scheme)) { + updatedScheme = updatedScheme[0]; + options?.debug && + console.debug( + `expoShareIntent[scheme] from expoConfig: multiple scheme detected (${Constants.expoConfig?.scheme.join(",")}), using:${updatedScheme}`, + ); + } else { + options?.debug && + console.debug( + "expoShareIntent[scheme] from expoConfig:", + updatedScheme, + ); + } + return updatedScheme; } const deepLinkUrl = createURL("dataUrl="); const extracted = deepLinkUrl.match(/^([^:]+)/gi)?.[0] || null;