customerio-expo-plugin 2.0.1 → 2.0.3

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.
Files changed (25) hide show
  1. package/package.json +9 -10
  2. package/plugin/lib/commonjs/ios/withAppDelegateModifications.js +5 -3
  3. package/plugin/lib/commonjs/ios/withAppDelegateModifications.js.map +1 -1
  4. package/plugin/lib/commonjs/ios/withCIOIos.js +48 -5
  5. package/plugin/lib/commonjs/ios/withCIOIos.js.map +1 -1
  6. package/plugin/lib/commonjs/ios/withNotificationsXcodeProject.js +39 -23
  7. package/plugin/lib/commonjs/ios/withNotificationsXcodeProject.js.map +1 -1
  8. package/plugin/lib/commonjs/ios/withXcodeProject.js +2 -13
  9. package/plugin/lib/commonjs/ios/withXcodeProject.js.map +1 -1
  10. package/plugin/lib/commonjs/types/cio-types.js.map +1 -1
  11. package/plugin/lib/module/ios/withAppDelegateModifications.js +5 -3
  12. package/plugin/lib/module/ios/withAppDelegateModifications.js.map +1 -1
  13. package/plugin/lib/module/ios/withCIOIos.js +48 -5
  14. package/plugin/lib/module/ios/withCIOIos.js.map +1 -1
  15. package/plugin/lib/module/ios/withNotificationsXcodeProject.js +39 -23
  16. package/plugin/lib/module/ios/withNotificationsXcodeProject.js.map +1 -1
  17. package/plugin/lib/module/ios/withXcodeProject.js +2 -13
  18. package/plugin/lib/module/ios/withXcodeProject.js.map +1 -1
  19. package/plugin/lib/module/types/cio-types.js.map +1 -1
  20. package/plugin/lib/typescript/types/cio-types.d.ts +37 -12
  21. package/plugin/src/ios/withAppDelegateModifications.ts +5 -10
  22. package/plugin/src/ios/withCIOIos.ts +57 -6
  23. package/plugin/src/ios/withNotificationsXcodeProject.ts +53 -45
  24. package/plugin/src/ios/withXcodeProject.ts +2 -10
  25. package/plugin/src/types/cio-types.ts +47 -12
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "customerio-expo-plugin",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Expo config plugin for the Customer IO React Native SDK",
5
5
  "main": "plugin/lib/commonjs/index",
6
6
  "module": "plugin/lib/module/index",
@@ -33,8 +33,7 @@
33
33
  "compatibility:validate-plugin": "node scripts/compatibility/validate-plugin.js",
34
34
  "compatibility:run-compatibility-tests": "node scripts/compatibility/run-compatibility-tests.js",
35
35
  "setup-test-app": "bash scripts/setup-test-app.sh",
36
- "cleanup": "bash scripts/cleanup-after-tests.sh",
37
- "test-plugin": "npm run setup-test-app && npm run test && npm run cleanup",
36
+ "test-plugin": "bash scripts/test-plugin.sh",
38
37
  "cleanAll": "bash scripts/clean-all.sh",
39
38
  "buildAll": "bash scripts/build-all.sh",
40
39
  "cleanAndBuildAll": "npm run cleanAll && npm run buildAll"
@@ -54,11 +53,12 @@
54
53
  "registry": "https://registry.npmjs.org/"
55
54
  },
56
55
  "peerDependencies": {
57
- "customerio-reactnative": "4.2.3"
56
+ "customerio-reactnative": "4.2.7"
58
57
  },
59
58
  "devDependencies": {
60
59
  "@expo/config-plugins": "^4.1.4",
61
60
  "@expo/config-types": "^44.0.0",
61
+ "@types/jest": "^29.5.14",
62
62
  "@typescript-eslint/eslint-plugin": "^5.21.0",
63
63
  "@typescript-eslint/parser": "^5.21.0",
64
64
  "eslint": "^8.14.0",
@@ -66,15 +66,14 @@
66
66
  "eslint-plugin-prettier": "^4.0.0",
67
67
  "expo-build-properties": "^0.2.0",
68
68
  "expo-module-scripts": "^2.0.0",
69
+ "gradle-to-js": "^2.0.1",
70
+ "jest": "^29.2.1",
71
+ "jest-environment-jsdom": "^29.7.0",
69
72
  "prettier": "^2.6.2",
70
73
  "react-native-builder-bob": "^0.18.3",
71
- "typescript": "^4.6.4",
72
- "xcode": "^3.0.1",
73
- "@types/jest": "^29.5.14",
74
- "jest": "^29.7.0",
75
- "jest-environment-jsdom": "^29.7.0",
76
74
  "ts-jest": "^29.2.5",
77
- "gradle-to-js": "^2.0.1"
75
+ "typescript": "^4.6.4",
76
+ "xcode": "^3.0.1"
78
77
  },
