customerio-expo-plugin 2.7.0 → 2.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/plugin/lib/commonjs/android/withAndroidManifestUpdates.js +5 -4
- package/plugin/lib/commonjs/android/withAndroidManifestUpdates.js.map +1 -1
- package/plugin/lib/commonjs/android/withAppGoogleServices.js +2 -1
- package/plugin/lib/commonjs/android/withAppGoogleServices.js.map +1 -1
- package/plugin/lib/commonjs/android/withCIOAndroid.js +17 -11
- package/plugin/lib/commonjs/android/withCIOAndroid.js.map +1 -1
- package/plugin/lib/commonjs/android/withGistMavenRepository.js +2 -1
- package/plugin/lib/commonjs/android/withGistMavenRepository.js.map +1 -1
- package/plugin/lib/commonjs/android/withGoogleServicesJSON.js +4 -3
- package/plugin/lib/commonjs/android/withGoogleServicesJSON.js.map +1 -1
- package/plugin/lib/commonjs/android/withMainApplicationModifications.js +2 -1
- package/plugin/lib/commonjs/android/withMainApplicationModifications.js.map +1 -1
- package/plugin/lib/commonjs/helpers/native-files/ios/CustomerIOSDKInitializer.swift +10 -4
- package/plugin/lib/commonjs/helpers/utils/fileManagement.js +5 -4
- package/plugin/lib/commonjs/helpers/utils/fileManagement.js.map +1 -1
- package/plugin/lib/commonjs/helpers/utils/injectCIOPodfileCode.js +2 -1
- package/plugin/lib/commonjs/helpers/utils/injectCIOPodfileCode.js.map +1 -1
- package/plugin/lib/commonjs/helpers/utils/patchPluginNativeCode.js +5 -1
- package/plugin/lib/commonjs/helpers/utils/patchPluginNativeCode.js.map +1 -1
- package/plugin/lib/commonjs/index.js +3 -11
- package/plugin/lib/commonjs/index.js.map +1 -1
- package/plugin/lib/commonjs/ios/withAppDelegateModifications.js +2 -1
- package/plugin/lib/commonjs/ios/withAppDelegateModifications.js.map +1 -1
- package/plugin/lib/commonjs/ios/withCIOIos.js +7 -3
- package/plugin/lib/commonjs/ios/withCIOIos.js.map +1 -1
- package/plugin/lib/commonjs/ios/withCIOIosSwift.js +11 -10
- package/plugin/lib/commonjs/ios/withCIOIosSwift.js.map +1 -1
- package/plugin/lib/commonjs/ios/withGoogleServicesJsonFile.js +8 -7
- package/plugin/lib/commonjs/ios/withGoogleServicesJsonFile.js.map +1 -1
- package/plugin/lib/commonjs/ios/withNotificationsXcodeProject.js +29 -23
- package/plugin/lib/commonjs/ios/withNotificationsXcodeProject.js.map +1 -1
- package/plugin/lib/commonjs/utils/android.js +2 -1
- package/plugin/lib/commonjs/utils/android.js.map +1 -1
- package/plugin/lib/commonjs/utils/config.js +3 -2
- package/plugin/lib/commonjs/utils/config.js.map +1 -1
- package/plugin/lib/commonjs/utils/logger.js +35 -0
- package/plugin/lib/commonjs/utils/logger.js.map +1 -0
- package/plugin/lib/commonjs/utils/validation.js +68 -25
- package/plugin/lib/commonjs/utils/validation.js.map +1 -1
- package/plugin/lib/commonjs/utils/xcode.js +2 -1
- package/plugin/lib/commonjs/utils/xcode.js.map +1 -1
- package/plugin/lib/module/android/withAndroidManifestUpdates.js +6 -4
- package/plugin/lib/module/android/withAndroidManifestUpdates.js.map +1 -1
- package/plugin/lib/module/android/withAppGoogleServices.js +2 -1
- package/plugin/lib/module/android/withAppGoogleServices.js.map +1 -1
- package/plugin/lib/module/android/withCIOAndroid.js +17 -11
- package/plugin/lib/module/android/withCIOAndroid.js.map +1 -1
- package/plugin/lib/module/android/withGistMavenRepository.js +2 -1
- package/plugin/lib/module/android/withGistMavenRepository.js.map +1 -1
- package/plugin/lib/module/android/withGoogleServicesJSON.js +4 -3
- package/plugin/lib/module/android/withGoogleServicesJSON.js.map +1 -1
- package/plugin/lib/module/android/withMainApplicationModifications.js +2 -1
- package/plugin/lib/module/android/withMainApplicationModifications.js.map +1 -1
- package/plugin/lib/module/helpers/native-files/ios/CustomerIOSDKInitializer.swift +10 -4
- package/plugin/lib/module/helpers/utils/fileManagement.js +6 -5
- package/plugin/lib/module/helpers/utils/fileManagement.js.map +1 -1
- package/plugin/lib/module/helpers/utils/injectCIOPodfileCode.js +2 -1
- package/plugin/lib/module/helpers/utils/injectCIOPodfileCode.js.map +1 -1
- package/plugin/lib/module/helpers/utils/patchPluginNativeCode.js +5 -1
- package/plugin/lib/module/helpers/utils/patchPluginNativeCode.js.map +1 -1
- package/plugin/lib/module/index.js +3 -12
- package/plugin/lib/module/index.js.map +1 -1
- package/plugin/lib/module/ios/withAppDelegateModifications.js +2 -1
- package/plugin/lib/module/ios/withAppDelegateModifications.js.map +1 -1
- package/plugin/lib/module/ios/withCIOIos.js +7 -3
- package/plugin/lib/module/ios/withCIOIos.js.map +1 -1
- package/plugin/lib/module/ios/withCIOIosSwift.js +11 -10
- package/plugin/lib/module/ios/withCIOIosSwift.js.map +1 -1
- package/plugin/lib/module/ios/withGoogleServicesJsonFile.js +8 -7
- package/plugin/lib/module/ios/withGoogleServicesJsonFile.js.map +1 -1
- package/plugin/lib/module/ios/withNotificationsXcodeProject.js +29 -23
- package/plugin/lib/module/ios/withNotificationsXcodeProject.js.map +1 -1
- package/plugin/lib/module/utils/android.js +2 -1
- package/plugin/lib/module/utils/android.js.map +1 -1
- package/plugin/lib/module/utils/config.js +4 -2
- package/plugin/lib/module/utils/config.js.map +1 -1
- package/plugin/lib/module/utils/logger.js +29 -0
- package/plugin/lib/module/utils/logger.js.map +1 -0
- package/plugin/lib/module/utils/validation.js +68 -27
- package/plugin/lib/module/utils/validation.js.map +1 -1
- package/plugin/lib/module/utils/xcode.js +2 -1
- package/plugin/lib/module/utils/xcode.js.map +1 -1
- package/plugin/lib/typescript/android/withCIOAndroid.d.ts +1 -1
- package/plugin/lib/typescript/ios/withCIOIos.d.ts +1 -1
- package/plugin/lib/typescript/ios/withCIOIosSwift.d.ts +1 -1
- package/plugin/lib/typescript/utils/logger.d.ts +8 -0
- package/plugin/lib/typescript/utils/validation.d.ts +6 -3
- package/plugin/src/android/withAndroidManifestUpdates.ts +5 -4
- package/plugin/src/android/withAppGoogleServices.ts +2 -1
- package/plugin/src/android/withCIOAndroid.ts +18 -12
- package/plugin/src/android/withGistMavenRepository.ts +3 -2
- package/plugin/src/android/withGoogleServicesJSON.ts +4 -3
- package/plugin/src/android/withMainApplicationModifications.ts +2 -1
- package/plugin/src/helpers/native-files/ios/CustomerIOSDKInitializer.swift +10 -4
- package/plugin/src/helpers/utils/fileManagement.ts +10 -9
- package/plugin/src/helpers/utils/injectCIOPodfileCode.ts +2 -1
- package/plugin/src/helpers/utils/patchPluginNativeCode.ts +6 -1
- package/plugin/src/index.ts +3 -13
- package/plugin/src/ios/withAppDelegateModifications.ts +2 -1
- package/plugin/src/ios/withCIOIos.ts +12 -8
- package/plugin/src/ios/withCIOIosSwift.ts +15 -14
- package/plugin/src/ios/withGoogleServicesJsonFile.ts +8 -7
- package/plugin/src/ios/withNotificationsXcodeProject.ts +31 -35
- package/plugin/src/utils/android.ts +2 -1
- package/plugin/src/utils/config.ts +3 -2
- package/plugin/src/utils/logger.ts +37 -0
- package/plugin/src/utils/validation.ts +96 -32
- package/plugin/src/utils/xcode.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_configPlugins","require","_Paths","_ios","_codeInjection","_fileManagement","_utils","addImport","stringContents","appName","importRegex","addedImport","getImportSnippet","match","endOfMatchIndex","index","undefined","length","injectCodeByLineNumber","addNotificationHandlerDeclaration","injectCodeByMultiLineRegex","CIO_APPDELEGATEDECLARATION_REGEX","CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET","addNotificationConfiguration","injectCodeBeforeMultiLineRegex","CIO_DIDFINISHLAUNCHINGMETHOD_REGEX","CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET","addInitializeNativeCioSdk","CIO_INITIALIZECIOSDK_SNIPPET","addHandleDeeplinkInKilledStateConfiguration","regex","CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET","addDidFailToRegisterForRemoteNotificationsWithError","injectCodeByMultiLineRegexAndReplaceLine","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET","addDidRegisterForRemoteNotificationsWithDeviceToken","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET","addExpoNotificationsHeaderModification","addFirebaseDelegateForwardDeclarationIfNeeded","addAppdelegateHeaderModification","replace","CIO_APPDELEGATEHEADER_REGEX","interfaceDeclaration","_groupedDelegates","existingDelegates","includes","CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET","CIO_APPDELEGATEHEADER_IMPORT_SNIPPET","trim","addHandleDeeplinkInKilledState","matchRegexExists","CIO_DEEPLINK_COMMENT_REGEX","snippet","CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX","CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX","CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET","CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET","replaceCodeByRegex","withAppDelegateModifications","configOuter","props","withAppDelegate","config","modResults","contents","RegExp","modRequest","projectName","_props$pushNotificati","_props$pushNotificati2","headerPath","getAppDelegateHeaderFilePath","projectRoot","headerContent","FileManagement","read","write","pushNotification","disableNotificationRegistration","handleDeeplinkInKilledState","isFcmPushProvider","console","log","exports"],"sources":["withAppDelegateModifications.ts"],"sourcesContent":["import type { ConfigPlugin } from '@expo/config-plugins';\nimport { withAppDelegate } from '@expo/config-plugins';\nimport { getAppDelegateHeaderFilePath } from '@expo/config-plugins/build/ios/Paths';\n\nimport {\n CIO_APPDELEGATEDECLARATION_REGEX,\n CIO_APPDELEGATEHEADER_IMPORT_SNIPPET,\n CIO_APPDELEGATEHEADER_REGEX,\n CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET,\n CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET,\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET,\n CIO_DEEPLINK_COMMENT_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET,\n CIO_INITIALIZECIOSDK_SNIPPET,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET,\n} from '../helpers/constants/ios';\nimport {\n injectCodeBeforeMultiLineRegex,\n injectCodeByLineNumber,\n injectCodeByMultiLineRegex,\n injectCodeByMultiLineRegexAndReplaceLine,\n matchRegexExists,\n replaceCodeByRegex,\n} from '../helpers/utils/codeInjection';\nimport { FileManagement } from '../helpers/utils/fileManagement';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { isFcmPushProvider } from './utils';\n\nconst addImport = (stringContents: string, appName: string) => {\n const importRegex = /^(#import .*)\\n/gm;\n const addedImport = getImportSnippet(appName);\n\n const match = stringContents.match(importRegex);\n let endOfMatchIndex: number;\n if (!match || match.index === undefined) {\n // No imports found, just add to start of file:\n endOfMatchIndex = 0;\n } else {\n // Add after first import:\n endOfMatchIndex = match.index + match[0].length;\n }\n\n stringContents = injectCodeByLineNumber(\n stringContents,\n endOfMatchIndex,\n addedImport\n );\n\n return stringContents;\n};\n\nconst addNotificationHandlerDeclaration = (stringContents: string) => {\n stringContents = injectCodeByMultiLineRegex(\n stringContents,\n CIO_APPDELEGATEDECLARATION_REGEX,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addNotificationConfiguration = (stringContents: string) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addInitializeNativeCioSdk = (stringContents: string) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_INITIALIZECIOSDK_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addHandleDeeplinkInKilledStateConfiguration = (\n stringContents: string,\n regex: RegExp\n) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n regex,\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addDidFailToRegisterForRemoteNotificationsWithError = (\n stringContents: string\n) => {\n stringContents = injectCodeByMultiLineRegexAndReplaceLine(\n stringContents,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addDidRegisterForRemoteNotificationsWithDeviceToken = (\n stringContents: string\n) => {\n stringContents = injectCodeByMultiLineRegexAndReplaceLine(\n stringContents,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET\n );\n\n return stringContents;\n};\n\n// Adds required import for Expo Notifications package in AppDelegate.\n// Required to call functions from the package.\nconst addExpoNotificationsHeaderModification = (stringContents: string) => {\n stringContents = injectCodeByLineNumber(\n stringContents,\n 0,\n `\n#if __has_include(<EXNotifications/EXNotificationCenterDelegate.h>)\n#import <EXNotifications/EXNotificationCenterDelegate.h>\n#endif\n`\n );\n\n return stringContents;\n};\n\nconst addFirebaseDelegateForwardDeclarationIfNeeded = (\n stringContents: string\n) => {\n stringContents = injectCodeByLineNumber(\n stringContents,\n 0,\n '@protocol FIRMessagingDelegate;'\n );\n\n return stringContents;\n};\n\nconst addAppdelegateHeaderModification = (stringContents: string) => {\n // Add UNUserNotificationCenterDelegate if needed\n stringContents = stringContents.replace(\n CIO_APPDELEGATEHEADER_REGEX,\n (match, interfaceDeclaration, _groupedDelegates, existingDelegates) => {\n if (\n existingDelegates &&\n existingDelegates.includes(\n CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET\n )\n ) {\n // The AppDelegate declaration already includes UNUserNotificationCenterDelegate, so we don't need to modify it\n return match;\n } else if (existingDelegates) {\n // Other delegates exist, append ours\n return `${CIO_APPDELEGATEHEADER_IMPORT_SNIPPET}\n${interfaceDeclaration}<${existingDelegates}, ${CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET}>\n`;\n } else {\n // No delegates exist, add ours\n return `${CIO_APPDELEGATEHEADER_IMPORT_SNIPPET}\n${interfaceDeclaration.trim()} <${CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET}>\n`;\n }\n }\n );\n\n return stringContents;\n};\n\nconst addHandleDeeplinkInKilledState = (stringContents: string) => {\n // Find if the deep link code snippet is already present\n if (matchRegexExists(stringContents, CIO_DEEPLINK_COMMENT_REGEX)) {\n return stringContents;\n }\n\n // Check if the app delegate is using RCTBridge or LaunchOptions\n let snippet;\n let regex = CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX;\n if (\n matchRegexExists(\n stringContents,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX\n )\n ) {\n snippet = CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET;\n regex = CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX;\n } else if (\n matchRegexExists(\n stringContents,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX\n )\n ) {\n snippet = CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET;\n }\n // Add code only if the app delegate is using RCTBridge or LaunchOptions\n if (snippet !== undefined) {\n stringContents = addHandleDeeplinkInKilledStateConfiguration(\n stringContents,\n regex\n );\n stringContents = replaceCodeByRegex(stringContents, regex, snippet);\n }\n return stringContents;\n};\n\nexport const withAppDelegateModifications: ConfigPlugin<\n CustomerIOPluginOptionsIOS\n> = (configOuter, props) => {\n return withAppDelegate(configOuter, async (config) => {\n let stringContents = config.modResults.contents;\n const regex = new RegExp(\n `#import <${config.modRequest.projectName}-Swift.h>`\n );\n const match = stringContents.match(regex);\n\n if (!match) {\n const headerPath = getAppDelegateHeaderFilePath(\n config.modRequest.projectRoot\n );\n let headerContent = await FileManagement.read(headerPath);\n headerContent = addAppdelegateHeaderModification(headerContent);\n FileManagement.write(headerPath, headerContent);\n\n stringContents = addImport(\n stringContents,\n config.modRequest.projectName as string\n );\n stringContents = addNotificationHandlerDeclaration(stringContents);\n\n // unless this property is explicity set to true, push notification\n // registration will be added to the AppDelegate\n if (props.pushNotification?.disableNotificationRegistration !== true) {\n stringContents = addNotificationConfiguration(stringContents);\n }\n\n stringContents = addInitializeNativeCioSdk(stringContents);\n\n if (props.pushNotification?.handleDeeplinkInKilledState === true) {\n stringContents = addHandleDeeplinkInKilledState(stringContents);\n }\n\n stringContents =\n addDidFailToRegisterForRemoteNotificationsWithError(stringContents);\n stringContents =\n addDidRegisterForRemoteNotificationsWithDeviceToken(stringContents);\n\n if (isFcmPushProvider(props)) {\n stringContents =\n addFirebaseDelegateForwardDeclarationIfNeeded(stringContents);\n }\n\n stringContents = addExpoNotificationsHeaderModification(stringContents);\n\n config.modResults.contents = stringContents;\n } else {\n console.log('Customerio AppDelegate changes already exist. Skipping...');\n }\n\n return config;\n });\n};\nfunction getImportSnippet(appName: string) {\n return `\n// Add swift bridge imports\n#import <ExpoModulesCore-Swift.h>\n#import <${appName}-Swift.h>\n `;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_configPlugins","require","_Paths","_ios","_codeInjection","_fileManagement","_logger","_utils","addImport","stringContents","appName","importRegex","addedImport","getImportSnippet","match","endOfMatchIndex","index","undefined","length","injectCodeByLineNumber","addNotificationHandlerDeclaration","injectCodeByMultiLineRegex","CIO_APPDELEGATEDECLARATION_REGEX","CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET","addNotificationConfiguration","injectCodeBeforeMultiLineRegex","CIO_DIDFINISHLAUNCHINGMETHOD_REGEX","CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET","addInitializeNativeCioSdk","CIO_INITIALIZECIOSDK_SNIPPET","addHandleDeeplinkInKilledStateConfiguration","regex","CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET","addDidFailToRegisterForRemoteNotificationsWithError","injectCodeByMultiLineRegexAndReplaceLine","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET","addDidRegisterForRemoteNotificationsWithDeviceToken","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET","addExpoNotificationsHeaderModification","addFirebaseDelegateForwardDeclarationIfNeeded","addAppdelegateHeaderModification","replace","CIO_APPDELEGATEHEADER_REGEX","interfaceDeclaration","_groupedDelegates","existingDelegates","includes","CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET","CIO_APPDELEGATEHEADER_IMPORT_SNIPPET","trim","addHandleDeeplinkInKilledState","matchRegexExists","CIO_DEEPLINK_COMMENT_REGEX","snippet","CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX","CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX","CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET","CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET","replaceCodeByRegex","withAppDelegateModifications","configOuter","props","withAppDelegate","config","modResults","contents","RegExp","modRequest","projectName","_props$pushNotificati","_props$pushNotificati2","headerPath","getAppDelegateHeaderFilePath","projectRoot","headerContent","FileManagement","read","write","pushNotification","disableNotificationRegistration","handleDeeplinkInKilledState","isFcmPushProvider","logger","info","exports"],"sources":["withAppDelegateModifications.ts"],"sourcesContent":["import type { ConfigPlugin } from '@expo/config-plugins';\nimport { withAppDelegate } from '@expo/config-plugins';\nimport { getAppDelegateHeaderFilePath } from '@expo/config-plugins/build/ios/Paths';\n\nimport {\n CIO_APPDELEGATEDECLARATION_REGEX,\n CIO_APPDELEGATEHEADER_IMPORT_SNIPPET,\n CIO_APPDELEGATEHEADER_REGEX,\n CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET,\n CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET,\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET,\n CIO_DEEPLINK_COMMENT_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET,\n CIO_INITIALIZECIOSDK_SNIPPET,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET,\n} from '../helpers/constants/ios';\nimport {\n injectCodeBeforeMultiLineRegex,\n injectCodeByLineNumber,\n injectCodeByMultiLineRegex,\n injectCodeByMultiLineRegexAndReplaceLine,\n matchRegexExists,\n replaceCodeByRegex,\n} from '../helpers/utils/codeInjection';\nimport { FileManagement } from '../helpers/utils/fileManagement';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { logger } from '../utils/logger';\nimport { isFcmPushProvider } from './utils';\n\nconst addImport = (stringContents: string, appName: string) => {\n const importRegex = /^(#import .*)\\n/gm;\n const addedImport = getImportSnippet(appName);\n\n const match = stringContents.match(importRegex);\n let endOfMatchIndex: number;\n if (!match || match.index === undefined) {\n // No imports found, just add to start of file:\n endOfMatchIndex = 0;\n } else {\n // Add after first import:\n endOfMatchIndex = match.index + match[0].length;\n }\n\n stringContents = injectCodeByLineNumber(\n stringContents,\n endOfMatchIndex,\n addedImport\n );\n\n return stringContents;\n};\n\nconst addNotificationHandlerDeclaration = (stringContents: string) => {\n stringContents = injectCodeByMultiLineRegex(\n stringContents,\n CIO_APPDELEGATEDECLARATION_REGEX,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addNotificationConfiguration = (stringContents: string) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addInitializeNativeCioSdk = (stringContents: string) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_INITIALIZECIOSDK_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addHandleDeeplinkInKilledStateConfiguration = (\n stringContents: string,\n regex: RegExp\n) => {\n stringContents = injectCodeBeforeMultiLineRegex(\n stringContents,\n regex,\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addDidFailToRegisterForRemoteNotificationsWithError = (\n stringContents: string\n) => {\n stringContents = injectCodeByMultiLineRegexAndReplaceLine(\n stringContents,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET\n );\n\n return stringContents;\n};\n\nconst addDidRegisterForRemoteNotificationsWithDeviceToken = (\n stringContents: string\n) => {\n stringContents = injectCodeByMultiLineRegexAndReplaceLine(\n stringContents,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET\n );\n\n return stringContents;\n};\n\n// Adds required import for Expo Notifications package in AppDelegate.\n// Required to call functions from the package.\nconst addExpoNotificationsHeaderModification = (stringContents: string) => {\n stringContents = injectCodeByLineNumber(\n stringContents,\n 0,\n `\n#if __has_include(<EXNotifications/EXNotificationCenterDelegate.h>)\n#import <EXNotifications/EXNotificationCenterDelegate.h>\n#endif\n`\n );\n\n return stringContents;\n};\n\nconst addFirebaseDelegateForwardDeclarationIfNeeded = (\n stringContents: string\n) => {\n stringContents = injectCodeByLineNumber(\n stringContents,\n 0,\n '@protocol FIRMessagingDelegate;'\n );\n\n return stringContents;\n};\n\nconst addAppdelegateHeaderModification = (stringContents: string) => {\n // Add UNUserNotificationCenterDelegate if needed\n stringContents = stringContents.replace(\n CIO_APPDELEGATEHEADER_REGEX,\n (match, interfaceDeclaration, _groupedDelegates, existingDelegates) => {\n if (\n existingDelegates &&\n existingDelegates.includes(\n CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET\n )\n ) {\n // The AppDelegate declaration already includes UNUserNotificationCenterDelegate, so we don't need to modify it\n return match;\n } else if (existingDelegates) {\n // Other delegates exist, append ours\n return `${CIO_APPDELEGATEHEADER_IMPORT_SNIPPET}\n${interfaceDeclaration}<${existingDelegates}, ${CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET}>\n`;\n } else {\n // No delegates exist, add ours\n return `${CIO_APPDELEGATEHEADER_IMPORT_SNIPPET}\n${interfaceDeclaration.trim()} <${CIO_APPDELEGATEHEADER_USER_NOTIFICATION_CENTER_SNIPPET}>\n`;\n }\n }\n );\n\n return stringContents;\n};\n\nconst addHandleDeeplinkInKilledState = (stringContents: string) => {\n // Find if the deep link code snippet is already present\n if (matchRegexExists(stringContents, CIO_DEEPLINK_COMMENT_REGEX)) {\n return stringContents;\n }\n\n // Check if the app delegate is using RCTBridge or LaunchOptions\n let snippet;\n let regex = CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX;\n if (\n matchRegexExists(\n stringContents,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX\n )\n ) {\n snippet = CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET;\n regex = CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX;\n } else if (\n matchRegexExists(\n stringContents,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX\n )\n ) {\n snippet = CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET;\n }\n // Add code only if the app delegate is using RCTBridge or LaunchOptions\n if (snippet !== undefined) {\n stringContents = addHandleDeeplinkInKilledStateConfiguration(\n stringContents,\n regex\n );\n stringContents = replaceCodeByRegex(stringContents, regex, snippet);\n }\n return stringContents;\n};\n\nexport const withAppDelegateModifications: ConfigPlugin<\n CustomerIOPluginOptionsIOS\n> = (configOuter, props) => {\n return withAppDelegate(configOuter, async (config) => {\n let stringContents = config.modResults.contents;\n const regex = new RegExp(\n `#import <${config.modRequest.projectName}-Swift.h>`\n );\n const match = stringContents.match(regex);\n\n if (!match) {\n const headerPath = getAppDelegateHeaderFilePath(\n config.modRequest.projectRoot\n );\n let headerContent = await FileManagement.read(headerPath);\n headerContent = addAppdelegateHeaderModification(headerContent);\n FileManagement.write(headerPath, headerContent);\n\n stringContents = addImport(\n stringContents,\n config.modRequest.projectName as string\n );\n stringContents = addNotificationHandlerDeclaration(stringContents);\n\n // unless this property is explicity set to true, push notification\n // registration will be added to the AppDelegate\n if (props.pushNotification?.disableNotificationRegistration !== true) {\n stringContents = addNotificationConfiguration(stringContents);\n }\n\n stringContents = addInitializeNativeCioSdk(stringContents);\n\n if (props.pushNotification?.handleDeeplinkInKilledState === true) {\n stringContents = addHandleDeeplinkInKilledState(stringContents);\n }\n\n stringContents =\n addDidFailToRegisterForRemoteNotificationsWithError(stringContents);\n stringContents =\n addDidRegisterForRemoteNotificationsWithDeviceToken(stringContents);\n\n if (isFcmPushProvider(props)) {\n stringContents =\n addFirebaseDelegateForwardDeclarationIfNeeded(stringContents);\n }\n\n stringContents = addExpoNotificationsHeaderModification(stringContents);\n\n config.modResults.contents = stringContents;\n } else {\n logger.info('Customerio AppDelegate changes already exist. Skipping...');\n }\n\n return config;\n });\n};\nfunction getImportSnippet(appName: string) {\n return `\n// Add swift bridge imports\n#import <ExpoModulesCore-Swift.h>\n#import <${appName}-Swift.h>\n `;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.withCIOIos = withCIOIos;
|
|
7
7
|
var _config = require("../utils/config");
|
|
8
|
+
var _logger = require("../utils/logger");
|
|
8
9
|
var _utils = require("./utils");
|
|
9
10
|
var _withAppDelegateModifications = require("./withAppDelegateModifications");
|
|
10
11
|
var _withCIOIosSwift = require("./withCIOIosSwift");
|
|
@@ -14,7 +15,7 @@ var _withXcodeProject = require("./withXcodeProject");
|
|
|
14
15
|
function withCIOIos(config, sdkConfig, props) {
|
|
15
16
|
const isSwiftProject = (0, _utils.isExpoVersion53OrHigher)(config);
|
|
16
17
|
const platformConfig = mergeDeprecatedPropertiesAndLogWarnings(props);
|
|
17
|
-
if (platformConfig.pushNotification) {
|
|
18
|
+
if (platformConfig !== null && platformConfig !== void 0 && platformConfig.pushNotification) {
|
|
18
19
|
if (isSwiftProject) {
|
|
19
20
|
config = (0, _withCIOIosSwift.withCIOIosSwift)(config, sdkConfig, platformConfig);
|
|
20
21
|
} else {
|
|
@@ -45,6 +46,9 @@ const mergeDeprecatedPropertiesAndLogWarnings = props => {
|
|
|
45
46
|
// still available for backwards compatibility, but they will
|
|
46
47
|
// be removed in the future.
|
|
47
48
|
|
|
49
|
+
if (!props) {
|
|
50
|
+
return props;
|
|
51
|
+
}
|
|
48
52
|
const deprecatedTopLevelProperties = {
|
|
49
53
|
showPushAppInForeground: props.showPushAppInForeground,
|
|
50
54
|
autoTrackPushEvents: props.autoTrackPushEvents,
|
|
@@ -56,7 +60,7 @@ const mergeDeprecatedPropertiesAndLogWarnings = props => {
|
|
|
56
60
|
// loop over all the deprecated properties and log a warning if they are set
|
|
57
61
|
Object.entries(deprecatedTopLevelProperties).forEach(([key, value]) => {
|
|
58
62
|
if (value !== undefined) {
|
|
59
|
-
|
|
63
|
+
_logger.logger.warn(`The ios.${key} property is deprecated. Please use ios.pushNotification.${key} instead.`);
|
|
60
64
|
if (props.pushNotification === undefined) {
|
|
61
65
|
props.pushNotification = {};
|
|
62
66
|
}
|
|
@@ -67,7 +71,7 @@ const mergeDeprecatedPropertiesAndLogWarnings = props => {
|
|
|
67
71
|
[propKey]: value
|
|
68
72
|
};
|
|
69
73
|
} else {
|
|
70
|
-
|
|
74
|
+
_logger.logger.warn(`The ios.${key} property is deprecated. Since the value of ios.pushNotification.${key} is set, it will be used.`);
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_config","require","_utils","_withAppDelegateModifications","_withCIOIosSwift","_withGoogleServicesJsonFile","_withNotificationsXcodeProject","_withXcodeProject","withCIOIos","config","sdkConfig","props","isSwiftProject","isExpoVersion53OrHigher","platformConfig","mergeDeprecatedPropertiesAndLogWarnings","pushNotification","withCIOIosSwift","withAppDelegateModifications","env","mergeConfigWithEnvValues","withCioNotificationsXcodeProject","withCioXcodeProject","withGoogleServicesJsonFile","deprecatedTopLevelProperties","showPushAppInForeground","autoTrackPushEvents","handleDeeplinkInKilledState","disableNotificationRegistration","autoFetchDeviceToken","Object","entries","forEach","key","value","undefined","
|
|
1
|
+
{"version":3,"names":["_config","require","_logger","_utils","_withAppDelegateModifications","_withCIOIosSwift","_withGoogleServicesJsonFile","_withNotificationsXcodeProject","_withXcodeProject","withCIOIos","config","sdkConfig","props","isSwiftProject","isExpoVersion53OrHigher","platformConfig","mergeDeprecatedPropertiesAndLogWarnings","pushNotification","withCIOIosSwift","withAppDelegateModifications","env","mergeConfigWithEnvValues","withCioNotificationsXcodeProject","withCioXcodeProject","withGoogleServicesJsonFile","deprecatedTopLevelProperties","showPushAppInForeground","autoTrackPushEvents","handleDeeplinkInKilledState","disableNotificationRegistration","autoFetchDeviceToken","Object","entries","forEach","key","value","undefined","logger","warn","propKey"],"sources":["withCIOIos.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type {\n CustomerIOPluginOptionsIOS,\n CustomerIOPluginPushNotificationOptions,\n NativeSDKConfig,\n} from '../types/cio-types';\nimport { mergeConfigWithEnvValues } from '../utils/config';\nimport { logger } from '../utils/logger';\nimport { isExpoVersion53OrHigher } from './utils';\nimport { withAppDelegateModifications } from './withAppDelegateModifications';\nimport { withCIOIosSwift } from './withCIOIosSwift';\nimport { withGoogleServicesJsonFile } from './withGoogleServicesJsonFile';\nimport { withCioNotificationsXcodeProject } from './withNotificationsXcodeProject';\nimport { withCioXcodeProject } from './withXcodeProject';\n\nexport function withCIOIos(\n config: ExpoConfig,\n sdkConfig?: NativeSDKConfig,\n props?: CustomerIOPluginOptionsIOS,\n) {\n const isSwiftProject = isExpoVersion53OrHigher(config);\n const platformConfig = mergeDeprecatedPropertiesAndLogWarnings(props);\n\n if (platformConfig?.pushNotification) {\n if (isSwiftProject) {\n config = withCIOIosSwift(config, sdkConfig, platformConfig);\n } else {\n // Auto initialization is only supported in Swift projects (Expo SDK 53+)\n // Legacy Objective-C projects only support push notifications\n config = withAppDelegateModifications(config, platformConfig);\n }\n\n platformConfig.pushNotification.env = platformConfig.pushNotification.env\n || mergeConfigWithEnvValues(platformConfig, sdkConfig);\n config = withCioNotificationsXcodeProject(config, platformConfig);\n config = withCioXcodeProject(config, platformConfig);\n config = withGoogleServicesJsonFile(config, platformConfig);\n } else if (sdkConfig && isSwiftProject) {\n config = withCIOIosSwift(config, sdkConfig, platformConfig);\n }\n\n return config;\n}\n\n/** The basic purpose of this function is to centralize where we handle the deprecation\n by merging the deprecated properties into the new ios.pushNotification.* properties\n and logging a warning if they are set. This way, we can remove the deprecated properties\n from the top level of the ios object in the future, and update this function\n while the rest of the plugin code remains unchanged.\n*/\nconst mergeDeprecatedPropertiesAndLogWarnings = (\n props?: CustomerIOPluginOptionsIOS,\n): CustomerIOPluginOptionsIOS | undefined => {\n // The deprecatedTopLevelProperties maps the top level properties\n // that are deprecated to the new ios.pushNotification.* properties\n // that should be used instead. The deprecated properties are\n // still available for backwards compatibility, but they will\n // be removed in the future.\n\n if (!props) {\n return props\n }\n\n const deprecatedTopLevelProperties = {\n showPushAppInForeground: props.showPushAppInForeground,\n autoTrackPushEvents: props.autoTrackPushEvents,\n handleDeeplinkInKilledState: props.handleDeeplinkInKilledState,\n disableNotificationRegistration: props.disableNotificationRegistration,\n autoFetchDeviceToken: props.autoFetchDeviceToken,\n };\n\n // loop over all the deprecated properties and log a warning if they are set\n Object.entries(deprecatedTopLevelProperties).forEach(([key, value]) => {\n if (value !== undefined) {\n logger.warn(\n `The ios.${key} property is deprecated. Please use ios.pushNotification.${key} instead.`\n );\n\n if (props.pushNotification === undefined) {\n props.pushNotification = {} as CustomerIOPluginPushNotificationOptions;\n }\n const propKey = key as keyof CustomerIOPluginPushNotificationOptions;\n if (props.pushNotification[propKey] === undefined) {\n props.pushNotification = {\n ...props.pushNotification,\n [propKey]: value,\n };\n } else {\n logger.warn(\n `The ios.${key} property is deprecated. Since the value of ios.pushNotification.${key} is set, it will be used.`\n );\n }\n }\n });\n\n return props;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,6 +11,7 @@ var _ios = require("../helpers/constants/ios");
|
|
|
11
11
|
var _codeInjection = require("../helpers/utils/codeInjection");
|
|
12
12
|
var _fileManagement = require("../helpers/utils/fileManagement");
|
|
13
13
|
var _patchPluginNativeCode = require("../helpers/utils/patchPluginNativeCode");
|
|
14
|
+
var _logger = require("../utils/logger");
|
|
14
15
|
var _plugin = require("../utils/plugin");
|
|
15
16
|
var _xcode = require("../utils/xcode");
|
|
16
17
|
var _utils = require("./utils");
|
|
@@ -26,7 +27,7 @@ const copyAndConfigureAppDelegateHandler = (config, sdkConfig, props) => {
|
|
|
26
27
|
// Destination path in the iOS project
|
|
27
28
|
const projectName = config.modRequest.projectName || '';
|
|
28
29
|
if (!projectName) {
|
|
29
|
-
|
|
30
|
+
_logger.logger.warn('Project name is undefined, cannot copy CustomerIO files');
|
|
30
31
|
return config;
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -35,7 +36,7 @@ const copyAndConfigureAppDelegateHandler = (config, sdkConfig, props) => {
|
|
|
35
36
|
const projectRoot = config.modRequest.projectRoot;
|
|
36
37
|
const iosProjectRoot = _path.default.join(projectRoot, 'ios');
|
|
37
38
|
const group = (0, _xcode.getOrCreateCustomerIOGroup)(xcodeProject, projectName);
|
|
38
|
-
if (props.pushNotification) {
|
|
39
|
+
if (props !== null && props !== void 0 && props.pushNotification) {
|
|
39
40
|
// Copy CioSdkAppDelegateHandler.swift for full push notification + auto-init support
|
|
40
41
|
copyAndConfigurePushAppDelegateHandler({
|
|
41
42
|
xcodeProject,
|
|
@@ -134,7 +135,7 @@ const withCIOIosSwift = (configOuter, sdkConfig, props) => {
|
|
|
134
135
|
});
|
|
135
136
|
|
|
136
137
|
// Modify the AppDelegate based on configuration
|
|
137
|
-
if (props.pushNotification) {
|
|
138
|
+
if (props !== null && props !== void 0 && props.pushNotification) {
|
|
138
139
|
// With push notifications: delegate to CioSdkAppDelegateHandler for both push and auto-init
|
|
139
140
|
return (0, _configPlugins.withAppDelegate)(configOuter, async config => {
|
|
140
141
|
return modifyAppDelegateWithPushAppDelegateHandler(config, props);
|
|
@@ -159,7 +160,7 @@ const modifyAppDelegateWithPushAppDelegateHandler = (config, props) => {
|
|
|
159
160
|
|
|
160
161
|
// Check if modifications have already been applied
|
|
161
162
|
if (appDelegateContent.includes(CIO_SDK_APP_DELEGATE_HANDLER_CLASS)) {
|
|
162
|
-
|
|
163
|
+
_logger.logger.info('CustomerIO Swift AppDelegate changes already exist. Skipping...');
|
|
163
164
|
return config;
|
|
164
165
|
}
|
|
165
166
|
|
|
@@ -193,7 +194,7 @@ const modifyAppDelegateWithNativeSDKInitializer = (config
|
|
|
193
194
|
|
|
194
195
|
// Check if modifications have already been applied
|
|
195
196
|
if (appDelegateContent.includes(_ios.CIO_NATIVE_SDK_INITIALIZE_CALL)) {
|
|
196
|
-
|
|
197
|
+
_logger.logger.info('CustomerIO Swift AppDelegate changes already exist. Skipping...');
|
|
197
198
|
return config;
|
|
198
199
|
}
|
|
199
200
|
|
|
@@ -223,7 +224,7 @@ const addHandlerPropertyDeclaration = content => {
|
|
|
223
224
|
const classDeclarationRegex = /class\s+AppDelegate\s*:\s*.*\s*{/;
|
|
224
225
|
const match = content.match(classDeclarationRegex);
|
|
225
226
|
if (!match) {
|
|
226
|
-
|
|
227
|
+
_logger.logger.warn('Could not find AppDelegate class declaration');
|
|
227
228
|
return content;
|
|
228
229
|
}
|
|
229
230
|
const position = (match.index ?? 0) + match[0].length;
|
|
@@ -240,7 +241,7 @@ const modifyDidFinishLaunchingWithOptions = (content, codeToInject) => {
|
|
|
240
241
|
const returnStatementRegex = /return\s+super\.application\s*\(\s*application\s*,\s*didFinishLaunchingWithOptions\s*:\s*launchOptions\s*\)/;
|
|
241
242
|
const returnStatementMatch = content.match(returnStatementRegex);
|
|
242
243
|
if (!returnStatementMatch) {
|
|
243
|
-
|
|
244
|
+
_logger.logger.warn('Could not find return statement with super.application in didFinishLaunchingWithOptions');
|
|
244
245
|
return content;
|
|
245
246
|
}
|
|
246
247
|
|
|
@@ -276,7 +277,7 @@ const addDidRegisterForRemoteNotificationsWithDeviceToken = content => {
|
|
|
276
277
|
const classEndRegex = /^}(\s*$|\s*\/\/)/m;
|
|
277
278
|
const classEndMatch = content.match(classEndRegex);
|
|
278
279
|
if (!classEndMatch) {
|
|
279
|
-
|
|
280
|
+
_logger.logger.warn('Could not find end of AppDelegate class');
|
|
280
281
|
return content;
|
|
281
282
|
}
|
|
282
283
|
|
|
@@ -313,7 +314,7 @@ const addDidFailToRegisterForRemoteNotificationsWithError = content => {
|
|
|
313
314
|
const classEndRegex = /^}(\s*$|\s*\/\/)/m;
|
|
314
315
|
const classEndMatch = content.match(classEndRegex);
|
|
315
316
|
if (!classEndMatch) {
|
|
316
|
-
|
|
317
|
+
_logger.logger.warn('Could not find end of AppDelegate class');
|
|
317
318
|
return content;
|
|
318
319
|
}
|
|
319
320
|
|
|
@@ -339,7 +340,7 @@ const addHandleDeeplinkInKilledState = content => {
|
|
|
339
340
|
const returnStatementRegex = /return\s+super\.application\s*\(\s*application\s*,\s*didFinishLaunchingWithOptions\s*:\s*launchOptions\s*\)/;
|
|
340
341
|
const returnStatementMatch = content.match(returnStatementRegex);
|
|
341
342
|
if (!returnStatementMatch) {
|
|
342
|
-
|
|
343
|
+
_logger.logger.warn('Could not find return statement with launchOptions');
|
|
343
344
|
return content;
|
|
344
345
|
}
|
|
345
346
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_configPlugins","require","_path","_interopRequireDefault","_common","_ios","_codeInjection","_fileManagement","_patchPluginNativeCode","_plugin","_xcode","_utils","e","__esModule","default","CIO_SDK_APP_DELEGATE_HANDLER_CLASS","CIO_SDK_APP_DELEGATE_HANDLER_FILENAME","copyAndConfigureAppDelegateHandler","config","sdkConfig","props","projectName","modRequest","console","warn","xcodeProject","modResults","projectRoot","iosProjectRoot","path","join","group","getOrCreateCustomerIOGroup","pushNotification","copyAndConfigurePushAppDelegateHandler","copyAndConfigureNativeSDKInitializer","_props$pushNotificati","_props$pushNotificati2","_props$pushNotificati3","_props$pushNotificati4","useFcm","isFcmPushProvider","handlerSourcePath","getIosNativeFilesPath","handlerDestPath","FileManagement","copyFile","addSourceFile","handlerFileContent","readFile","disableNotificationRegistration","snippet","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2","replaceCodeByRegex","CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER","autoTrackPushEvents","toString","autoFetchDeviceToken","showPushAppInForeground","replace","CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX","CIO_NATIVE_SDK_INITIALIZE_SNIPPET","writeFile","filename","sourcePath","copyFileToXcode","sourceFilePath","targetFileName","transform","content","patchNativeSDKInitializer","PLATFORM","IOS","customerIOGroup","withCIOIosSwift","configOuter","withXcodeProject","withAppDelegate","modifyAppDelegateWithPushAppDelegateHandler","modifyAppDelegateWithNativeSDKInitializer","exports","_props$pushNotificati5","appDelegateContent","contents","includes","log","modifiedContent","addHandlerPropertyDeclaration","modifyDidFinishLaunchingWithOptions","addDidRegisterForRemoteNotificationsWithDeviceToken","addDidFailToRegisterForRemoteNotificationsWithError","handleDeeplinkInKilledState","addHandleDeeplinkInKilledState","CIO_NATIVE_SDK_INITIALIZE_CALL","methodExistsInAppDelegate","methodSignature","classDeclarationRegex","match","position","index","length","substring","codeToInject","returnStatementRegex","returnStatementMatch","insertPosition","methodRegex","methodContent","openBraceIndex","indexOf","modifiedMethod","classEndRegex","classEndMatch","deepLinkMarker","modifiedReturnStatement","replacementCode","CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET"],"sources":["withCIOIosSwift.ts"],"sourcesContent":["import type {\n ExportedConfigWithProps,\n XcodeProject,\n} from '@expo/config-plugins';\nimport { withAppDelegate, withXcodeProject } from '@expo/config-plugins';\nimport type { ExpoConfig } from '@expo/config-types';\nimport path from 'path';\nimport { PLATFORM } from '../helpers/constants/common';\nimport {\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET,\n CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX,\n CIO_NATIVE_SDK_INITIALIZE_CALL,\n CIO_NATIVE_SDK_INITIALIZE_SNIPPET,\n CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2,\n CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER,\n} from '../helpers/constants/ios';\nimport { replaceCodeByRegex } from '../helpers/utils/codeInjection';\nimport { FileManagement } from '../helpers/utils/fileManagement';\nimport { patchNativeSDKInitializer } from '../helpers/utils/patchPluginNativeCode';\nimport type { CustomerIOPluginOptionsIOS, NativeSDKConfig } from '../types/cio-types';\nimport { getIosNativeFilesPath } from '../utils/plugin';\nimport { copyFileToXcode, getOrCreateCustomerIOGroup } from '../utils/xcode';\nimport { isFcmPushProvider } from './utils';\n\n// Constants\nconst CIO_SDK_APP_DELEGATE_HANDLER_CLASS = 'CioSdkAppDelegateHandler';\nconst CIO_SDK_APP_DELEGATE_HANDLER_FILENAME = `${CIO_SDK_APP_DELEGATE_HANDLER_CLASS}.swift`;\n\n/**\n * Copy and configure the CioSdkAppDelegateHandler.swift file\n */\nconst copyAndConfigureAppDelegateHandler = (\n config: ExportedConfigWithProps<XcodeProject>,\n sdkConfig: NativeSDKConfig | undefined,\n props: CustomerIOPluginOptionsIOS,\n): ExportedConfigWithProps<XcodeProject> => {\n // Destination path in the iOS project\n const projectName = config.modRequest.projectName || '';\n if (!projectName) {\n console.warn(\n 'Project name is undefined, cannot copy CustomerIO files'\n );\n return config;\n }\n\n // Add files to the Xcode project\n const xcodeProject = config.modResults;\n const projectRoot = config.modRequest.projectRoot;\n const iosProjectRoot = path.join(projectRoot, 'ios');\n\n const group = getOrCreateCustomerIOGroup(xcodeProject, projectName);\n if (props.pushNotification) {\n // Copy CioSdkAppDelegateHandler.swift for full push notification + auto-init support\n copyAndConfigurePushAppDelegateHandler({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n props,\n });\n } else if (sdkConfig) {\n // Copy only CustomerIOSDKInitializer.swift for auto-init without push notifications\n copyAndConfigureNativeSDKInitializer({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n });\n }\n\n return config;\n};\n\nconst copyAndConfigurePushAppDelegateHandler = ({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n props,\n}: {\n xcodeProject: XcodeProject;\n group: XcodeProject['pbxCreateGroup'];\n iosProjectRoot: string;\n projectName: string;\n sdkConfig: NativeSDKConfig | undefined;\n props: CustomerIOPluginOptionsIOS;\n}) => {\n const useFcm = isFcmPushProvider(props);\n\n // Source path for the handler file\n const handlerSourcePath = path.join(\n getIosNativeFilesPath(),\n useFcm ? 'fcm' : 'apn',\n CIO_SDK_APP_DELEGATE_HANDLER_FILENAME\n );\n\n const handlerDestPath = path.join(\n iosProjectRoot,\n projectName,\n CIO_SDK_APP_DELEGATE_HANDLER_FILENAME\n );\n\n FileManagement.copyFile(handlerSourcePath, handlerDestPath);\n\n // Add the file to the Xcode project\n xcodeProject.addSourceFile(\n `${projectName}/${CIO_SDK_APP_DELEGATE_HANDLER_FILENAME}`,\n null,\n group\n );\n\n let handlerFileContent = FileManagement.readFile(handlerDestPath);\n\n const disableNotificationRegistration =\n props.pushNotification?.disableNotificationRegistration;\n let snippet = '';\n // unless this property is explicity set to true, push notification\n // registration will be added to the AppDelegate\n if (disableNotificationRegistration !== true) {\n snippet = CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2;\n }\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER,\n snippet\n );\n\n const autoTrackPushEvents =\n props.pushNotification?.autoTrackPushEvents !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{AUTO_TRACK_PUSH_EVENTS\\}\\}/,\n autoTrackPushEvents.toString()\n );\n\n const autoFetchDeviceToken =\n props.pushNotification?.autoFetchDeviceToken !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{AUTO_FETCH_DEVICE_TOKEN\\}\\}/,\n autoFetchDeviceToken.toString()\n );\n\n const showPushAppInForeground =\n props.pushNotification?.showPushAppInForeground !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{SHOW_PUSH_APP_IN_FOREGROUND\\}\\}/,\n showPushAppInForeground.toString()\n );\n\n // Add auto initialization if sdkConfig is provided\n if (sdkConfig) {\n // Also copy CustomerIOSDKInitializer.swift for auto-initialization\n copyAndConfigureNativeSDKInitializer({ xcodeProject, group, iosProjectRoot, projectName, sdkConfig });\n\n // Inject auto initialization call before MessagingPush initialization\n handlerFileContent = handlerFileContent.replace(CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX, CIO_NATIVE_SDK_INITIALIZE_SNIPPET + '$1');\n }\n\n FileManagement.writeFile(handlerDestPath, handlerFileContent);\n};\n\nconst copyAndConfigureNativeSDKInitializer = ({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n}: {\n xcodeProject: XcodeProject;\n group: XcodeProject['pbxCreateGroup'];\n iosProjectRoot: string;\n projectName: string;\n sdkConfig: NativeSDKConfig;\n}) => {\n const filename = 'CustomerIOSDKInitializer.swift';\n const sourcePath = path.join(getIosNativeFilesPath(), filename);\n // Add the CustomerIOSDKInitializer.swift file to the same Xcode group as CioSdkAppDelegateHandler\n copyFileToXcode({\n xcodeProject,\n iosProjectRoot,\n projectName,\n sourceFilePath: sourcePath,\n targetFileName: filename,\n transform: (content) => patchNativeSDKInitializer(content, PLATFORM.IOS, sdkConfig),\n customerIOGroup: group,\n });\n};\n\nexport const withCIOIosSwift = (\n configOuter: ExpoConfig,\n sdkConfig: NativeSDKConfig | undefined,\n props: CustomerIOPluginOptionsIOS,\n) => {\n // First, copy required swift files to iOS folder and add it to Xcode project\n configOuter = withXcodeProject(configOuter, async (config) => {\n return copyAndConfigureAppDelegateHandler(config, sdkConfig, props);\n });\n\n // Modify the AppDelegate based on configuration\n if (props.pushNotification) {\n // With push notifications: delegate to CioSdkAppDelegateHandler for both push and auto-init\n return withAppDelegate(configOuter, async (config) => {\n return modifyAppDelegateWithPushAppDelegateHandler(config, props);\n });\n } else if (sdkConfig) {\n // Without push notifications: directly inject auto initialization into AppDelegate\n return withAppDelegate(configOuter, async (config) => {\n return modifyAppDelegateWithNativeSDKInitializer(config);\n });\n } else {\n return configOuter;\n }\n};\n\n/**\n * Modify the AppDelegate to integrate with Customer.io SDK\n */\nconst modifyAppDelegateWithPushAppDelegateHandler = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: any,\n props: CustomerIOPluginOptionsIOS\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n const appDelegateContent = config.modResults.contents;\n\n // Check if modifications have already been applied\n if (appDelegateContent.includes(CIO_SDK_APP_DELEGATE_HANDLER_CLASS)) {\n console.log(\n 'CustomerIO Swift AppDelegate changes already exist. Skipping...'\n );\n return config;\n }\n\n // Add the handler property declaration\n let modifiedContent = addHandlerPropertyDeclaration(appDelegateContent);\n\n // Modify didFinishLaunchingWithOptions to initialize and call the handler\n modifiedContent = modifyDidFinishLaunchingWithOptions(\n modifiedContent,\n ` cioSdkHandler.application(application, didFinishLaunchingWithOptions: launchOptions)\\n\\n `\n );\n\n // Add didRegisterForRemoteNotificationsWithDeviceToken implementation\n modifiedContent =\n addDidRegisterForRemoteNotificationsWithDeviceToken(modifiedContent);\n\n // Add didFailToRegisterForRemoteNotificationsWithError implementation\n modifiedContent =\n addDidFailToRegisterForRemoteNotificationsWithError(modifiedContent);\n\n // Add deep link handling for killed state if enabled\n if (props.pushNotification?.handleDeeplinkInKilledState === true) {\n modifiedContent = addHandleDeeplinkInKilledState(modifiedContent);\n }\n\n config.modResults.contents = modifiedContent;\n return config;\n};\n\n/**\n * Modify the AppDelegate to integrate with Customer.io SDK\n */\nconst modifyAppDelegateWithNativeSDKInitializer = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n const appDelegateContent = config.modResults.contents;\n\n // Check if modifications have already been applied\n if (appDelegateContent.includes(CIO_NATIVE_SDK_INITIALIZE_CALL)) {\n console.log(\n 'CustomerIO Swift AppDelegate changes already exist. Skipping...'\n );\n return config;\n }\n\n // Modify didFinishLaunchingWithOptions to initialize and call the handler\n const modifiedContent = modifyDidFinishLaunchingWithOptions(\n appDelegateContent,\n CIO_NATIVE_SDK_INITIALIZE_SNIPPET,\n );\n\n config.modResults.contents = modifiedContent;\n return config;\n};\n\n/**\n * Check if a method exists in the AppDelegate content\n * @param content The AppDelegate content\n * @param methodSignature The method signature to check for\n * @returns true if the method exists, false otherwise\n */\nconst methodExistsInAppDelegate = (\n content: string,\n methodSignature: string\n): boolean => {\n return content.includes(methodSignature);\n};\n\n/**\n * Add handler property declaration to the AppDelegate class\n * This adds the line: let cioSdkHandler = CioSdkAppDelegateHandler()\n * to the AppDelegate class\n */\nconst addHandlerPropertyDeclaration = (content: string): string => {\n // Look for the AppDelegate class declaration\n const classDeclarationRegex = /class\\s+AppDelegate\\s*:\\s*.*\\s*{/;\n const match = content.match(classDeclarationRegex);\n\n if (!match) {\n console.warn('Could not find AppDelegate class declaration');\n return content;\n }\n\n const position = (match.index ?? 0) + match[0].length;\n return (\n content.substring(0, position) +\n `\\n let cioSdkHandler = ${CIO_SDK_APP_DELEGATE_HANDLER_CLASS}()\\n` +\n content.substring(position)\n );\n};\n\n/**\n * Modify didFinishLaunchingWithOptions to inject Customer.io code\n * Injects the provided code (either handler call or auto initialization) before the return statement\n */\nconst modifyDidFinishLaunchingWithOptions = (content: string, codeToInject: string): string => {\n // Find the return statement in didFinishLaunchingWithOptions\n // Always look for launchOptions since modifiedLaunchOptions is only set later\n const returnStatementRegex =\n /return\\s+super\\.application\\s*\\(\\s*application\\s*,\\s*didFinishLaunchingWithOptions\\s*:\\s*launchOptions\\s*\\)/;\n\n const returnStatementMatch = content.match(returnStatementRegex);\n\n if (!returnStatementMatch) {\n console.warn(\n 'Could not find return statement with super.application in didFinishLaunchingWithOptions'\n );\n return content;\n }\n\n // Inject Customer.io code before the return statement\n const insertPosition = returnStatementMatch.index ?? 0;\n\n return (\n content.substring(0, insertPosition) +\n codeToInject +\n content.substring(insertPosition)\n );\n};\n\n/**\n * Add or modify didRegisterForRemoteNotificationsWithDeviceToken implementation\n * If the method already exists, it adds the handler call to the existing method\n * If the method doesn't exist, it adds a new method implementation\n */\nconst addDidRegisterForRemoteNotificationsWithDeviceToken = (\n content: string\n): string => {\n const methodSignature =\n 'func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:';\n\n // Check if method already exists\n if (methodExistsInAppDelegate(content, methodSignature)) {\n // Method exists, modify it to call our handler\n const methodRegex =\n /func\\s+application\\s*\\(\\s*_\\s+application\\s*:\\s*UIApplication\\s*,\\s*didRegisterForRemoteNotificationsWithDeviceToken\\s+deviceToken\\s*:\\s*Data\\s*\\)\\s*{[\\s\\S]*?}/;\n const match = content.match(methodRegex);\n\n if (match) {\n // Add our handler call to the existing method\n const methodContent = match[0];\n const openBraceIndex = methodContent.indexOf('{') + 1;\n const modifiedMethod =\n methodContent.substring(0, openBraceIndex) +\n '\\n // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n methodContent.substring(openBraceIndex);\n\n return content.replace(methodRegex, modifiedMethod);\n }\n\n return content;\n } else {\n // Method doesn't exist, add it inside the AppDelegate class\n // Find the end of the AppDelegate class\n const classEndRegex = /^}(\\s*$|\\s*\\/\\/)/m;\n const classEndMatch = content.match(classEndRegex);\n\n if (!classEndMatch) {\n console.warn('Could not find end of AppDelegate class');\n return content;\n }\n\n // Insert the method inside the class\n const position = classEndMatch.index ?? 0;\n return (\n content.substring(0, position) +\n '\\n // Handle device token registration\\n' +\n ' public override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\\n' +\n ' // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n ' super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n ' }\\n' +\n content.substring(position)\n );\n }\n};\n\n/**\n * Add or modify didFailToRegisterForRemoteNotificationsWithError implementation\n * If the method already exists, it adds the handler call to the existing method\n * If the method doesn't exist, it adds a new method implementation\n */\nconst addDidFailToRegisterForRemoteNotificationsWithError = (\n content: string\n): string => {\n const methodSignature =\n 'func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error:';\n\n // Check if method already exists\n if (methodExistsInAppDelegate(content, methodSignature)) {\n // Method exists, modify it to call our handler\n const methodRegex =\n /func\\s+application\\s*\\(\\s*_\\s+application\\s*:\\s*UIApplication\\s*,\\s*didFailToRegisterForRemoteNotificationsWithError\\s+error\\s*:\\s*Error\\s*\\)\\s*{[\\s\\S]*?}/;\n const match = content.match(methodRegex);\n\n if (match) {\n // Add our handler call to the existing method\n const methodContent = match[0];\n const openBraceIndex = methodContent.indexOf('{') + 1;\n const modifiedMethod =\n methodContent.substring(0, openBraceIndex) +\n '\\n // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n methodContent.substring(openBraceIndex);\n\n return content.replace(methodRegex, modifiedMethod);\n }\n\n return content;\n } else {\n // Method doesn't exist, add it inside the AppDelegate class\n // Find the end of the AppDelegate class\n const classEndRegex = /^}(\\s*$|\\s*\\/\\/)/m;\n const classEndMatch = content.match(classEndRegex);\n\n if (!classEndMatch) {\n console.warn('Could not find end of AppDelegate class');\n return content;\n }\n\n // Insert the method inside the class\n const position = classEndMatch.index ?? 0;\n return (\n content.substring(0, position) +\n '\\n // Handle remote notification registration errors\\n' +\n ' public override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {\\n' +\n ' // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n ' super.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n ' }\\n' +\n content.substring(position)\n );\n }\n};\n\n/**\n * Add deep link handling for killed state\n * This replaces the return statement with deep link handling code\n * and a modified return statement that uses modifiedLaunchOptions\n */\nconst addHandleDeeplinkInKilledState = (content: string): string => {\n // Check if deep link code snippet is already present\n const deepLinkMarker = 'Deep link workaround for app killed state start';\n if (content.includes(deepLinkMarker)) {\n return content;\n }\n\n // Find the return statement with launchOptions\n const returnStatementRegex =\n /return\\s+super\\.application\\s*\\(\\s*application\\s*,\\s*didFinishLaunchingWithOptions\\s*:\\s*launchOptions\\s*\\)/;\n const returnStatementMatch = content.match(returnStatementRegex);\n\n if (!returnStatementMatch) {\n console.warn('Could not find return statement with launchOptions');\n return content;\n }\n\n // Create the replacement code with deep link handling and modified return statement\n const modifiedReturnStatement =\n 'return super.application(application, didFinishLaunchingWithOptions: modifiedLaunchOptions)';\n const replacementCode =\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET +\n '\\n\\n ' +\n modifiedReturnStatement;\n\n // Replace the return statement with deep link handling code and modified return statement\n return content.replace(returnStatementRegex, replacementCode);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_configPlugins","require","_path","_interopRequireDefault","_common","_ios","_codeInjection","_fileManagement","_patchPluginNativeCode","_logger","_plugin","_xcode","_utils","e","__esModule","default","CIO_SDK_APP_DELEGATE_HANDLER_CLASS","CIO_SDK_APP_DELEGATE_HANDLER_FILENAME","copyAndConfigureAppDelegateHandler","config","sdkConfig","props","projectName","modRequest","logger","warn","xcodeProject","modResults","projectRoot","iosProjectRoot","path","join","group","getOrCreateCustomerIOGroup","pushNotification","copyAndConfigurePushAppDelegateHandler","copyAndConfigureNativeSDKInitializer","_props$pushNotificati","_props$pushNotificati2","_props$pushNotificati3","_props$pushNotificati4","useFcm","isFcmPushProvider","handlerSourcePath","getIosNativeFilesPath","handlerDestPath","FileManagement","copyFile","addSourceFile","handlerFileContent","readFile","disableNotificationRegistration","snippet","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2","replaceCodeByRegex","CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER","autoTrackPushEvents","toString","autoFetchDeviceToken","showPushAppInForeground","replace","CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX","CIO_NATIVE_SDK_INITIALIZE_SNIPPET","writeFile","filename","sourcePath","copyFileToXcode","sourceFilePath","targetFileName","transform","content","patchNativeSDKInitializer","PLATFORM","IOS","customerIOGroup","withCIOIosSwift","configOuter","withXcodeProject","withAppDelegate","modifyAppDelegateWithPushAppDelegateHandler","modifyAppDelegateWithNativeSDKInitializer","exports","_props$pushNotificati5","appDelegateContent","contents","includes","info","modifiedContent","addHandlerPropertyDeclaration","modifyDidFinishLaunchingWithOptions","addDidRegisterForRemoteNotificationsWithDeviceToken","addDidFailToRegisterForRemoteNotificationsWithError","handleDeeplinkInKilledState","addHandleDeeplinkInKilledState","CIO_NATIVE_SDK_INITIALIZE_CALL","methodExistsInAppDelegate","methodSignature","classDeclarationRegex","match","position","index","length","substring","codeToInject","returnStatementRegex","returnStatementMatch","insertPosition","methodRegex","methodContent","openBraceIndex","indexOf","modifiedMethod","classEndRegex","classEndMatch","deepLinkMarker","modifiedReturnStatement","replacementCode","CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET"],"sources":["withCIOIosSwift.ts"],"sourcesContent":["import type {\n ExportedConfigWithProps,\n XcodeProject,\n} from '@expo/config-plugins';\nimport { withAppDelegate, withXcodeProject } from '@expo/config-plugins';\nimport type { ExpoConfig } from '@expo/config-types';\nimport path from 'path';\nimport { PLATFORM } from '../helpers/constants/common';\nimport {\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET,\n CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX,\n CIO_NATIVE_SDK_INITIALIZE_CALL,\n CIO_NATIVE_SDK_INITIALIZE_SNIPPET,\n CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2,\n CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER,\n} from '../helpers/constants/ios';\nimport { replaceCodeByRegex } from '../helpers/utils/codeInjection';\nimport { FileManagement } from '../helpers/utils/fileManagement';\nimport { patchNativeSDKInitializer } from '../helpers/utils/patchPluginNativeCode';\nimport type { CustomerIOPluginOptionsIOS, NativeSDKConfig } from '../types/cio-types';\nimport { logger } from '../utils/logger';\nimport { getIosNativeFilesPath } from '../utils/plugin';\nimport { copyFileToXcode, getOrCreateCustomerIOGroup } from '../utils/xcode';\nimport { isFcmPushProvider } from './utils';\n\n// Constants\nconst CIO_SDK_APP_DELEGATE_HANDLER_CLASS = 'CioSdkAppDelegateHandler';\nconst CIO_SDK_APP_DELEGATE_HANDLER_FILENAME = `${CIO_SDK_APP_DELEGATE_HANDLER_CLASS}.swift`;\n\n/**\n * Copy and configure the CioSdkAppDelegateHandler.swift file\n */\nconst copyAndConfigureAppDelegateHandler = (\n config: ExportedConfigWithProps<XcodeProject>,\n sdkConfig?: NativeSDKConfig,\n props?: CustomerIOPluginOptionsIOS,\n): ExportedConfigWithProps<XcodeProject> => {\n // Destination path in the iOS project\n const projectName = config.modRequest.projectName || '';\n if (!projectName) {\n logger.warn(\n 'Project name is undefined, cannot copy CustomerIO files'\n );\n return config;\n }\n\n // Add files to the Xcode project\n const xcodeProject = config.modResults;\n const projectRoot = config.modRequest.projectRoot;\n const iosProjectRoot = path.join(projectRoot, 'ios');\n\n const group = getOrCreateCustomerIOGroup(xcodeProject, projectName);\n if (props?.pushNotification) {\n // Copy CioSdkAppDelegateHandler.swift for full push notification + auto-init support\n copyAndConfigurePushAppDelegateHandler({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n props,\n });\n } else if (sdkConfig) {\n // Copy only CustomerIOSDKInitializer.swift for auto-init without push notifications\n copyAndConfigureNativeSDKInitializer({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n });\n }\n\n return config;\n};\n\nconst copyAndConfigurePushAppDelegateHandler = ({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n props,\n}: {\n xcodeProject: XcodeProject;\n group: XcodeProject['pbxCreateGroup'];\n iosProjectRoot: string;\n projectName: string;\n sdkConfig: NativeSDKConfig | undefined;\n props: CustomerIOPluginOptionsIOS;\n}) => {\n const useFcm = isFcmPushProvider(props);\n\n // Source path for the handler file\n const handlerSourcePath = path.join(\n getIosNativeFilesPath(),\n useFcm ? 'fcm' : 'apn',\n CIO_SDK_APP_DELEGATE_HANDLER_FILENAME\n );\n\n const handlerDestPath = path.join(\n iosProjectRoot,\n projectName,\n CIO_SDK_APP_DELEGATE_HANDLER_FILENAME\n );\n\n FileManagement.copyFile(handlerSourcePath, handlerDestPath);\n\n // Add the file to the Xcode project\n xcodeProject.addSourceFile(\n `${projectName}/${CIO_SDK_APP_DELEGATE_HANDLER_FILENAME}`,\n null,\n group\n );\n\n let handlerFileContent = FileManagement.readFile(handlerDestPath);\n\n const disableNotificationRegistration =\n props.pushNotification?.disableNotificationRegistration;\n let snippet = '';\n // unless this property is explicity set to true, push notification\n // registration will be added to the AppDelegate\n if (disableNotificationRegistration !== true) {\n snippet = CIO_REGISTER_PUSHNOTIFICATION_SNIPPET_v2;\n }\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n CIO_REGISTER_PUSH_NOTIFICATION_PLACEHOLDER,\n snippet\n );\n\n const autoTrackPushEvents =\n props.pushNotification?.autoTrackPushEvents !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{AUTO_TRACK_PUSH_EVENTS\\}\\}/,\n autoTrackPushEvents.toString()\n );\n\n const autoFetchDeviceToken =\n props.pushNotification?.autoFetchDeviceToken !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{AUTO_FETCH_DEVICE_TOKEN\\}\\}/,\n autoFetchDeviceToken.toString()\n );\n\n const showPushAppInForeground =\n props.pushNotification?.showPushAppInForeground !== false;\n handlerFileContent = replaceCodeByRegex(\n handlerFileContent,\n /\\{\\{SHOW_PUSH_APP_IN_FOREGROUND\\}\\}/,\n showPushAppInForeground.toString()\n );\n\n // Add auto initialization if sdkConfig is provided\n if (sdkConfig) {\n // Also copy CustomerIOSDKInitializer.swift for auto-initialization\n copyAndConfigureNativeSDKInitializer({ xcodeProject, group, iosProjectRoot, projectName, sdkConfig });\n\n // Inject auto initialization call before MessagingPush initialization\n handlerFileContent = handlerFileContent.replace(CIO_MESSAGING_PUSH_APP_DELEGATE_INIT_REGEX, CIO_NATIVE_SDK_INITIALIZE_SNIPPET + '$1');\n }\n\n FileManagement.writeFile(handlerDestPath, handlerFileContent);\n};\n\nconst copyAndConfigureNativeSDKInitializer = ({\n xcodeProject,\n group,\n iosProjectRoot,\n projectName,\n sdkConfig,\n}: {\n xcodeProject: XcodeProject;\n group: XcodeProject['pbxCreateGroup'];\n iosProjectRoot: string;\n projectName: string;\n sdkConfig: NativeSDKConfig;\n}) => {\n const filename = 'CustomerIOSDKInitializer.swift';\n const sourcePath = path.join(getIosNativeFilesPath(), filename);\n // Add the CustomerIOSDKInitializer.swift file to the same Xcode group as CioSdkAppDelegateHandler\n copyFileToXcode({\n xcodeProject,\n iosProjectRoot,\n projectName,\n sourceFilePath: sourcePath,\n targetFileName: filename,\n transform: (content) => patchNativeSDKInitializer(content, PLATFORM.IOS, sdkConfig),\n customerIOGroup: group,\n });\n};\n\nexport const withCIOIosSwift = (\n configOuter: ExpoConfig,\n sdkConfig?: NativeSDKConfig,\n props?: CustomerIOPluginOptionsIOS,\n) => {\n // First, copy required swift files to iOS folder and add it to Xcode project\n configOuter = withXcodeProject(configOuter, async (config) => {\n return copyAndConfigureAppDelegateHandler(config, sdkConfig, props);\n });\n\n // Modify the AppDelegate based on configuration\n if (props?.pushNotification) {\n // With push notifications: delegate to CioSdkAppDelegateHandler for both push and auto-init\n return withAppDelegate(configOuter, async (config) => {\n return modifyAppDelegateWithPushAppDelegateHandler(config, props);\n });\n } else if (sdkConfig) {\n // Without push notifications: directly inject auto initialization into AppDelegate\n return withAppDelegate(configOuter, async (config) => {\n return modifyAppDelegateWithNativeSDKInitializer(config);\n });\n } else {\n return configOuter;\n }\n};\n\n/**\n * Modify the AppDelegate to integrate with Customer.io SDK\n */\nconst modifyAppDelegateWithPushAppDelegateHandler = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: any,\n props: CustomerIOPluginOptionsIOS\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n const appDelegateContent = config.modResults.contents;\n\n // Check if modifications have already been applied\n if (appDelegateContent.includes(CIO_SDK_APP_DELEGATE_HANDLER_CLASS)) {\n logger.info(\n 'CustomerIO Swift AppDelegate changes already exist. Skipping...'\n );\n return config;\n }\n\n // Add the handler property declaration\n let modifiedContent = addHandlerPropertyDeclaration(appDelegateContent);\n\n // Modify didFinishLaunchingWithOptions to initialize and call the handler\n modifiedContent = modifyDidFinishLaunchingWithOptions(\n modifiedContent,\n ` cioSdkHandler.application(application, didFinishLaunchingWithOptions: launchOptions)\\n\\n `\n );\n\n // Add didRegisterForRemoteNotificationsWithDeviceToken implementation\n modifiedContent =\n addDidRegisterForRemoteNotificationsWithDeviceToken(modifiedContent);\n\n // Add didFailToRegisterForRemoteNotificationsWithError implementation\n modifiedContent =\n addDidFailToRegisterForRemoteNotificationsWithError(modifiedContent);\n\n // Add deep link handling for killed state if enabled\n if (props.pushNotification?.handleDeeplinkInKilledState === true) {\n modifiedContent = addHandleDeeplinkInKilledState(modifiedContent);\n }\n\n config.modResults.contents = modifiedContent;\n return config;\n};\n\n/**\n * Modify the AppDelegate to integrate with Customer.io SDK\n */\nconst modifyAppDelegateWithNativeSDKInitializer = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n const appDelegateContent = config.modResults.contents;\n\n // Check if modifications have already been applied\n if (appDelegateContent.includes(CIO_NATIVE_SDK_INITIALIZE_CALL)) {\n logger.info(\n 'CustomerIO Swift AppDelegate changes already exist. Skipping...'\n );\n return config;\n }\n\n // Modify didFinishLaunchingWithOptions to initialize and call the handler\n const modifiedContent = modifyDidFinishLaunchingWithOptions(\n appDelegateContent,\n CIO_NATIVE_SDK_INITIALIZE_SNIPPET,\n );\n\n config.modResults.contents = modifiedContent;\n return config;\n};\n\n/**\n * Check if a method exists in the AppDelegate content\n * @param content The AppDelegate content\n * @param methodSignature The method signature to check for\n * @returns true if the method exists, false otherwise\n */\nconst methodExistsInAppDelegate = (\n content: string,\n methodSignature: string\n): boolean => {\n return content.includes(methodSignature);\n};\n\n/**\n * Add handler property declaration to the AppDelegate class\n * This adds the line: let cioSdkHandler = CioSdkAppDelegateHandler()\n * to the AppDelegate class\n */\nconst addHandlerPropertyDeclaration = (content: string): string => {\n // Look for the AppDelegate class declaration\n const classDeclarationRegex = /class\\s+AppDelegate\\s*:\\s*.*\\s*{/;\n const match = content.match(classDeclarationRegex);\n\n if (!match) {\n logger.warn('Could not find AppDelegate class declaration');\n return content;\n }\n\n const position = (match.index ?? 0) + match[0].length;\n return (\n content.substring(0, position) +\n `\\n let cioSdkHandler = ${CIO_SDK_APP_DELEGATE_HANDLER_CLASS}()\\n` +\n content.substring(position)\n );\n};\n\n/**\n * Modify didFinishLaunchingWithOptions to inject Customer.io code\n * Injects the provided code (either handler call or auto initialization) before the return statement\n */\nconst modifyDidFinishLaunchingWithOptions = (content: string, codeToInject: string): string => {\n // Find the return statement in didFinishLaunchingWithOptions\n // Always look for launchOptions since modifiedLaunchOptions is only set later\n const returnStatementRegex =\n /return\\s+super\\.application\\s*\\(\\s*application\\s*,\\s*didFinishLaunchingWithOptions\\s*:\\s*launchOptions\\s*\\)/;\n\n const returnStatementMatch = content.match(returnStatementRegex);\n\n if (!returnStatementMatch) {\n logger.warn(\n 'Could not find return statement with super.application in didFinishLaunchingWithOptions'\n );\n return content;\n }\n\n // Inject Customer.io code before the return statement\n const insertPosition = returnStatementMatch.index ?? 0;\n\n return (\n content.substring(0, insertPosition) +\n codeToInject +\n content.substring(insertPosition)\n );\n};\n\n/**\n * Add or modify didRegisterForRemoteNotificationsWithDeviceToken implementation\n * If the method already exists, it adds the handler call to the existing method\n * If the method doesn't exist, it adds a new method implementation\n */\nconst addDidRegisterForRemoteNotificationsWithDeviceToken = (\n content: string\n): string => {\n const methodSignature =\n 'func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:';\n\n // Check if method already exists\n if (methodExistsInAppDelegate(content, methodSignature)) {\n // Method exists, modify it to call our handler\n const methodRegex =\n /func\\s+application\\s*\\(\\s*_\\s+application\\s*:\\s*UIApplication\\s*,\\s*didRegisterForRemoteNotificationsWithDeviceToken\\s+deviceToken\\s*:\\s*Data\\s*\\)\\s*{[\\s\\S]*?}/;\n const match = content.match(methodRegex);\n\n if (match) {\n // Add our handler call to the existing method\n const methodContent = match[0];\n const openBraceIndex = methodContent.indexOf('{') + 1;\n const modifiedMethod =\n methodContent.substring(0, openBraceIndex) +\n '\\n // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n methodContent.substring(openBraceIndex);\n\n return content.replace(methodRegex, modifiedMethod);\n }\n\n return content;\n } else {\n // Method doesn't exist, add it inside the AppDelegate class\n // Find the end of the AppDelegate class\n const classEndRegex = /^}(\\s*$|\\s*\\/\\/)/m;\n const classEndMatch = content.match(classEndRegex);\n\n if (!classEndMatch) {\n logger.warn('Could not find end of AppDelegate class');\n return content;\n }\n\n // Insert the method inside the class\n const position = classEndMatch.index ?? 0;\n return (\n content.substring(0, position) +\n '\\n // Handle device token registration\\n' +\n ' public override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\\n' +\n ' // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n ' super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\\n' +\n ' }\\n' +\n content.substring(position)\n );\n }\n};\n\n/**\n * Add or modify didFailToRegisterForRemoteNotificationsWithError implementation\n * If the method already exists, it adds the handler call to the existing method\n * If the method doesn't exist, it adds a new method implementation\n */\nconst addDidFailToRegisterForRemoteNotificationsWithError = (\n content: string\n): string => {\n const methodSignature =\n 'func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error:';\n\n // Check if method already exists\n if (methodExistsInAppDelegate(content, methodSignature)) {\n // Method exists, modify it to call our handler\n const methodRegex =\n /func\\s+application\\s*\\(\\s*_\\s+application\\s*:\\s*UIApplication\\s*,\\s*didFailToRegisterForRemoteNotificationsWithError\\s+error\\s*:\\s*Error\\s*\\)\\s*{[\\s\\S]*?}/;\n const match = content.match(methodRegex);\n\n if (match) {\n // Add our handler call to the existing method\n const methodContent = match[0];\n const openBraceIndex = methodContent.indexOf('{') + 1;\n const modifiedMethod =\n methodContent.substring(0, openBraceIndex) +\n '\\n // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n methodContent.substring(openBraceIndex);\n\n return content.replace(methodRegex, modifiedMethod);\n }\n\n return content;\n } else {\n // Method doesn't exist, add it inside the AppDelegate class\n // Find the end of the AppDelegate class\n const classEndRegex = /^}(\\s*$|\\s*\\/\\/)/m;\n const classEndMatch = content.match(classEndRegex);\n\n if (!classEndMatch) {\n logger.warn('Could not find end of AppDelegate class');\n return content;\n }\n\n // Insert the method inside the class\n const position = classEndMatch.index ?? 0;\n return (\n content.substring(0, position) +\n '\\n // Handle remote notification registration errors\\n' +\n ' public override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {\\n' +\n ' // Call CustomerIO SDK handler\\n' +\n ' cioSdkHandler.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n ' super.application(application, didFailToRegisterForRemoteNotificationsWithError: error)\\n' +\n ' }\\n' +\n content.substring(position)\n );\n }\n};\n\n/**\n * Add deep link handling for killed state\n * This replaces the return statement with deep link handling code\n * and a modified return statement that uses modifiedLaunchOptions\n */\nconst addHandleDeeplinkInKilledState = (content: string): string => {\n // Check if deep link code snippet is already present\n const deepLinkMarker = 'Deep link workaround for app killed state start';\n if (content.includes(deepLinkMarker)) {\n return content;\n }\n\n // Find the return statement with launchOptions\n const returnStatementRegex =\n /return\\s+super\\.application\\s*\\(\\s*application\\s*,\\s*didFinishLaunchingWithOptions\\s*:\\s*launchOptions\\s*\\)/;\n const returnStatementMatch = content.match(returnStatementRegex);\n\n if (!returnStatementMatch) {\n logger.warn('Could not find return statement with launchOptions');\n return content;\n }\n\n // Create the replacement code with deep link handling and modified return statement\n const modifiedReturnStatement =\n 'return super.application(application, didFinishLaunchingWithOptions: modifiedLaunchOptions)';\n const replacementCode =\n CIO_CONFIGUREDEEPLINK_KILLEDSTATE_SWIFT_SNIPPET +\n '\\n\\n ' +\n modifiedReturnStatement;\n\n // Replace the return statement with deep link handling code and modified return statement\n return content.replace(returnStatementRegex, replacementCode);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.withGoogleServicesJsonFile = void 0;
|
|
7
7
|
var _configPlugins = require("@expo/config-plugins");
|
|
8
|
+
var _logger = require("../utils/logger");
|
|
8
9
|
var _fileManagement = require("./../helpers/utils/fileManagement");
|
|
9
10
|
var _utils = require("./utils");
|
|
10
11
|
const withGoogleServicesJsonFile = (config, cioProps) => {
|
|
@@ -15,35 +16,35 @@ const withGoogleServicesJsonFile = (config, cioProps) => {
|
|
|
15
16
|
// Nothing to do, for providers other than FCM, the Google services JSON file isn't needed
|
|
16
17
|
return props;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
_logger.logger.info('Only specify Customer.io ios.pushNotification.googleServicesFile config if you are not already including' + ' GoogleService-Info.plist as part of Firebase integration');
|
|
19
20
|
|
|
20
21
|
// googleServicesFile
|
|
21
22
|
const iosPath = props.modRequest.platformProjectRoot;
|
|
22
23
|
const googleServicesFile = (_cioProps$pushNotific = cioProps.pushNotification) === null || _cioProps$pushNotific === void 0 ? void 0 : _cioProps$pushNotific.googleServicesFile;
|
|
23
24
|
const appName = props.modRequest.projectName;
|
|
24
25
|
if (_fileManagement.FileManagement.exists(`${iosPath}/GoogleService-Info.plist`)) {
|
|
25
|
-
|
|
26
|
+
_logger.logger.info(`File already exists: ${iosPath}/GoogleService-Info.plist. Skipping...`);
|
|
26
27
|
return props;
|
|
27
28
|
}
|
|
28
29
|
if (_fileManagement.FileManagement.exists(`${iosPath}/${appName}/GoogleService-Info.plist`)) {
|
|
29
30
|
// This is where RN Firebase potentially copies GoogleService-Info.plist
|
|
30
31
|
// Do not copy if it's already done by Firebase to avoid conflict in Resources
|
|
31
|
-
|
|
32
|
+
_logger.logger.info(`File already exists: ${iosPath}/${appName}/GoogleService-Info.plist. Skipping...`);
|
|
32
33
|
return props;
|
|
33
34
|
}
|
|
34
35
|
if (googleServicesFile && _fileManagement.FileManagement.exists(googleServicesFile)) {
|
|
35
36
|
var _config$ios;
|
|
36
37
|
if ((_config$ios = config.ios) !== null && _config$ios !== void 0 && _config$ios.googleServicesFile) {
|
|
37
|
-
|
|
38
|
+
_logger.logger.warn('Specifying both Expo ios.googleServicesFile and Customer.io ios.pushNotification.googleServicesFile can cause a conflict' + ' duplicating GoogleService-Info.plist in the iOS project resources. Please remove Customer.io ios.pushNotification.googleServicesFile');
|
|
38
39
|
}
|
|
39
40
|
try {
|
|
40
41
|
_fileManagement.FileManagement.copyFile(googleServicesFile, `${iosPath}/GoogleService-Info.plist`);
|
|
41
42
|
addFileToXcodeProject(props.modResults, 'GoogleService-Info.plist');
|
|
42
43
|
} catch {
|
|
43
|
-
|
|
44
|
+
_logger.logger.error(`There was an error copying your GoogleService-Info.plist file. You can copy it manually into ${iosPath}/GoogleService-Info.plist`);
|
|
44
45
|
}
|
|
45
46
|
} else {
|
|
46
|
-
|
|
47
|
+
_logger.logger.error(`The Google Services file provided in ${googleServicesFile} doesn't seem to exist. You can copy it manually into ${iosPath}/GoogleService-Info.plist`);
|
|
47
48
|
}
|
|
48
49
|
return props;
|
|
49
50
|
});
|
|
@@ -53,7 +54,7 @@ function addFileToXcodeProject(project, fileName) {
|
|
|
53
54
|
const groupName = 'Resources';
|
|
54
55
|
const filepath = fileName;
|
|
55
56
|
if (!_configPlugins.IOSConfig.XcodeUtils.ensureGroupRecursively(project, groupName)) {
|
|
56
|
-
|
|
57
|
+
_logger.logger.error(`Error copying GoogleService-Info.plist. Failed to find or create '${groupName}' group in Xcode.`);
|
|
57
58
|
return;
|
|
58
59
|
}
|
|
59
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_configPlugins","require","_fileManagement","_utils","withGoogleServicesJsonFile","config","cioProps","withXcodeProject","props","_cioProps$pushNotific","useFcm","isFcmPushProvider","
|
|
1
|
+
{"version":3,"names":["_configPlugins","require","_logger","_fileManagement","_utils","withGoogleServicesJsonFile","config","cioProps","withXcodeProject","props","_cioProps$pushNotific","useFcm","isFcmPushProvider","logger","info","iosPath","modRequest","platformProjectRoot","googleServicesFile","pushNotification","appName","projectName","FileManagement","exists","_config$ios","ios","warn","copyFile","addFileToXcodeProject","modResults","error","exports","project","fileName","groupName","filepath","IOSConfig","XcodeUtils","ensureGroupRecursively","addResourceFileToGroup","isBuildFile"],"sources":["withGoogleServicesJsonFile.ts"],"sourcesContent":["import type { ConfigPlugin, XcodeProject } from '@expo/config-plugins';\nimport { IOSConfig, withXcodeProject } from '@expo/config-plugins';\n\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { logger } from '../utils/logger';\nimport { FileManagement } from './../helpers/utils/fileManagement';\nimport { isFcmPushProvider } from './utils';\n\nexport const withGoogleServicesJsonFile: ConfigPlugin<\n CustomerIOPluginOptionsIOS\n> = (config, cioProps) => {\n return withXcodeProject(config, async (props) => {\n const useFcm = isFcmPushProvider(cioProps);\n if (!useFcm) {\n // Nothing to do, for providers other than FCM, the Google services JSON file isn't needed\n return props;\n }\n\n logger.info(\n 'Only specify Customer.io ios.pushNotification.googleServicesFile config if you are not already including' +\n ' GoogleService-Info.plist as part of Firebase integration'\n );\n\n // googleServicesFile\n const iosPath = props.modRequest.platformProjectRoot;\n const googleServicesFile = cioProps.pushNotification?.googleServicesFile;\n const appName = props.modRequest.projectName;\n\n if (FileManagement.exists(`${iosPath}/GoogleService-Info.plist`)) {\n logger.info(\n `File already exists: ${iosPath}/GoogleService-Info.plist. Skipping...`\n );\n return props;\n }\n\n if (\n FileManagement.exists(`${iosPath}/${appName}/GoogleService-Info.plist`)\n ) {\n // This is where RN Firebase potentially copies GoogleService-Info.plist\n // Do not copy if it's already done by Firebase to avoid conflict in Resources\n logger.info(\n `File already exists: ${iosPath}/${appName}/GoogleService-Info.plist. Skipping...`\n );\n return props;\n }\n\n if (googleServicesFile && FileManagement.exists(googleServicesFile)) {\n if (config.ios?.googleServicesFile) {\n logger.warn(\n 'Specifying both Expo ios.googleServicesFile and Customer.io ios.pushNotification.googleServicesFile can cause a conflict' +\n ' duplicating GoogleService-Info.plist in the iOS project resources. Please remove Customer.io ios.pushNotification.googleServicesFile'\n );\n }\n\n try {\n FileManagement.copyFile(\n googleServicesFile,\n `${iosPath}/GoogleService-Info.plist`\n );\n\n addFileToXcodeProject(props.modResults, 'GoogleService-Info.plist');\n } catch {\n logger.error(\n `There was an error copying your GoogleService-Info.plist file. You can copy it manually into ${iosPath}/GoogleService-Info.plist`\n );\n }\n } else {\n logger.error(\n `The Google Services file provided in ${googleServicesFile} doesn't seem to exist. You can copy it manually into ${iosPath}/GoogleService-Info.plist`\n );\n }\n\n return props;\n });\n};\n\nfunction addFileToXcodeProject(project: XcodeProject, fileName: string) {\n const groupName = 'Resources';\n const filepath = fileName;\n\n if (!IOSConfig.XcodeUtils.ensureGroupRecursively(project, groupName)) {\n logger.error(\n `Error copying GoogleService-Info.plist. Failed to find or create '${groupName}' group in Xcode.`\n );\n return;\n }\n\n // Add GoogleService-Info.plist to the Xcode project\n IOSConfig.XcodeUtils.addResourceFileToGroup({\n project,\n filepath,\n groupName,\n isBuildFile: true,\n });\n}\n"],"mappings":";;;;;;AACA,IAAAA,cAAA,GAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAEO,MAAMI,0BAEZ,GAAGA,CAACC,MAAM,EAAEC,QAAQ,KAAK;EACxB,OAAO,IAAAC,+BAAgB,EAACF,MAAM,EAAE,MAAOG,KAAK,IAAK;IAAA,IAAAC,qBAAA;IAC/C,MAAMC,MAAM,GAAG,IAAAC,wBAAiB,EAACL,QAAQ,CAAC;IAC1C,IAAI,CAACI,MAAM,EAAE;MACX;MACA,OAAOF,KAAK;IACd;IAEAI,cAAM,CAACC,IAAI,CACT,0GAA0G,GAC1G,2DACF,CAAC;;IAED;IACA,MAAMC,OAAO,GAAGN,KAAK,CAACO,UAAU,CAACC,mBAAmB;IACpD,MAAMC,kBAAkB,IAAAR,qBAAA,GAAGH,QAAQ,CAACY,gBAAgB,cAAAT,qBAAA,uBAAzBA,qBAAA,CAA2BQ,kBAAkB;IACxE,MAAME,OAAO,GAAGX,KAAK,CAACO,UAAU,CAACK,WAAW;IAE5C,IAAIC,8BAAc,CAACC,MAAM,CAAC,GAAGR,OAAO,2BAA2B,CAAC,EAAE;MAChEF,cAAM,CAACC,IAAI,CACT,wBAAwBC,OAAO,wCACjC,CAAC;MACD,OAAON,KAAK;IACd;IAEA,IACEa,8BAAc,CAACC,MAAM,CAAC,GAAGR,OAAO,IAAIK,OAAO,2BAA2B,CAAC,EACvE;MACA;MACA;MACAP,cAAM,CAACC,IAAI,CACT,wBAAwBC,OAAO,IAAIK,OAAO,wCAC5C,CAAC;MACD,OAAOX,KAAK;IACd;IAEA,IAAIS,kBAAkB,IAAII,8BAAc,CAACC,MAAM,CAACL,kBAAkB,CAAC,EAAE;MAAA,IAAAM,WAAA;MACnE,KAAAA,WAAA,GAAIlB,MAAM,CAACmB,GAAG,cAAAD,WAAA,eAAVA,WAAA,CAAYN,kBAAkB,EAAE;QAClCL,cAAM,CAACa,IAAI,CACT,0HAA0H,GAC1H,uIACF,CAAC;MACH;MAEA,IAAI;QACFJ,8BAAc,CAACK,QAAQ,CACrBT,kBAAkB,EAClB,GAAGH,OAAO,2BACZ,CAAC;QAEDa,qBAAqB,CAACnB,KAAK,CAACoB,UAAU,EAAE,0BAA0B,CAAC;MACrE,CAAC,CAAC,MAAM;QACNhB,cAAM,CAACiB,KAAK,CACV,gGAAgGf,OAAO,2BACzG,CAAC;MACH;IACF,CAAC,MAAM;MACLF,cAAM,CAACiB,KAAK,CACV,wCAAwCZ,kBAAkB,yDAAyDH,OAAO,2BAC5H,CAAC;IACH;IAEA,OAAON,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAACsB,OAAA,CAAA1B,0BAAA,GAAAA,0BAAA;AAEF,SAASuB,qBAAqBA,CAACI,OAAqB,EAAEC,QAAgB,EAAE;EACtE,MAAMC,SAAS,GAAG,WAAW;EAC7B,MAAMC,QAAQ,GAAGF,QAAQ;EAEzB,IAAI,CAACG,wBAAS,CAACC,UAAU,CAACC,sBAAsB,CAACN,OAAO,EAAEE,SAAS,CAAC,EAAE;IACpErB,cAAM,CAACiB,KAAK,CACV,qEAAqEI,SAAS,mBAChF,CAAC;IACD;EACF;;EAEA;EACAE,wBAAS,CAACC,UAAU,CAACE,sBAAsB,CAAC;IAC1CP,OAAO;IACPG,QAAQ;IACRD,SAAS;IACTM,WAAW,EAAE;EACf,CAAC,CAAC;AACJ","ignoreList":[]}
|