79
78
  "commitlint": {
80
79
  "extends": [
@@ -112,6 +112,7 @@ const withAppDelegateModifications = (configOuter, props) => {
112
112
  const regex = new RegExp(`#import <${config.modRequest.projectName}-Swift.h>`);
113
113
  const match = stringContents.match(regex);
114
114
  if (!match) {
115
+ var _props$pushNotificati, _props$pushNotificati2;
115
116
  const headerPath = (0, _Paths.getAppDelegateHeaderFilePath)(config.modRequest.projectRoot);
116
117
  let headerContent = await _fileManagement.FileManagement.read(headerPath);
117
118
  headerContent = addAppdelegateHeaderModification(headerContent);
@@ -119,12 +120,13 @@ const withAppDelegateModifications = (configOuter, props) => {
119
120
  stringContents = addImport(stringContents, config.modRequest.projectName);
120
121
  stringContents = addNotificationHandlerDeclaration(stringContents);
121
122
 
122
- // any other value would be treated as true, it has to be explicitly false to disable
123
- if (props.disableNotificationRegistration !== undefined && props.disableNotificationRegistration === false) {
123
+ // unless this property is explicity set to true, push notification
124
+ // registration will be added to the AppDelegate
125
+ if (((_props$pushNotificati = props.pushNotification) === null || _props$pushNotificati === void 0 ? void 0 : _props$pushNotificati.disableNotificationRegistration) !== true) {
124
126
  stringContents = addNotificationConfiguration(stringContents);
125
127
  }
126
128
  stringContents = addInitializeNativeCioSdk(stringContents);
127
- if (props.handleDeeplinkInKilledState !== undefined && props.handleDeeplinkInKilledState === true) {
129
+ if (((_props$pushNotificati2 = props.pushNotification) === null || _props$pushNotificati2 === void 0 ? void 0 : _props$pushNotificati2.handleDeeplinkInKilledState) === true) {
128
130
  stringContents = addHandleDeeplinkInKilledState(stringContents);
129
131
  }
130
132
  stringContents = addDidFailToRegisterForRemoteNotificationsWithError(stringContents);
@@ -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","headerPath","getAppDelegateHeaderFilePath","projectRoot","headerContent","FileManagement","read","write","disableNotificationRegistration","handleDeeplinkInKilledState","isFcmPushProvider","console","log","exports"],"sources":["withAppDelegateModifications.ts"],"sourcesContent":["import { ConfigPlugin, 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_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET,\n CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET,\n CIO_DEEPLINK_COMMENT_REGEX,\n CIO_INITIALIZECIOSDK_SNIPPET,\n} from '../helpers/constants/ios';\nimport {\n injectCodeBeforeMultiLineRegex,\n injectCodeByLineNumber,\n injectCodeByMultiLineRegex,\n injectCodeByMultiLineRegexAndReplaceLine,\n replaceCodeByRegex,\n matchRegexExists,\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 = (stringContents: string) => {\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 = undefined;\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 // any other value would be treated as true, it has to be explicitly false to disable\n if (\n props.disableNotificationRegistration !== undefined &&\n props.disableNotificationRegistration === false\n ) {\n stringContents = addNotificationConfiguration(stringContents);\n }\n\n stringContents = addInitializeNativeCioSdk(stringContents);\n\n if (\n props.handleDeeplinkInKilledState !== undefined &&\n props.handleDeeplinkInKilledState === true\n ) {\n stringContents = addHandleDeeplinkInKilledState(stringContents);\n }\n\n stringContents =\n addDidFailToRegisterForRemoteNotificationsWithError(stringContents);\n stringContents =\n addDidRegisterForRemoteNotificationsWithDeviceToken(stringContents);\n\n if (isFcmPushProvider(props)) {\n stringContents = 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","_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 { ConfigPlugin, 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_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX,\n CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET,\n CIO_DIDFINISHLAUNCHINGMETHOD_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX,\n CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET,\n CIO_LAUNCHOPTIONS_DEEPLINK_MODIFIEDOPTIONS_REGEX,\n CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET,\n CIO_LAUNCHOPTIONS_MODIFIEDOPTIONS_SNIPPET,\n CIO_RCTBRIDGE_DEEPLINK_MODIFIEDOPTIONS_SNIPPET,\n CIO_DEEPLINK_COMMENT_REGEX,\n CIO_INITIALIZECIOSDK_SNIPPET,\n} from '../helpers/constants/ios';\nimport {\n injectCodeBeforeMultiLineRegex,\n injectCodeByLineNumber,\n injectCodeByMultiLineRegex,\n injectCodeByMultiLineRegexAndReplaceLine,\n replaceCodeByRegex,\n matchRegexExists,\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 = (stringContents: string) => {\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 = undefined;\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 = 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":[]}
@@ -9,12 +9,55 @@ var _withNotificationsXcodeProject = require("./withNotificationsXcodeProject");
9
9
  var _withXcodeProject = require("./withXcodeProject");
10
10
  var _withGoogleServicesJsonFile = require("./withGoogleServicesJsonFile");
11
11
  function withCIOIos(config, props) {
12
- if (props.pushNotification) {
13
- config = (0, _withAppDelegateModifications.withAppDelegateModifications)(config, props);
14
- config = (0, _withNotificationsXcodeProject.withCioNotificationsXcodeProject)(config, props);
15
- config = (0, _withXcodeProject.withCioXcodeProject)(config, props);
16
- config = (0, _withGoogleServicesJsonFile.withGoogleServicesJsonFile)(config, props);
12
+ const cioProps = mergeDeprecatedPropertiesAndLogWarnings(props);
13
+ if (cioProps.pushNotification) {
14
+ config = (0, _withAppDelegateModifications.withAppDelegateModifications)(config, cioProps);
15
+ config = (0, _withNotificationsXcodeProject.withCioNotificationsXcodeProject)(config, cioProps);
16
+ config = (0, _withXcodeProject.withCioXcodeProject)(config, cioProps);
17
+ config = (0, _withGoogleServicesJsonFile.withGoogleServicesJsonFile)(config, cioProps);
17
18
  }
18
19
  return config;
19
20
  }
21
+
22
+ /** The basic purpose of this function is to centralize where we handle the deprecation
23
+ by merging the deprecated properties into the new ios.pushNotification.* properties
24
+ and logging a warning if they are set. This way, we can remove the deprecated properties
25
+ from the top level of the ios object in the future, and update this function
26
+ while the rest of the plugin code remains unchanged.
27
+ */
28
+ const mergeDeprecatedPropertiesAndLogWarnings = props => {
29
+ // The deprecatedTopLevelProperties maps the top level properties
30
+ // that are deprecated to the new ios.pushNotification.* properties
31
+ // that should be used instead. The deprecated properties are
32
+ // still available for backwards compatibility, but they will
33
+ // be removed in the future.
34
+
35
+ const deprecatedTopLevelProperties = {
36
+ showPushAppInForeground: props.showPushAppInForeground,
37
+ autoTrackPushEvents: props.autoTrackPushEvents,
38
+ handleDeeplinkInKilledState: props.handleDeeplinkInKilledState,
39
+ disableNotificationRegistration: props.disableNotificationRegistration,
40
+ autoFetchDeviceToken: props.autoFetchDeviceToken
41
+ };
42
+
43
+ // loop over all the deprecated properties and log a warning if they are set
44
+ Object.entries(deprecatedTopLevelProperties).forEach(([key, value]) => {
45
+ if (value !== undefined) {
46
+ console.warn(`The ios.${key} property is deprecated. Please use ios.pushNotification.${key} instead.`);
47
+ if (props.pushNotification === undefined) {
48
+ props.pushNotification = {};
49
+ }
50
+ const propKey = key;
51
+ if (props.pushNotification[propKey] === undefined) {
52
+ props.pushNotification = {
53
+ ...props.pushNotification,
54
+ [propKey]: value
55
+ };
56
+ } else {
57
+ console.warn(`The ios.${key} property is deprecated. Since the value of ios.pushNotification.${key} is set, it will be used.`);
58
+ }
59
+ }
60
+ });
61
+ return props;
62
+ };
20
63
  //# sourceMappingURL=withCIOIos.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_withAppDelegateModifications","require","_withNotificationsXcodeProject","_withXcodeProject","_withGoogleServicesJsonFile","withCIOIos","config","props","pushNotification","withAppDelegateModifications","withCioNotificationsXcodeProject","withCioXcodeProject","withGoogleServicesJsonFile"],"sources":["withCIOIos.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { withAppDelegateModifications } from './withAppDelegateModifications';\nimport { withCioNotificationsXcodeProject } from './withNotificationsXcodeProject';\nimport { withCioXcodeProject } from './withXcodeProject';\nimport { withGoogleServicesJsonFile } from './withGoogleServicesJsonFile';\n\nexport function withCIOIos(\n config: ExpoConfig,\n props: CustomerIOPluginOptionsIOS\n) {\n if (props.pushNotification) {\n config = withAppDelegateModifications(config, props);\n config = withCioNotificationsXcodeProject(config, props);\n config = withCioXcodeProject(config, props);\n config = withGoogleServicesJsonFile(config, props);\n }\n\n return config;\n}\n"],"mappings":";;;;;;AAGA,IAAAA,6BAAA,GAAAC,OAAA;AACA,IAAAC,8BAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,2BAAA,GAAAH,OAAA;AAEO,SAASI,UAAUA,CACxBC,MAAkB,EAClBC,KAAiC,EACjC;EACA,IAAIA,KAAK,CAACC,gBAAgB,EAAE;IAC1BF,MAAM,GAAG,IAAAG,0DAA4B,EAACH,MAAM,EAAEC,KAAK,CAAC;IACpDD,MAAM,GAAG,IAAAI,+DAAgC,EAACJ,MAAM,EAAEC,KAAK,CAAC;IACxDD,MAAM,GAAG,IAAAK,qCAAmB,EAACL,MAAM,EAAEC,KAAK,CAAC;IAC3CD,MAAM,GAAG,IAAAM,sDAA0B,EAACN,MAAM,EAAEC,KAAK,CAAC;EACpD;EAEA,OAAOD,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"names":["_withAppDelegateModifications","require","_withNotificationsXcodeProject","_withXcodeProject","_withGoogleServicesJsonFile","withCIOIos","config","props","cioProps","mergeDeprecatedPropertiesAndLogWarnings","pushNotification","withAppDelegateModifications","withCioNotificationsXcodeProject","withCioXcodeProject","withGoogleServicesJsonFile","deprecatedTopLevelProperties","showPushAppInForeground","autoTrackPushEvents","handleDeeplinkInKilledState","disableNotificationRegistration","autoFetchDeviceToken","Object","entries","forEach","key","value","undefined","console","warn","propKey"],"sources":["withCIOIos.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\n\nimport type { CustomerIOPluginOptionsIOS, CustomerIOPluginPushNotificationOptions } from '../types/cio-types';\nimport { withAppDelegateModifications } from './withAppDelegateModifications';\nimport { withCioNotificationsXcodeProject } from './withNotificationsXcodeProject';\nimport { withCioXcodeProject } from './withXcodeProject';\nimport { withGoogleServicesJsonFile } from './withGoogleServicesJsonFile';\n\nexport function withCIOIos(\n config: ExpoConfig,\n props: CustomerIOPluginOptionsIOS\n) {\n const cioProps = mergeDeprecatedPropertiesAndLogWarnings(props);\n if (cioProps.pushNotification) {\n config = withAppDelegateModifications(config, cioProps);\n config = withCioNotificationsXcodeProject(config, cioProps);\n config = withCioXcodeProject(config, cioProps);\n config = withGoogleServicesJsonFile(config, cioProps);\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) => {\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 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 console.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 console.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":";;;;;;AAGA,IAAAA,6BAAA,GAAAC,OAAA;AACA,IAAAC,8BAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,2BAAA,GAAAH,OAAA;AAEO,SAASI,UAAUA,CACxBC,MAAkB,EAClBC,KAAiC,EACjC;EACA,MAAMC,QAAQ,GAAGC,uCAAuC,CAACF,KAAK,CAAC;EAC/D,IAAIC,QAAQ,CAACE,gBAAgB,EAAE;IAC7BJ,MAAM,GAAG,IAAAK,0DAA4B,EAACL,MAAM,EAAEE,QAAQ,CAAC;IACvDF,MAAM,GAAG,IAAAM,+DAAgC,EAACN,MAAM,EAAEE,QAAQ,CAAC;IAC3DF,MAAM,GAAG,IAAAO,qCAAmB,EAACP,MAAM,EAAEE,QAAQ,CAAC;IAC9CF,MAAM,GAAG,IAAAQ,sDAA0B,EAACR,MAAM,EAAEE,QAAQ,CAAC;EACvD;EAEA,OAAOF,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,uCAAuC,GAC3CF,KAAiC,IAC9B;EACH;EACA;EACA;EACA;EACA;;EAEA,MAAMQ,4BAA4B,GAAG;IACnCC,uBAAuB,EAAET,KAAK,CAACS,uBAAuB;IACtDC,mBAAmB,EAAEV,KAAK,CAACU,mBAAmB;IAC9CC,2BAA2B,EAAEX,KAAK,CAACW,2BAA2B;IAC9DC,+BAA+B,EAAEZ,KAAK,CAACY,+BAA+B;IACtEC,oBAAoB,EAAEb,KAAK,CAACa;EAC9B,CAAC;;EAED;EACAC,MAAM,CAACC,OAAO,CAACP,4BAA4B,CAAC,CAACQ,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;IACrE,IAAIA,KAAK,KAAKC,SAAS,EAAE;MACvBC,OAAO,CAACC,IAAI,CACV,WAAWJ,GAAG,4DAA4DA,GAAG,WAC/E,CAAC;MAED,IAAIjB,KAAK,CAACG,gBAAgB,KAAKgB,SAAS,EAAE;QACxCnB,KAAK,CAACG,gBAAgB,GAAG,CAAC,CAA4C;MACxE;MACA,MAAMmB,OAAO,GAAGL,GAAoD;MACpE,IAAIjB,KAAK,CAACG,gBAAgB,CAACmB,OAAO,CAAC,KAAKH,SAAS,EAAE;QACjDnB,KAAK,CAACG,gBAAgB,GAAG;UACvB,GAAGH,KAAK,CAACG,gBAAgB;UACzB,CAACmB,OAAO,GAAGJ;QACb,CAAC;MACH,CAAC,MAAM;QACLE,OAAO,CAACC,IAAI,CACV,WAAWJ,GAAG,oEAAoEA,GAAG,2BACvF,CAAC;MACH;IACF;EACF,CAAC,CAAC;EAEF,OAAOjB,KAAK;AACd,CAAC","ignoreList":[]}
@@ -19,7 +19,7 @@ const addNotificationServiceExtension = async (options, xcodeProject) => {
19
19
  if (options.pushNotification) {
20
20
  await addPushNotificationFile(options, xcodeProject);
21
21
  }
22
- if ((_options$pushNotifica = options.pushNotification) !== null && _options$pushNotifica !== void 0 && _options$pushNotifica.useRichPush) {
22
+ if (((_options$pushNotifica = options.pushNotification) === null || _options$pushNotifica === void 0 ? void 0 : _options$pushNotifica.useRichPush) === true) {
23
23
  await addRichPushXcodeProj(options, xcodeProject);
24
24
  }
25
25
  return xcodeProject;
@@ -38,7 +38,6 @@ const withCioNotificationsXcodeProject = (configOuter, props) => {
38
38
  const {
39
39
  appleTeamId,
40
40
  iosDeploymentTarget,
41
- pushNotification,
42
41
  useFrameworks
43
42
  } = props;
44
43
  if (ios === undefined) throw new Error('Adding NotificationServiceExtension failed: ios config missing from app.config.js or app.json.');
@@ -70,8 +69,7 @@ const withCioNotificationsXcodeProject = (configOuter, props) => {
70
69
  iosPath: platformProjectRoot,
71
70
  appName: projectName,
72
71
  useFrameworks,
73
- iosDeploymentTarget,
74
- pushNotification
72
+ iosDeploymentTarget
75
73
  };
76
74
  const modifiedProjectFile = await addNotificationServiceExtension(options, config.modResults);
77
75
  if (modifiedProjectFile) {
@@ -110,7 +108,7 @@ const addRichPushXcodeProj = async (options, xcodeProject) => {
110
108
  // Copy platform-specific files
111
109
  platformSpecificFiles.forEach(filename => {
112
110
  const targetFile = getTargetFile(filename);
113
- _fileManagement.FileManagement.copyFile(`${_ios.LOCAL_PATH_TO_CIO_NSE_FILES}/${isFcmProvider ? "fcm" : "apn"}/${filename}`, targetFile);
111
+ _fileManagement.FileManagement.copyFile(`${_ios.LOCAL_PATH_TO_CIO_NSE_FILES}/${isFcmProvider ? 'fcm' : 'apn'}/${filename}`, targetFile);
114
112
  });
115
113
 
116
114
  // Copy common files
@@ -193,25 +191,29 @@ const updateNseInfoPlist = payload => {
193
191
  _fileManagement.FileManagement.writeFile(payload.infoPlistTargetFile, plistFileString);
194
192
  };
195
193
  const updateNseEnv = (options, envFileName) => {
196
- var _options$pushNotifica2, _options$pushNotifica4;
194
+ var _options$pushNotifica2;
197
195
  const CDP_API_KEY_RE = /\{\{CDP_API_KEY\}\}/;
198
196
  const REGION_RE = /\{\{REGION\}\}/;
199
197
  let envFileContent = _fileManagement.FileManagement.readFile(envFileName);
200
- if ((_options$pushNotifica2 = options.pushNotification) !== null && _options$pushNotifica2 !== void 0 && (_options$pushNotifica2 = _options$pushNotifica2.env) !== null && _options$pushNotifica2 !== void 0 && _options$pushNotifica2.cdpApiKey) {
201
- var _options$pushNotifica3;
202
- envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, CDP_API_KEY_RE, (_options$pushNotifica3 = options.pushNotification) === null || _options$pushNotifica3 === void 0 || (_options$pushNotifica3 = _options$pushNotifica3.env) === null || _options$pushNotifica3 === void 0 ? void 0 : _options$pushNotifica3.cdpApiKey);
198
+ const {
199
+ cdpApiKey,
200
+ region
201
+ } = ((_options$pushNotifica2 = options.pushNotification) === null || _options$pushNotifica2 === void 0 ? void 0 : _options$pushNotifica2.env) || {
202
+ cdpApiKey: undefined,
203
+ region: undefined
204
+ };
205
+ if (!cdpApiKey) {
206
+ throw new Error('Adding NotificationServiceExtension failed: ios.pushNotification.env.cdpApiKey is missing from app.config.js or app.json.');
203
207
  }
204
- if ((_options$pushNotifica4 = options.pushNotification) !== null && _options$pushNotifica4 !== void 0 && (_options$pushNotifica4 = _options$pushNotifica4.env) !== null && _options$pushNotifica4 !== void 0 && _options$pushNotifica4.region) {
205
- var _options$pushNotifica5;
208
+ envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, CDP_API_KEY_RE, cdpApiKey);
209
+ if (region) {
206
210
  const regionMap = {
207
211
  us: 'Region.US',
208
212
  eu: 'Region.EU'
209
213
  };
210
- const region = (_options$pushNotifica5 = options.pushNotification) === null || _options$pushNotifica5 === void 0 || (_options$pushNotifica5 = _options$pushNotifica5.env) === null || _options$pushNotifica5 === void 0 || (_options$pushNotifica5 = _options$pushNotifica5.region) === null || _options$pushNotifica5 === void 0 ? void 0 : _options$pushNotifica5.toLowerCase();
211
- const mappedRegion = regionMap[region] || '';
214
+ const mappedRegion = regionMap[region.toLowerCase()] || '';
212
215
  if (!mappedRegion) {
213
- var _options$pushNotifica6;
214
- console.warn(`${(_options$pushNotifica6 = options.pushNotification) === null || _options$pushNotifica6 === void 0 || (_options$pushNotifica6 = _options$pushNotifica6.env) === null || _options$pushNotifica6 === void 0 ? void 0 : _options$pushNotifica6.region} is an invalid region. Please use the values from the docs: https://customer.io/docs/sdk/expo/getting-started/#configure-the-plugin`);
216
+ console.warn(`${region} is an invalid region. Please use the values from the docs: https://customer.io/docs/sdk/expo/getting-started/#configure-the-plugin`);
215
217
  } else {
216
218
  envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, REGION_RE, mappedRegion);
217
219
  }
@@ -226,7 +228,7 @@ async function addPushNotificationFile(options, xcodeProject) {
226
228
  } = options;
227
229
  const isFcmProvider = (0, _utils.isFcmPushProvider)(options);
228
230
  // PushService.swift is platform-specific and always lives in the platform folder
229
- const sourceFile = `${isFcmProvider ? "fcm" : "apn"}/PushService.swift`;
231
+ const sourceFile = `${isFcmProvider ? 'fcm' : 'apn'}/PushService.swift`;
230
232
  const targetFileName = 'PushService.swift';
231
233
  const appPath = `${iosPath}/${appName}`;
232
234
  const getTargetFile = filename => `${appPath}/${filename}`;
@@ -252,22 +254,36 @@ async function addPushNotificationFile(options, xcodeProject) {
252
254
  xcodeProject.addSourceFile(`${appName}/${targetFileName}`, null, group);
253
255
  }
254
256
  const updatePushFile = (options, envFileName) => {
257
+ var _options$pushNotifica3, _options$pushNotifica4, _options$pushNotifica5, _options$pushNotifica6, _options$pushNotifica7;
255
258
  const REGISTER_RE = /\{\{REGISTER_SNIPPET\}\}/;
256
259
  let envFileContent = _fileManagement.FileManagement.readFile(envFileName);
260
+ const disableNotificationRegistration = (_options$pushNotifica3 = options.pushNotification) === null || _options$pushNotifica3 === void 0 ? void 0 : _options$pushNotifica3.disableNotificationRegistration;
261
+ const {
262
+ cdpApiKey,
263
+ region
264
+ } = ((_options$pushNotifica4 = options.pushNotification) === null || _options$pushNotifica4 === void 0 ? void 0 : _options$pushNotifica4.env) || {
265
+ cdpApiKey: undefined,
266
+ region: undefined
267
+ };
268
+ if (!cdpApiKey) {
269
+ throw new Error('Adding NotificationServiceExtension failed: ios.pushNotification.env.cdpApiKey is missing from app.config.js or app.json.');
270
+ }
257
271
  let snippet = '';
258
- if (options.disableNotificationRegistration !== undefined && options.disableNotificationRegistration === false) {
272
+ // unless this property is explicity set to true, push notification
273
+ // registration will be added to the AppDelegate
274
+ if (disableNotificationRegistration !== true) {
259
275
  snippet = _ios.CIO_REGISTER_PUSHNOTIFICATION_SNIPPET;
260
276
  }
261
277
  envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, REGISTER_RE, snippet);
262
- if (options.pushNotification) {
263
- envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{CDP_API_KEY\}\}/, options.pushNotification.env.cdpApiKey);
264
- envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{REGION\}\}/, options.pushNotification.env.region.toUpperCase());
278
+ envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{CDP_API_KEY\}\}/, cdpApiKey);
279
+ if (region) {
280
+ envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{REGION\}\}/, region.toUpperCase());
265
281
  }
266
- const autoTrackPushEvents = options.autoTrackPushEvents === undefined || options.autoTrackPushEvents === true;
282
+ const autoTrackPushEvents = ((_options$pushNotifica5 = options.pushNotification) === null || _options$pushNotifica5 === void 0 ? void 0 : _options$pushNotifica5.autoTrackPushEvents) !== false;
267
283
  envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{AUTO_TRACK_PUSH_EVENTS\}\}/, autoTrackPushEvents.toString());
268
- const autoFetchDeviceToken = options.autoFetchDeviceToken === undefined || options.autoFetchDeviceToken === true;
284
+ const autoFetchDeviceToken = ((_options$pushNotifica6 = options.pushNotification) === null || _options$pushNotifica6 === void 0 ? void 0 : _options$pushNotifica6.autoFetchDeviceToken) !== false;
269
285
  envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{AUTO_FETCH_DEVICE_TOKEN\}\}/, autoFetchDeviceToken.toString());
270
- const showPushAppInForeground = options.showPushAppInForeground === undefined || options.showPushAppInForeground === true;
286
+ const showPushAppInForeground = ((_options$pushNotifica7 = options.pushNotification) === null || _options$pushNotifica7 === void 0 ? void 0 : _options$pushNotifica7.showPushAppInForeground) !== false;
271
287
  envFileContent = (0, _codeInjection.replaceCodeByRegex)(envFileContent, /\{\{SHOW_PUSH_APP_IN_FOREGROUND\}\}/, showPushAppInForeground.toString());
272
288
  _fileManagement.FileManagement.writeFile(envFileName, envFileContent);
273
289
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","_ios","_codeInjection","_injectCIOPodfileCode","_fileManagement","_utils","PLIST_FILENAME","CIO_NOTIFICATION_TARGET_NAME","ENV_FILENAME","TARGETED_DEVICE_FAMILY","addNotificationServiceExtension","options","xcodeProject","_options$pushNotifica","pushNotification","addPushNotificationFile","useRichPush","addRichPushXcodeProj","error","console","withCioNotificationsXcodeProject","configOuter","props","withXcodeProject","config","modRequest","ios","version","bundleShortVersion","appleTeamId","iosDeploymentTarget","useFrameworks","undefined","Error","projectName","platformProjectRoot","bundleIdentifier","buildNumber","bundleVersion","DEFAULT_BUNDLE_VERSION","iosPath","appName","modifiedProjectFile","modResults","exports","isFcmProvider","isFcmPushProvider","injectCIONotificationPodfileCode","pbxTargetByName","warn","nsePath","FileManagement","mkdir","recursive","platformSpecificFiles","commonFiles","getTargetFile","filename","forEach","targetFile","copyFile","LOCAL_PATH_TO_CIO_NSE_FILES","infoPlistTargetFile","updateNseInfoPlist","updateNseEnv","extGroup","addPbxGroup","groups","hash","project","objects","Object","keys","key","name","path","addToPbxGroup","uuid","projObjects","nseTarget","addTarget","addBuildPhase","configurations","pbxXCBuildConfigurationSection","buildSettings","PRODUCT_NAME","buildSettingsObj","DEVELOPMENT_TEAM","IPHONEOS_DEPLOYMENT_TARGET","CODE_SIGN_STYLE","SWIFT_VERSION","addTargetAttribute","payload","BUNDLE_SHORT_VERSION_RE","BUNDLE_VERSION_RE","plistFileString","readFile","replaceCodeByRegex","writeFile","envFileName","_options$pushNotifica2","_options$pushNotifica4","CDP_API_KEY_RE","REGION_RE","envFileContent","env","cdpApiKey","_options$pushNotifica3","region","_options$pushNotifica5","regionMap","us","eu","toLowerCase","mappedRegion","_options$pushNotifica6","sourceFile","targetFileName","appPath","exists","log","updatePushFile","group","pbxCreateGroup","classesKey","findPBXGroupKey","addSourceFile","REGISTER_RE","snippet","disableNotificationRegistration","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET","toUpperCase","autoTrackPushEvents","toString","autoFetchDeviceToken","showPushAppInForeground"],"sources":["withNotificationsXcodeProject.ts"],"sourcesContent":["import {\n ConfigPlugin,\n XcodeProject,\n withXcodeProject,\n} from '@expo/config-plugins';\n\nimport {\n CIO_NOTIFICATION_TARGET_NAME,\n CIO_REGISTER_PUSHNOTIFICATION_SNIPPET,\n DEFAULT_BUNDLE_VERSION,\n LOCAL_PATH_TO_CIO_NSE_FILES,\n} from '../helpers/constants/ios';\nimport { replaceCodeByRegex } from '../helpers/utils/codeInjection';\nimport { injectCIONotificationPodfileCode } from '../helpers/utils/injectCIOPodfileCode';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { FileManagement } from './../helpers/utils/fileManagement';\nimport { isFcmPushProvider } from './utils';\n\nconst PLIST_FILENAME = `${CIO_NOTIFICATION_TARGET_NAME}-Info.plist`;\nconst ENV_FILENAME = 'Env.swift';\n\nconst TARGETED_DEVICE_FAMILY = `\"1,2\"`;\n\nconst addNotificationServiceExtension = async (\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: XcodeProject\n) => {\n try {\n if (options.pushNotification) {\n await addPushNotificationFile(options, xcodeProject);\n }\n\n if (options.pushNotification?.useRichPush) {\n await addRichPushXcodeProj(options, xcodeProject);\n }\n return xcodeProject;\n } catch (error: any) {\n console.error(error);\n return null;\n }\n};\n\nexport const withCioNotificationsXcodeProject: ConfigPlugin<\n CustomerIOPluginOptionsIOS\n> = (configOuter, props) => {\n return withXcodeProject(configOuter, async (config) => {\n const { modRequest, ios, version: bundleShortVersion } = config;\n const {\n appleTeamId,\n iosDeploymentTarget,\n pushNotification,\n useFrameworks,\n } = props;\n\n if (ios === undefined)\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios config missing from app.config.js or app.json.'\n );\n\n // projectName and platformProjectRoot translates to appName and iosPath in addNotificationServiceExtension()\n const { projectName, platformProjectRoot } = modRequest;\n const { bundleIdentifier, buildNumber } = ios;\n\n if (bundleShortVersion === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: version missing from app.config.js or app.json'\n );\n }\n\n if (bundleIdentifier === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios.bundleIdentifier missing from app.config.js or app.json'\n );\n }\n\n if (projectName === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: name missing from app.config.js or app.json'\n );\n }\n\n const options = {\n ...props,\n appleTeamId,\n bundleIdentifier,\n bundleShortVersion,\n bundleVersion: buildNumber || DEFAULT_BUNDLE_VERSION,\n iosPath: platformProjectRoot,\n appName: projectName,\n useFrameworks,\n iosDeploymentTarget,\n pushNotification,\n };\n\n const modifiedProjectFile = await addNotificationServiceExtension(\n options,\n config.modResults\n );\n\n if (modifiedProjectFile) {\n config.modResults = modifiedProjectFile;\n }\n\n return config;\n });\n};\n\nconst addRichPushXcodeProj = async (\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: any\n) => {\n const {\n appleTeamId,\n bundleIdentifier,\n bundleShortVersion,\n bundleVersion,\n iosPath,\n iosDeploymentTarget,\n useFrameworks,\n } = options;\n\n const isFcmProvider = isFcmPushProvider(options);\n\n await injectCIONotificationPodfileCode(iosPath, useFrameworks, isFcmProvider);\n\n // Check if `CIO_NOTIFICATION_TARGET_NAME` group already exist in the project\n // If true then skip creating a new group to avoid duplicate folders\n if (xcodeProject.pbxTargetByName(CIO_NOTIFICATION_TARGET_NAME)) {\n console.warn(\n `${CIO_NOTIFICATION_TARGET_NAME} already exists in project. Skipping...`\n );\n return;\n }\n\n const nsePath = `${iosPath}/${CIO_NOTIFICATION_TARGET_NAME}`;\n FileManagement.mkdir(nsePath, {\n recursive: true,\n });\n\n const platformSpecificFiles = [\n 'NotificationService.swift',\n ];\n\n const commonFiles = [\n PLIST_FILENAME,\n 'NotificationService.h',\n 'NotificationService.m',\n ENV_FILENAME,\n ];\n\n const getTargetFile = (filename: string) => `${nsePath}/${filename}`;\n // Copy platform-specific files\n platformSpecificFiles.forEach((filename) => {\n const targetFile = getTargetFile(filename);\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/${isFcmProvider ? \"fcm\" : \"apn\"}/${filename}`,\n targetFile\n );\n });\n\n // Copy common files\n commonFiles.forEach((filename) => {\n const targetFile = getTargetFile(filename);\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/common/${filename}`,\n targetFile\n );\n });\n\n /* MODIFY COPIED EXTENSION FILES */\n const infoPlistTargetFile = getTargetFile(PLIST_FILENAME);\n updateNseInfoPlist({\n bundleVersion,\n bundleShortVersion,\n infoPlistTargetFile,\n });\n updateNseEnv(options, getTargetFile(ENV_FILENAME));\n\n // Create new PBXGroup for the extension\n const extGroup = xcodeProject.addPbxGroup(\n [...platformSpecificFiles, ...commonFiles], // Combine platform-specific and common files,\n CIO_NOTIFICATION_TARGET_NAME,\n CIO_NOTIFICATION_TARGET_NAME\n );\n\n // Add the new PBXGroup to the top level group. This makes the\n // files / folder appear in the file explorer in Xcode.\n const groups = xcodeProject.hash.project.objects['PBXGroup'];\n Object.keys(groups).forEach((key) => {\n if (groups[key].name === undefined && groups[key].path === undefined) {\n xcodeProject.addToPbxGroup(extGroup.uuid, key);\n }\n });\n\n // WORK AROUND for codeProject.addTarget BUG\n // Xcode projects don't contain these if there is only one target\n // An upstream fix should be made to the code referenced in this link:\n // - https://github.com/apache/cordova-node-xcode/blob/8b98cabc5978359db88dc9ff2d4c015cba40f150/lib/pbxProject.js#L860\n const projObjects = xcodeProject.hash.project.objects;\n projObjects['PBXTargetDependency'] = projObjects['PBXTargetDependency'] || {};\n projObjects['PBXContainerItemProxy'] =\n projObjects['PBXTargetDependency'] || {};\n\n if (xcodeProject.pbxTargetByName(CIO_NOTIFICATION_TARGET_NAME)) {\n console.warn(\n `${CIO_NOTIFICATION_TARGET_NAME} already exists in project. Skipping...`\n );\n return;\n }\n\n // Add the NSE target\n // This also adds PBXTargetDependency and PBXContainerItemProxy\n const nseTarget = xcodeProject.addTarget(\n CIO_NOTIFICATION_TARGET_NAME,\n 'app_extension',\n CIO_NOTIFICATION_TARGET_NAME,\n `${bundleIdentifier}.richpush`\n );\n\n // Add build phases to the new target\n xcodeProject.addBuildPhase(\n ['NotificationService.m', 'NotificationService.swift', 'Env.swift'],\n 'PBXSourcesBuildPhase',\n 'Sources',\n nseTarget.uuid\n );\n xcodeProject.addBuildPhase(\n [],\n 'PBXResourcesBuildPhase',\n 'Resources',\n nseTarget.uuid\n );\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXFrameworksBuildPhase',\n 'Frameworks',\n nseTarget.uuid\n );\n\n // Edit the Deployment info of the target\n const configurations = xcodeProject.pbxXCBuildConfigurationSection();\n for (const key in configurations) {\n if (\n typeof configurations[key].buildSettings !== 'undefined' &&\n configurations[key].buildSettings.PRODUCT_NAME ===\n `\"${CIO_NOTIFICATION_TARGET_NAME}\"`\n ) {\n const buildSettingsObj = configurations[key].buildSettings;\n buildSettingsObj.DEVELOPMENT_TEAM = appleTeamId;\n buildSettingsObj.IPHONEOS_DEPLOYMENT_TARGET =\n iosDeploymentTarget || '15.1';\n buildSettingsObj.TARGETED_DEVICE_FAMILY = TARGETED_DEVICE_FAMILY;\n buildSettingsObj.CODE_SIGN_STYLE = 'Automatic';\n buildSettingsObj.SWIFT_VERSION = 4.2;\n }\n }\n\n // Add development team to the target & the main\n xcodeProject.addTargetAttribute('DevelopmentTeam', appleTeamId, nseTarget);\n xcodeProject.addTargetAttribute('DevelopmentTeam', appleTeamId);\n};\n\nconst updateNseInfoPlist = (payload: {\n bundleVersion?: string;\n bundleShortVersion?: string;\n infoPlistTargetFile: string;\n}) => {\n const BUNDLE_SHORT_VERSION_RE = /\\{\\{BUNDLE_SHORT_VERSION\\}\\}/;\n const BUNDLE_VERSION_RE = /\\{\\{BUNDLE_VERSION\\}\\}/;\n\n let plistFileString = FileManagement.readFile(payload.infoPlistTargetFile);\n\n if (payload.bundleVersion) {\n plistFileString = replaceCodeByRegex(\n plistFileString,\n BUNDLE_VERSION_RE,\n payload.bundleVersion\n );\n }\n\n if (payload.bundleShortVersion) {\n plistFileString = replaceCodeByRegex(\n plistFileString,\n BUNDLE_SHORT_VERSION_RE,\n payload.bundleShortVersion\n );\n }\n\n FileManagement.writeFile(payload.infoPlistTargetFile, plistFileString);\n};\n\nconst updateNseEnv = (\n options: CustomerIOPluginOptionsIOS,\n envFileName: string\n) => {\n const CDP_API_KEY_RE = /\\{\\{CDP_API_KEY\\}\\}/;\n const REGION_RE = /\\{\\{REGION\\}\\}/;\n\n let envFileContent = FileManagement.readFile(envFileName);\n\n if (options.pushNotification?.env?.cdpApiKey) {\n envFileContent = replaceCodeByRegex(\n envFileContent,\n CDP_API_KEY_RE,\n options.pushNotification?.env?.cdpApiKey\n );\n }\n\n if (options.pushNotification?.env?.region) {\n const regionMap = {\n us: 'Region.US',\n eu: 'Region.EU',\n };\n const region = options.pushNotification?.env?.region?.toLowerCase();\n const mappedRegion = (regionMap as any)[region] || '';\n if (!mappedRegion) {\n console.warn(\n `${options.pushNotification?.env?.region} is an invalid region. Please use the values from the docs: https://customer.io/docs/sdk/expo/getting-started/#configure-the-plugin`\n );\n } else {\n envFileContent = replaceCodeByRegex(\n envFileContent,\n REGION_RE,\n mappedRegion\n );\n }\n }\n\n FileManagement.writeFile(envFileName, envFileContent);\n};\n\nasync function addPushNotificationFile(\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: any\n) {\n // Maybe copy a different file with FCM config based on config\n const { iosPath, appName } = options;\n const isFcmProvider = isFcmPushProvider(options);\n // PushService.swift is platform-specific and always lives in the platform folder\n const sourceFile = `${isFcmProvider ? \"fcm\" : \"apn\"}/PushService.swift`;\n const targetFileName = 'PushService.swift';\n const appPath = `${iosPath}/${appName}`;\n const getTargetFile = (filename: string) => `${appPath}/${filename}`;\n const targetFile = getTargetFile(targetFileName);\n\n // Check whether {file} exists in the project. If false, then add the file\n // If {file} exists then skip and return\n if (!FileManagement.exists(getTargetFile(targetFileName))) {\n FileManagement.mkdir(appPath, {\n recursive: true,\n });\n\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/${sourceFile}`,\n targetFile\n );\n } else {\n console.log(`${getTargetFile(targetFileName)} already exists. Skipping...`);\n return;\n }\n\n updatePushFile(options, targetFile);\n\n const group = xcodeProject.pbxCreateGroup('CustomerIONotifications');\n const classesKey = xcodeProject.findPBXGroupKey({ name: `${appName}` });\n xcodeProject.addToPbxGroup(group, classesKey);\n\n xcodeProject.addSourceFile(`${appName}/${targetFileName}`, null, group);\n}\n\nconst updatePushFile = (\n options: CustomerIOPluginOptionsIOS,\n envFileName: string\n) => {\n const REGISTER_RE = /\\{\\{REGISTER_SNIPPET\\}\\}/;\n\n let envFileContent = FileManagement.readFile(envFileName);\n\n let snippet = '';\n if (\n options.disableNotificationRegistration !== undefined &&\n options.disableNotificationRegistration === false\n ) {\n snippet = CIO_REGISTER_PUSHNOTIFICATION_SNIPPET;\n }\n envFileContent = replaceCodeByRegex(envFileContent, REGISTER_RE, snippet);\n\n if (options.pushNotification) {\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{CDP_API_KEY\\}\\}/,\n options.pushNotification.env.cdpApiKey\n );\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{REGION\\}\\}/,\n options.pushNotification.env.region.toUpperCase()\n );\n }\n\n const autoTrackPushEvents =\n options.autoTrackPushEvents === undefined ||\n options.autoTrackPushEvents === true;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{AUTO_TRACK_PUSH_EVENTS\\}\\}/,\n autoTrackPushEvents.toString()\n );\n\n const autoFetchDeviceToken = \n options.autoFetchDeviceToken === undefined ||\n options.autoFetchDeviceToken === true;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{AUTO_FETCH_DEVICE_TOKEN\\}\\}/,\n autoFetchDeviceToken.toString()\n );\n \n const showPushAppInForeground =\n options.showPushAppInForeground === undefined ||\n options.showPushAppInForeground === true;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{SHOW_PUSH_APP_IN_FOREGROUND\\}\\}/,\n showPushAppInForeground.toString()\n );\n\n FileManagement.writeFile(envFileName, envFileContent);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_configPlugins","require","_ios","_codeInjection","_injectCIOPodfileCode","_fileManagement","_utils","PLIST_FILENAME","CIO_NOTIFICATION_TARGET_NAME","ENV_FILENAME","TARGETED_DEVICE_FAMILY","addNotificationServiceExtension","options","xcodeProject","_options$pushNotifica","pushNotification","addPushNotificationFile","useRichPush","addRichPushXcodeProj","error","console","withCioNotificationsXcodeProject","configOuter","props","withXcodeProject","config","modRequest","ios","version","bundleShortVersion","appleTeamId","iosDeploymentTarget","useFrameworks","undefined","Error","projectName","platformProjectRoot","bundleIdentifier","buildNumber","bundleVersion","DEFAULT_BUNDLE_VERSION","iosPath","appName","modifiedProjectFile","modResults","exports","isFcmProvider","isFcmPushProvider","injectCIONotificationPodfileCode","pbxTargetByName","warn","nsePath","FileManagement","mkdir","recursive","platformSpecificFiles","commonFiles","getTargetFile","filename","forEach","targetFile","copyFile","LOCAL_PATH_TO_CIO_NSE_FILES","infoPlistTargetFile","updateNseInfoPlist","updateNseEnv","extGroup","addPbxGroup","groups","hash","project","objects","Object","keys","key","name","path","addToPbxGroup","uuid","projObjects","nseTarget","addTarget","addBuildPhase","configurations","pbxXCBuildConfigurationSection","buildSettings","PRODUCT_NAME","buildSettingsObj","DEVELOPMENT_TEAM","IPHONEOS_DEPLOYMENT_TARGET","CODE_SIGN_STYLE","SWIFT_VERSION","addTargetAttribute","payload","BUNDLE_SHORT_VERSION_RE","BUNDLE_VERSION_RE","plistFileString","readFile","replaceCodeByRegex","writeFile","envFileName","_options$pushNotifica2","CDP_API_KEY_RE","REGION_RE","envFileContent","cdpApiKey","region","env","regionMap","us","eu","mappedRegion","toLowerCase","sourceFile","targetFileName","appPath","exists","log","updatePushFile","group","pbxCreateGroup","classesKey","findPBXGroupKey","addSourceFile","_options$pushNotifica3","_options$pushNotifica4","_options$pushNotifica5","_options$pushNotifica6","_options$pushNotifica7","REGISTER_RE","disableNotificationRegistration","snippet","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET","toUpperCase","autoTrackPushEvents","toString","autoFetchDeviceToken","showPushAppInForeground"],"sources":["withNotificationsXcodeProject.ts"],"sourcesContent":["import {\n ConfigPlugin,\n XcodeProject,\n withXcodeProject,\n} from '@expo/config-plugins';\n\nimport {\n CIO_NOTIFICATION_TARGET_NAME,\n CIO_REGISTER_PUSHNOTIFICATION_SNIPPET,\n DEFAULT_BUNDLE_VERSION,\n LOCAL_PATH_TO_CIO_NSE_FILES,\n} from '../helpers/constants/ios';\nimport { replaceCodeByRegex } from '../helpers/utils/codeInjection';\nimport { injectCIONotificationPodfileCode } from '../helpers/utils/injectCIOPodfileCode';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { FileManagement } from './../helpers/utils/fileManagement';\nimport { isFcmPushProvider } from './utils';\n\nconst PLIST_FILENAME = `${CIO_NOTIFICATION_TARGET_NAME}-Info.plist`;\nconst ENV_FILENAME = 'Env.swift';\n\nconst TARGETED_DEVICE_FAMILY = `\"1,2\"`;\n\nconst addNotificationServiceExtension = async (\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: XcodeProject\n) => {\n try {\n if (options.pushNotification) {\n await addPushNotificationFile(options, xcodeProject);\n }\n\n if (options.pushNotification?.useRichPush === true) {\n await addRichPushXcodeProj(options, xcodeProject);\n }\n return xcodeProject;\n } catch (error: any) {\n console.error(error);\n return null;\n }\n};\n\nexport const withCioNotificationsXcodeProject: ConfigPlugin<\n CustomerIOPluginOptionsIOS\n> = (configOuter, props) => {\n return withXcodeProject(configOuter, async (config) => {\n const { modRequest, ios, version: bundleShortVersion } = config;\n const { appleTeamId, iosDeploymentTarget, useFrameworks } = props;\n\n if (ios === undefined)\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios config missing from app.config.js or app.json.'\n );\n\n // projectName and platformProjectRoot translates to appName and iosPath in addNotificationServiceExtension()\n const { projectName, platformProjectRoot } = modRequest;\n const { bundleIdentifier, buildNumber } = ios;\n\n if (bundleShortVersion === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: version missing from app.config.js or app.json'\n );\n }\n\n if (bundleIdentifier === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios.bundleIdentifier missing from app.config.js or app.json'\n );\n }\n\n if (projectName === undefined) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: name missing from app.config.js or app.json'\n );\n }\n\n const options = {\n ...props,\n appleTeamId,\n bundleIdentifier,\n bundleShortVersion,\n bundleVersion: buildNumber || DEFAULT_BUNDLE_VERSION,\n iosPath: platformProjectRoot,\n appName: projectName,\n useFrameworks,\n iosDeploymentTarget,\n } satisfies CustomerIOPluginOptionsIOS;\n\n const modifiedProjectFile = await addNotificationServiceExtension(\n options,\n config.modResults\n );\n\n if (modifiedProjectFile) {\n config.modResults = modifiedProjectFile;\n }\n\n return config;\n });\n};\n\nconst addRichPushXcodeProj = async (\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: any\n) => {\n const {\n appleTeamId,\n bundleIdentifier,\n bundleShortVersion,\n bundleVersion,\n iosPath,\n iosDeploymentTarget,\n useFrameworks,\n } = options;\n\n const isFcmProvider = isFcmPushProvider(options);\n\n await injectCIONotificationPodfileCode(iosPath, useFrameworks, isFcmProvider);\n\n // Check if `CIO_NOTIFICATION_TARGET_NAME` group already exist in the project\n // If true then skip creating a new group to avoid duplicate folders\n if (xcodeProject.pbxTargetByName(CIO_NOTIFICATION_TARGET_NAME)) {\n console.warn(\n `${CIO_NOTIFICATION_TARGET_NAME} already exists in project. Skipping...`\n );\n return;\n }\n\n const nsePath = `${iosPath}/${CIO_NOTIFICATION_TARGET_NAME}`;\n FileManagement.mkdir(nsePath, {\n recursive: true,\n });\n\n const platformSpecificFiles = ['NotificationService.swift'];\n\n const commonFiles = [\n PLIST_FILENAME,\n 'NotificationService.h',\n 'NotificationService.m',\n ENV_FILENAME,\n ];\n\n const getTargetFile = (filename: string) => `${nsePath}/${filename}`;\n // Copy platform-specific files\n platformSpecificFiles.forEach((filename) => {\n const targetFile = getTargetFile(filename);\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/${\n isFcmProvider ? 'fcm' : 'apn'\n }/${filename}`,\n targetFile\n );\n });\n\n // Copy common files\n commonFiles.forEach((filename) => {\n const targetFile = getTargetFile(filename);\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/common/${filename}`,\n targetFile\n );\n });\n\n /* MODIFY COPIED EXTENSION FILES */\n const infoPlistTargetFile = getTargetFile(PLIST_FILENAME);\n updateNseInfoPlist({\n bundleVersion,\n bundleShortVersion,\n infoPlistTargetFile,\n });\n updateNseEnv(options, getTargetFile(ENV_FILENAME));\n\n // Create new PBXGroup for the extension\n const extGroup = xcodeProject.addPbxGroup(\n [...platformSpecificFiles, ...commonFiles], // Combine platform-specific and common files,\n CIO_NOTIFICATION_TARGET_NAME,\n CIO_NOTIFICATION_TARGET_NAME\n );\n\n // Add the new PBXGroup to the top level group. This makes the\n // files / folder appear in the file explorer in Xcode.\n const groups = xcodeProject.hash.project.objects['PBXGroup'];\n Object.keys(groups).forEach((key) => {\n if (groups[key].name === undefined && groups[key].path === undefined) {\n xcodeProject.addToPbxGroup(extGroup.uuid, key);\n }\n });\n\n // WORK AROUND for codeProject.addTarget BUG\n // Xcode projects don't contain these if there is only one target\n // An upstream fix should be made to the code referenced in this link:\n // - https://github.com/apache/cordova-node-xcode/blob/8b98cabc5978359db88dc9ff2d4c015cba40f150/lib/pbxProject.js#L860\n const projObjects = xcodeProject.hash.project.objects;\n projObjects['PBXTargetDependency'] = projObjects['PBXTargetDependency'] || {};\n projObjects['PBXContainerItemProxy'] =\n projObjects['PBXTargetDependency'] || {};\n\n if (xcodeProject.pbxTargetByName(CIO_NOTIFICATION_TARGET_NAME)) {\n console.warn(\n `${CIO_NOTIFICATION_TARGET_NAME} already exists in project. Skipping...`\n );\n return;\n }\n\n // Add the NSE target\n // This also adds PBXTargetDependency and PBXContainerItemProxy\n const nseTarget = xcodeProject.addTarget(\n CIO_NOTIFICATION_TARGET_NAME,\n 'app_extension',\n CIO_NOTIFICATION_TARGET_NAME,\n `${bundleIdentifier}.richpush`\n );\n\n // Add build phases to the new target\n xcodeProject.addBuildPhase(\n ['NotificationService.m', 'NotificationService.swift', 'Env.swift'],\n 'PBXSourcesBuildPhase',\n 'Sources',\n nseTarget.uuid\n );\n xcodeProject.addBuildPhase(\n [],\n 'PBXResourcesBuildPhase',\n 'Resources',\n nseTarget.uuid\n );\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXFrameworksBuildPhase',\n 'Frameworks',\n nseTarget.uuid\n );\n\n // Edit the Deployment info of the target\n const configurations = xcodeProject.pbxXCBuildConfigurationSection();\n for (const key in configurations) {\n if (\n typeof configurations[key].buildSettings !== 'undefined' &&\n configurations[key].buildSettings.PRODUCT_NAME ===\n `\"${CIO_NOTIFICATION_TARGET_NAME}\"`\n ) {\n const buildSettingsObj = configurations[key].buildSettings;\n buildSettingsObj.DEVELOPMENT_TEAM = appleTeamId;\n buildSettingsObj.IPHONEOS_DEPLOYMENT_TARGET =\n iosDeploymentTarget || '15.1';\n buildSettingsObj.TARGETED_DEVICE_FAMILY = TARGETED_DEVICE_FAMILY;\n buildSettingsObj.CODE_SIGN_STYLE = 'Automatic';\n buildSettingsObj.SWIFT_VERSION = 4.2;\n }\n }\n\n // Add development team to the target & the main\n xcodeProject.addTargetAttribute('DevelopmentTeam', appleTeamId, nseTarget);\n xcodeProject.addTargetAttribute('DevelopmentTeam', appleTeamId);\n};\n\nconst updateNseInfoPlist = (payload: {\n bundleVersion?: string;\n bundleShortVersion?: string;\n infoPlistTargetFile: string;\n}) => {\n const BUNDLE_SHORT_VERSION_RE = /\\{\\{BUNDLE_SHORT_VERSION\\}\\}/;\n const BUNDLE_VERSION_RE = /\\{\\{BUNDLE_VERSION\\}\\}/;\n\n let plistFileString = FileManagement.readFile(payload.infoPlistTargetFile);\n\n if (payload.bundleVersion) {\n plistFileString = replaceCodeByRegex(\n plistFileString,\n BUNDLE_VERSION_RE,\n payload.bundleVersion\n );\n }\n\n if (payload.bundleShortVersion) {\n plistFileString = replaceCodeByRegex(\n plistFileString,\n BUNDLE_SHORT_VERSION_RE,\n payload.bundleShortVersion\n );\n }\n\n FileManagement.writeFile(payload.infoPlistTargetFile, plistFileString);\n};\n\nconst updateNseEnv = (\n options: CustomerIOPluginOptionsIOS,\n envFileName: string\n) => {\n const CDP_API_KEY_RE = /\\{\\{CDP_API_KEY\\}\\}/;\n const REGION_RE = /\\{\\{REGION\\}\\}/;\n\n let envFileContent = FileManagement.readFile(envFileName);\n const { cdpApiKey, region } = options.pushNotification?.env || {\n cdpApiKey: undefined,\n region: undefined,\n };\n\n if (!cdpApiKey) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios.pushNotification.env.cdpApiKey is missing from app.config.js or app.json.'\n );\n }\n envFileContent = replaceCodeByRegex(\n envFileContent,\n CDP_API_KEY_RE,\n cdpApiKey\n );\n\n if (region) {\n const regionMap = {\n us: 'Region.US',\n eu: 'Region.EU',\n };\n const mappedRegion = (regionMap as any)[region.toLowerCase()] || '';\n if (!mappedRegion) {\n console.warn(\n `${region} is an invalid region. Please use the values from the docs: https://customer.io/docs/sdk/expo/getting-started/#configure-the-plugin`\n );\n } else {\n envFileContent = replaceCodeByRegex(\n envFileContent,\n REGION_RE,\n mappedRegion\n );\n }\n }\n\n FileManagement.writeFile(envFileName, envFileContent);\n};\n\nasync function addPushNotificationFile(\n options: CustomerIOPluginOptionsIOS,\n xcodeProject: any\n) {\n // Maybe copy a different file with FCM config based on config\n const { iosPath, appName } = options;\n const isFcmProvider = isFcmPushProvider(options);\n // PushService.swift is platform-specific and always lives in the platform folder\n const sourceFile = `${isFcmProvider ? 'fcm' : 'apn'}/PushService.swift`;\n const targetFileName = 'PushService.swift';\n const appPath = `${iosPath}/${appName}`;\n const getTargetFile = (filename: string) => `${appPath}/${filename}`;\n const targetFile = getTargetFile(targetFileName);\n\n // Check whether {file} exists in the project. If false, then add the file\n // If {file} exists then skip and return\n if (!FileManagement.exists(getTargetFile(targetFileName))) {\n FileManagement.mkdir(appPath, {\n recursive: true,\n });\n\n FileManagement.copyFile(\n `${LOCAL_PATH_TO_CIO_NSE_FILES}/${sourceFile}`,\n targetFile\n );\n } else {\n console.log(`${getTargetFile(targetFileName)} already exists. Skipping...`);\n return;\n }\n\n updatePushFile(options, targetFile);\n\n const group = xcodeProject.pbxCreateGroup('CustomerIONotifications');\n const classesKey = xcodeProject.findPBXGroupKey({ name: `${appName}` });\n xcodeProject.addToPbxGroup(group, classesKey);\n\n xcodeProject.addSourceFile(`${appName}/${targetFileName}`, null, group);\n}\n\nconst updatePushFile = (\n options: CustomerIOPluginOptionsIOS,\n envFileName: string\n) => {\n const REGISTER_RE = /\\{\\{REGISTER_SNIPPET\\}\\}/;\n\n let envFileContent = FileManagement.readFile(envFileName);\n const disableNotificationRegistration =\n options.pushNotification?.disableNotificationRegistration;\n const { cdpApiKey, region } = options.pushNotification?.env || {\n cdpApiKey: undefined,\n region: undefined,\n };\n if (!cdpApiKey) {\n throw new Error(\n 'Adding NotificationServiceExtension failed: ios.pushNotification.env.cdpApiKey is missing from app.config.js or app.json.'\n );\n }\n\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;\n }\n envFileContent = replaceCodeByRegex(envFileContent, REGISTER_RE, snippet);\n\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{CDP_API_KEY\\}\\}/,\n cdpApiKey\n );\n\n if (region) {\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{REGION\\}\\}/,\n region.toUpperCase()\n );\n }\n\n const autoTrackPushEvents =\n options.pushNotification?.autoTrackPushEvents !== false;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{AUTO_TRACK_PUSH_EVENTS\\}\\}/,\n autoTrackPushEvents.toString()\n );\n\n const autoFetchDeviceToken =\n options.pushNotification?.autoFetchDeviceToken !== false;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{AUTO_FETCH_DEVICE_TOKEN\\}\\}/,\n autoFetchDeviceToken.toString()\n );\n\n const showPushAppInForeground =\n options.pushNotification?.showPushAppInForeground !== false;\n envFileContent = replaceCodeByRegex(\n envFileContent,\n /\\{\\{SHOW_PUSH_APP_IN_FOREGROUND\\}\\}/,\n showPushAppInForeground.toString()\n );\n\n FileManagement.writeFile(envFileName, envFileContent);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -5,22 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.withCioXcodeProject = void 0;
7
7
  var _configPlugins = require("@expo/config-plugins");
8
- var _injectCIOPodfileCode = require("../helpers/utils/injectCIOPodfileCode");
9
8
  var _utils = require("./utils");
9
+ var _injectCIOPodfileCode = require("../helpers/utils/injectCIOPodfileCode");
10
10
  const withCioXcodeProject = (config, cioProps) => {
11
11
  return (0, _configPlugins.withXcodeProject)(config, async props => {
12
- var _props$ios, _props$ios2;
13
- const options = {
14
- iosPath: props.modRequest.platformProjectRoot,
15
- bundleIdentifier: (_props$ios = props.ios) === null || _props$ios === void 0 ? void 0 : _props$ios.bundleIdentifier,
16
- devTeam: cioProps === null || cioProps === void 0 ? void 0 : cioProps.devTeam,
17
- bundleVersion: (_props$ios2 = props.ios) === null || _props$ios2 === void 0 ? void 0 : _props$ios2.buildNumber,
18
- bundleShortVersion: props === null || props === void 0 ? void 0 : props.version,
19
- iosDeploymentTarget: cioProps === null || cioProps === void 0 ? void 0 : cioProps.iosDeploymentTarget
20
- };
21
- const {
22
- iosPath
23
- } = options;
12
+ const iosPath = props.modRequest.platformProjectRoot;
24
13
  await (0, _injectCIOPodfileCode.injectCIOPodfileCode)(iosPath, (0, _utils.isFcmPushProvider)(cioProps));
25
14
  return props;
26
15
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","_injectCIOPodfileCode","_utils","withCioXcodeProject","config","cioProps","withXcodeProject","props","_props$ios","_props$ios2","options","iosPath","modRequest","platformProjectRoot","bundleIdentifier","ios","devTeam","bundleVersion","buildNumber","bundleShortVersion","version","iosDeploymentTarget","injectCIOPodfileCode","isFcmPushProvider","exports"],"sources":["withXcodeProject.ts"],"sourcesContent":["import { ConfigPlugin, withXcodeProject } from '@expo/config-plugins';\n\nimport { injectCIOPodfileCode } from '../helpers/utils/injectCIOPodfileCode';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\nimport { isFcmPushProvider } from './utils';\n\nexport const withCioXcodeProject: ConfigPlugin<CustomerIOPluginOptionsIOS> = (\n config,\n cioProps\n) => {\n return withXcodeProject(config, async (props) => {\n const options: CustomerIOPluginOptionsIOS = {\n iosPath: props.modRequest.platformProjectRoot,\n bundleIdentifier: props.ios?.bundleIdentifier,\n devTeam: cioProps?.devTeam,\n bundleVersion: props.ios?.buildNumber,\n bundleShortVersion: props?.version,\n iosDeploymentTarget: cioProps?.iosDeploymentTarget,\n };\n const { iosPath } = options;\n\n await injectCIOPodfileCode(iosPath, isFcmPushProvider(cioProps));\n\n return props;\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,qBAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAEO,MAAMG,mBAA6D,GAAGA,CAC3EC,MAAM,EACNC,QAAQ,KACL;EACH,OAAO,IAAAC,+BAAgB,EAACF,MAAM,EAAE,MAAOG,KAAK,IAAK;IAAA,IAAAC,UAAA,EAAAC,WAAA;IAC/C,MAAMC,OAAmC,GAAG;MAC1CC,OAAO,EAAEJ,KAAK,CAACK,UAAU,CAACC,mBAAmB;MAC7CC,gBAAgB,GAAAN,UAAA,GAAED,KAAK,CAACQ,GAAG,cAAAP,UAAA,uBAATA,UAAA,CAAWM,gBAAgB;MAC7CE,OAAO,EAAEX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEW,OAAO;MAC1BC,aAAa,GAAAR,WAAA,GAAEF,KAAK,CAACQ,GAAG,cAAAN,WAAA,uBAATA,WAAA,CAAWS,WAAW;MACrCC,kBAAkB,EAAEZ,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEa,OAAO;MAClCC,mBAAmB,EAAEhB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEgB;IACjC,CAAC;IACD,MAAM;MAAEV;IAAQ,CAAC,GAAGD,OAAO;IAE3B,MAAM,IAAAY,0CAAoB,EAACX,OAAO,EAAE,IAAAY,wBAAiB,EAAClB,QAAQ,CAAC,CAAC;IAEhE,OAAOE,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAACiB,OAAA,CAAArB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_configPlugins","require","_utils","_injectCIOPodfileCode","withCioXcodeProject","config","cioProps","withXcodeProject","props","iosPath","modRequest","platformProjectRoot","injectCIOPodfileCode","isFcmPushProvider","exports"],"sources":["withXcodeProject.ts"],"sourcesContent":["import { ConfigPlugin, withXcodeProject } from '@expo/config-plugins';\n\nimport { isFcmPushProvider } from './utils';\nimport { injectCIOPodfileCode } from '../helpers/utils/injectCIOPodfileCode';\nimport type { CustomerIOPluginOptionsIOS } from '../types/cio-types';\n\nexport const withCioXcodeProject: ConfigPlugin<CustomerIOPluginOptionsIOS> = (\n config,\n cioProps\n) => {\n return withXcodeProject(config, async (props) => {\n const iosPath = props.modRequest.platformProjectRoot;\n\n await injectCIOPodfileCode(iosPath, isFcmPushProvider(cioProps));\n\n return props;\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAF,OAAA;AAGO,MAAMG,mBAA6D,GAAGA,CAC3EC,MAAM,EACNC,QAAQ,KACL;EACH,OAAO,IAAAC,+BAAgB,EAACF,MAAM,EAAE,MAAOG,KAAK,IAAK;IAC/C,MAAMC,OAAO,GAAGD,KAAK,CAACE,UAAU,CAACC,mBAAmB;IAEpD,MAAM,IAAAC,0CAAoB,EAACH,OAAO,EAAE,IAAAI,wBAAiB,EAACP,QAAQ,CAAC,CAAC;IAEhE,OAAOE,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAACM,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["cio-types.ts"],"sourcesContent":["// properties set by the user in their app config file (e.g: app.json or app.plugin.js)\nexport type CustomerIOPluginProperties = {\n // (iOS only) Environment name and bundle identifier\n devTeam: string;\n iosDeploymentTarget: string;\n};\n\n// Plugin options for pre-build\nexport type CustomerIOPluginOptionsIOS = {\n iosPath: string;\n devTeam?: string;\n bundleVersion?: string;\n bundleShortVersion?: string;\n bundleIdentifier?: string;\n iosDeploymentTarget?: string;\n appleTeamId?: string;\n appName?: string;\n disableNotificationRegistration?: boolean;\n /**\n * @deprecated No longer has any effect. Use autoTrackPushEvents to control if push metrics should be automatically tracked by SDK.\n */\n handleNotificationClick?: boolean;\n showPushAppInForeground?: boolean;\n autoTrackPushEvents?: boolean;\n autoFetchDeviceToken?: boolean;\n handleDeeplinkInKilledState?: boolean;\n useFrameworks?: 'static' | 'dynamic';\n pushNotification?: {\n provider?: 'apn' | 'fcm';\n googleServicesFile?: string;\n useRichPush: boolean;\n env: {\n cdpApiKey: string;\n region: string;\n };\n };\n};\n\nexport type CustomerIOPluginOptionsAndroid = {\n androidPath: string;\n googleServicesFile?: string;\n setHighPriorityPushHandler?: boolean;\n};\n\nexport type CustomerIOPluginOptions = {\n android: CustomerIOPluginOptionsAndroid;\n ios: CustomerIOPluginOptionsIOS;\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["cio-types.ts"],"sourcesContent":["// properties set by the user in their app config file (e.g: app.json or app.plugin.js)\nexport type CustomerIOPluginProperties = {\n // (iOS only) Environment name and bundle identifier\n devTeam: string;\n iosDeploymentTarget: string;\n};\n\n// Plugin options for pre-build\nexport type CustomerIOPluginOptionsIOS = {\n iosPath: string;\n devTeam?: string;\n bundleVersion?: string;\n bundleShortVersion?: string;\n bundleIdentifier?: string;\n iosDeploymentTarget?: string;\n appleTeamId?: string;\n appName?: string;\n\n useFrameworks?: 'static' | 'dynamic';\n\n pushNotification?: CustomerIOPluginPushNotificationOptions;\n\n /**\n * @deprecated No longer has any effect. Use autoTrackPushEvents to control if push metrics should be automatically tracked by SDK.\n */\n handleNotificationClick?: boolean;\n\n /**\n * @deprecated Property will be removed in the future. Use ios.pushNotification.autoFetchDeviceToken instead\n */\n autoFetchDeviceToken?: boolean;\n\n /**\n * @deprecated Property will be removed in the future. Use ios.pushNotification.showPushAppInForeground instead\n */\n showPushAppInForeground?: boolean;\n\n /**\n * @deprecated Property will be removed in the future. Use ios.pushNotification.autoTrackPushEvents instead\n */\n autoTrackPushEvents?: boolean;\n\n /**\n * @deprecated Property will be removed in the future. Use ios.pushNotification.handleDeeplinkInKilledState instead\n */\n handleDeeplinkInKilledState?: boolean;\n\n /**\n * @deprecated Property will be removed in the future. Use ios.pushNotification.disableNotificationRegistration instead\n */\n disableNotificationRegistration?: boolean;\n};\n\nexport type CustomerIOPluginOptionsAndroid = {\n androidPath: string;\n googleServicesFile?: string;\n setHighPriorityPushHandler?: boolean;\n};\n\nexport type CustomerIOPluginOptions = {\n android: CustomerIOPluginOptionsAndroid;\n ios: CustomerIOPluginOptionsIOS;\n};\n\nexport type CustomerIOPluginPushNotificationOptions = {\n provider?: 'apn' | 'fcm';\n googleServicesFile?: string;\n useRichPush?: boolean;\n autoFetchDeviceToken?: boolean;\n autoTrackPushEvents?: boolean;\n showPushAppInForeground?: boolean;\n disableNotificationRegistration?: boolean;\n handleDeeplinkInKilledState?: boolean;\n\n /**\n * These values will be used to initialize the Notification Service Extension (NSE) on the native side.\n * They should match the values you use to initialize the SDK in your app\n */\n env: {\n cdpApiKey: string;\n region: string;\n };\n};\n"],"mappings":"","ignoreList":[]}
@@ -106,6 +106,7 @@ export const withAppDelegateModifications = (configOuter, props) => {
106
106
  const regex = new RegExp(`#import <${config.modRequest.projectName}-Swift.h>`);
107
107
  const match = stringContents.match(regex);
108
108
  if (!match) {
109
+ var _props$pushNotificati, _props$pushNotificati2;
109
110
  const headerPath = getAppDelegateHeaderFilePath(config.modRequest.projectRoot);
110
111
  let headerContent = await FileManagement.read(headerPath);
111
112
  headerContent = addAppdelegateHeaderModification(headerContent);
@@ -113,12 +114,13 @@ export const withAppDelegateModifications = (configOuter, props) => {
113
114
  stringContents = addImport(stringContents, config.modRequest.projectName);
114
115
  stringContents = addNotificationHandlerDeclaration(stringContents);
115
116
 
116
- // any other value would be treated as true, it has to be explicitly false to disable
117
- if (props.disableNotificationRegistration !== undefined && props.disableNotificationRegistration === false) {
117
+ // unless this property is explicity set to true, push notification
118
+ // registration will be added to the AppDelegate
119
+ if (((_props$pushNotificati = props.pushNotification) === null || _props$pushNotificati === void 0 ? void 0 : _props$pushNotificati.disableNotificationRegistration) !== true) {
118
120
  stringContents = addNotificationConfiguration(stringContents);
119
121
  }
120
122
  stringContents = addInitializeNativeCioSdk(stringContents);
121
- if (props.handleDeeplinkInKilledState !== undefined && props.handleDeeplinkInKilledState === true) {
123
+ if (((_props$pushNotificati2 = props.pushNotification) === null || _props$pushNotificati2 === void 0 ? void 0 : _props$pushNotificati2.handleDeeplinkInKilledState) === true) {
122
124
  stringContents = addHandleDeeplinkInKilledState(stringContents);
123
125
  }
124
126
  stringContents = addDidFailToRegisterForRemoteNotificationsWithError(stringContents);