customerio-expo-plugin 1.0.0-beta.10 → 1.0.0-beta.11
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/lib/commonjs/helpers/constants/ios.js +1 -24
- package/lib/commonjs/helpers/constants/ios.js.map +1 -1
- package/lib/commonjs/helpers/utils/injectCIOPodfileCode.js +28 -15
- package/lib/commonjs/helpers/utils/injectCIOPodfileCode.js.map +1 -1
- package/lib/module/helpers/constants/ios.js +0 -15
- package/lib/module/helpers/constants/ios.js.map +1 -1
- package/lib/module/helpers/utils/injectCIOPodfileCode.js +28 -15
- package/lib/module/helpers/utils/injectCIOPodfileCode.js.map +1 -1
- package/lib/typescript/helpers/constants/ios.d.ts +0 -8
- package/package.json +2 -2
- package/src/helpers/constants/ios.ts +0 -16
- package/src/helpers/utils/injectCIOPodfileCode.ts +40 -32
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.LOCAL_PATH_TO_CIO_NSE_FILES = exports.IOS_DEPLOYMENT_TARGET = exports.GROUP_IDENTIFIER_TEMPLATE_REGEX = exports.DEFAULT_BUNDLE_VERSION = exports.DEFAULT_BUNDLE_SHORT_VERSION = exports.CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = exports.CIO_TARGET_NAME = exports.
|
|
6
|
+
exports.LOCAL_PATH_TO_CIO_NSE_FILES = exports.IOS_DEPLOYMENT_TARGET = exports.GROUP_IDENTIFIER_TEMPLATE_REGEX = exports.DEFAULT_BUNDLE_VERSION = exports.DEFAULT_BUNDLE_SHORT_VERSION = exports.CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = exports.CIO_TARGET_NAME = exports.CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = exports.CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET = exports.CIO_NOTIFICATION_TARGET_NAME = exports.CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET = exports.CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX = exports.CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET = exports.CIO_DIDFINISHLAUNCHINGMETHOD_REGEX = exports.CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET = exports.CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX = exports.CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERRORFULL_REGEX = exports.CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET = exports.CIO_APPDELEGATEHEADER_SNIPPET = exports.CIO_APPDELEGATEHEADER_REGEX = exports.CIO_APPDELEGATEDECLARATION_REGEX = exports.BUNDLE_VERSION_TEMPLATE_REGEX = exports.BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = void 0;
|
|
7
7
|
const finder = require('find-package-json');
|
|
8
8
|
const path = require('path');
|
|
9
9
|
const f = finder(__dirname);
|
|
@@ -14,16 +14,6 @@ const LOCAL_PATH_TO_CIO_NSE_FILES = path.join(pluginPackageRoot, 'src/helpers/na
|
|
|
14
14
|
exports.LOCAL_PATH_TO_CIO_NSE_FILES = LOCAL_PATH_TO_CIO_NSE_FILES;
|
|
15
15
|
const IOS_DEPLOYMENT_TARGET = '13.0';
|
|
16
16
|
exports.IOS_DEPLOYMENT_TARGET = IOS_DEPLOYMENT_TARGET;
|
|
17
|
-
const CIO_SDK_VERSION = "'~> 2.0'";
|
|
18
|
-
exports.CIO_SDK_VERSION = CIO_SDK_VERSION;
|
|
19
|
-
const CIO_PODFILE_REGEX = /pod 'CustomerIO\/MessagingPushAPN'/;
|
|
20
|
-
exports.CIO_PODFILE_REGEX = CIO_PODFILE_REGEX;
|
|
21
|
-
const CIO_CIO_TARGET_REGEX = /cio_target_names/;
|
|
22
|
-
exports.CIO_CIO_TARGET_REGEX = CIO_CIO_TARGET_REGEX;
|
|
23
|
-
const CIO_PODFILE_NOTIFICATION_REGEX = /target 'NotificationService' do/;
|
|
24
|
-
exports.CIO_PODFILE_NOTIFICATION_REGEX = CIO_PODFILE_NOTIFICATION_REGEX;
|
|
25
|
-
const CIO_PODFILE_POST_INSTALL_REGEX = /post_install do \|installer\|/;
|
|
26
|
-
exports.CIO_PODFILE_POST_INSTALL_REGEX = CIO_PODFILE_POST_INSTALL_REGEX;
|
|
27
17
|
const GROUP_IDENTIFIER_TEMPLATE_REGEX = /{{GROUP_IDENTIFIER}}/gm;
|
|
28
18
|
exports.GROUP_IDENTIFIER_TEMPLATE_REGEX = GROUP_IDENTIFIER_TEMPLATE_REGEX;
|
|
29
19
|
const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = /{{BUNDLE_SHORT_VERSION}}/gm;
|
|
@@ -90,19 +80,6 @@ const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = `
|
|
|
90
80
|
completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);
|
|
91
81
|
}`;
|
|
92
82
|
exports.CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET;
|
|
93
|
-
const CIO_PODFILE_SNIPPET = ` pod 'CustomerIO/MessagingPushAPN', ${CIO_SDK_VERSION}`;
|
|
94
|
-
exports.CIO_PODFILE_SNIPPET = CIO_PODFILE_SNIPPET;
|
|
95
|
-
const CIO_PODFILE_NOTIFICATION_SNIPPET = `
|
|
96
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
97
|
-
${CIO_PODFILE_SNIPPET}
|
|
98
|
-
end`;
|
|
99
|
-
exports.CIO_PODFILE_NOTIFICATION_SNIPPET = CIO_PODFILE_NOTIFICATION_SNIPPET;
|
|
100
|
-
const CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET = `
|
|
101
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
102
|
-
use_frameworks! :linkage => :static
|
|
103
|
-
${CIO_PODFILE_SNIPPET}
|
|
104
|
-
end`;
|
|
105
|
-
exports.CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET = CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET;
|
|
106
83
|
const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = `
|
|
107
84
|
@objc(registerPushNotification:)
|
|
108
85
|
public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["finder","require","path","f","__dirname","pluginPackageRoot","next","filename","dirname","LOCAL_PATH_TO_CIO_NSE_FILES","join","exports","IOS_DEPLOYMENT_TARGET","
|
|
1
|
+
{"version":3,"names":["finder","require","path","f","__dirname","pluginPackageRoot","next","filename","dirname","LOCAL_PATH_TO_CIO_NSE_FILES","join","exports","IOS_DEPLOYMENT_TARGET","GROUP_IDENTIFIER_TEMPLATE_REGEX","BUNDLE_SHORT_VERSION_TEMPLATE_REGEX","BUNDLE_VERSION_TEMPLATE_REGEX","CIO_DIDFINISHLAUNCHINGMETHOD_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERRORFULL_REGEX","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX","CIO_APPDELEGATEDECLARATION_REGEX","CIO_APPDELEGATEHEADER_REGEX","DEFAULT_BUNDLE_VERSION","DEFAULT_BUNDLE_SHORT_VERSION","CIO_TARGET_NAME","CIO_NOTIFICATION_TARGET_NAME","CIO_APPDELEGATEHEADER_SNIPPET","CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET","CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET","CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET","CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET"],"sources":["ios.ts"],"sourcesContent":["const finder = require('find-package-json');\nconst path = require('path');\n\nconst f = finder(__dirname);\nlet pluginPackageRoot = f.next().filename;\n// This is the path to the root of the customerio-expo-plugin package\npluginPackageRoot = path.dirname(pluginPackageRoot);\n\nexport const LOCAL_PATH_TO_CIO_NSE_FILES = path.join(\n pluginPackageRoot,\n 'src/helpers/native-files/ios'\n);\nexport const IOS_DEPLOYMENT_TARGET = '13.0';\nexport const GROUP_IDENTIFIER_TEMPLATE_REGEX = /{{GROUP_IDENTIFIER}}/gm;\nexport const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = /{{BUNDLE_SHORT_VERSION}}/gm;\nexport const BUNDLE_VERSION_TEMPLATE_REGEX = /{{BUNDLE_VERSION}}/gm;\nexport const CIO_DIDFINISHLAUNCHINGMETHOD_REGEX =\n /(- \\(BOOL\\)application:\\(UIApplication \\*\\)application didFinishLaunchingWithOptions:\\(NSDictionary \\*\\)launchOptions(\\s|\\n)*?\\{)((.|\\n)*)\\[super(\\s)application:application(\\s)didFinishLaunchingWithOptions:launchOptions\\];/;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX =\n /return \\[super application:application didFailToRegisterForRemoteNotificationsWithError:error\\];/;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERRORFULL_REGEX =\n /(- \\(void\\)application:\\(UIApplication \\*\\)application didFailToRegisterForRemoteNotificationsWithError:\\(NSError \\*\\)error(\\s|\\n)*?\\{)(.|\\n){2}.*\\n\\}/;\n\nexport const CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX =\n /return \\[super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken\\];/;\n\nexport const CIO_APPDELEGATEDECLARATION_REGEX =\n /@implementation AppDelegate(.|\\n)/;\n\nexport const CIO_APPDELEGATEHEADER_REGEX =\n /@interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate>/;\nexport const DEFAULT_BUNDLE_VERSION = '1';\nexport const DEFAULT_BUNDLE_SHORT_VERSION = '1.0';\nexport const CIO_TARGET_NAME = 'CustomerIOSDK';\nexport const CIO_NOTIFICATION_TARGET_NAME = 'NotificationService';\nexport const CIO_APPDELEGATEHEADER_SNIPPET = `\n#import <UserNotifications/UserNotifications.h>\n\n@interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate, UNUserNotificationCenterDelegate>\n`;\n\nexport const CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET = `\nCIOAppPushNotificationsHandler* pnHandlerObj = [[CIOAppPushNotificationsHandler alloc] init];\n`;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET = `\n [super application:application didFailToRegisterForRemoteNotificationsWithError:error];\n [pnHandlerObj application:application error:error];\n`;\n\nexport const CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET = `\n [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];\n return [pnHandlerObj application:application deviceToken:deviceToken];\n`;\n\nexport const CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET = `\n // Register for push notifications\n [pnHandlerObj registerPushNotification:self];\n`;\n\n// Enable push handling - notification response\nexport const CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET = `\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {\n [pnHandlerObj userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];\n}`;\n\n// Foreground push handling\nexport const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = `\n// show push when the app is in foreground\n- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {\n completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);\n}`;\nexport const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = `\n@objc(registerPushNotification:)\n public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {\n\n let center = UNUserNotificationCenter.current()\n center.delegate = notificationDelegate\n center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in\n if error == nil{\n DispatchQueue.main.async {\n UIApplication.shared.registerForRemoteNotifications()\n }\n }\n }\n }`;\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAGC,OAAO,CAAC,mBAAmB,CAAC;AAC3C,MAAMC,IAAI,GAAGD,OAAO,CAAC,MAAM,CAAC;AAE5B,MAAME,CAAC,GAAGH,MAAM,CAACI,SAAS,CAAC;AAC3B,IAAIC,iBAAiB,GAAGF,CAAC,CAACG,IAAI,CAAC,CAAC,CAACC,QAAQ;AACzC;AACAF,iBAAiB,GAAGH,IAAI,CAACM,OAAO,CAACH,iBAAiB,CAAC;AAE5C,MAAMI,2BAA2B,GAAGP,IAAI,CAACQ,IAAI,CAClDL,iBAAiB,EACjB,8BACF,CAAC;AAACM,OAAA,CAAAF,2BAAA,GAAAA,2BAAA;AACK,MAAMG,qBAAqB,GAAG,MAAM;AAACD,OAAA,CAAAC,qBAAA,GAAAA,qBAAA;AACrC,MAAMC,+BAA+B,GAAG,wBAAwB;AAACF,OAAA,CAAAE,+BAAA,GAAAA,+BAAA;AACjE,MAAMC,mCAAmC,GAAG,4BAA4B;AAACH,OAAA,CAAAG,mCAAA,GAAAA,mCAAA;AACzE,MAAMC,6BAA6B,GAAG,sBAAsB;AAACJ,OAAA,CAAAI,6BAAA,GAAAA,6BAAA;AAC7D,MAAMC,kCAAkC,GAC7C,gOAAgO;AAACL,OAAA,CAAAK,kCAAA,GAAAA,kCAAA;AAE5N,MAAMC,0DAA0D,GACrE,kGAAkG;AAACN,OAAA,CAAAM,0DAAA,GAAAA,0DAAA;AAE9F,MAAMC,8DAA8D,GACzE,wJAAwJ;AAACP,OAAA,CAAAO,8DAAA,GAAAA,8DAAA;AAEpJ,MAAMC,0DAA0D,GACrE,wGAAwG;AAACR,OAAA,CAAAQ,0DAAA,GAAAA,0DAAA;AAEpG,MAAMC,gCAAgC,GAC3C,mCAAmC;AAACT,OAAA,CAAAS,gCAAA,GAAAA,gCAAA;AAE/B,MAAMC,2BAA2B,GACtC,mEAAmE;AAACV,OAAA,CAAAU,2BAAA,GAAAA,2BAAA;AAC/D,MAAMC,sBAAsB,GAAG,GAAG;AAACX,OAAA,CAAAW,sBAAA,GAAAA,sBAAA;AACnC,MAAMC,4BAA4B,GAAG,KAAK;AAACZ,OAAA,CAAAY,4BAAA,GAAAA,4BAAA;AAC3C,MAAMC,eAAe,GAAG,eAAe;AAACb,OAAA,CAAAa,eAAA,GAAAA,eAAA;AACxC,MAAMC,4BAA4B,GAAG,qBAAqB;AAACd,OAAA,CAAAc,4BAAA,GAAAA,4BAAA;AAC3D,MAAMC,6BAA6B,GAAI;AAC9C;AACA;AACA;AACA,CAAC;AAACf,OAAA,CAAAe,6BAAA,GAAAA,6BAAA;AAEK,MAAMC,8CAA8C,GAAI;AAC/D;AACA,CAAC;AAAChB,OAAA,CAAAgB,8CAAA,GAAAA,8CAAA;AAEK,MAAMC,4DAA4D,GAAI;AAC7E;AACA;AACA,CAAC;AAACjB,OAAA,CAAAiB,4DAAA,GAAAA,4DAAA;AAEK,MAAMC,4DAA4D,GAAI;AAC7E;AACA;AACA,CAAC;AAAClB,OAAA,CAAAkB,4DAAA,GAAAA,4DAAA;AAEK,MAAMC,2CAA2C,GAAI;AAC5D;AACA;AACA,CAAC;;AAED;AAAAnB,OAAA,CAAAmB,2CAAA,GAAAA,2CAAA;AACO,MAAMC,iDAAiD,GAAI;AAClE;AACA;AACA,EAAE;;AAEF;AAAApB,OAAA,CAAAoB,iDAAA,GAAAA,iDAAA;AACO,MAAMC,0CAA0C,GAAI;AAC3D;AACA;AACA;AACA,EAAE;AAACrB,OAAA,CAAAqB,0CAAA,GAAAA,0CAAA;AACI,MAAMC,qCAAqC,GAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AAACtB,OAAA,CAAAsB,qCAAA,GAAAA,qCAAA"}
|
|
@@ -5,32 +5,45 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.injectCIONotificationPodfileCode = injectCIONotificationPodfileCode;
|
|
7
7
|
exports.injectCIOPodfileCode = injectCIOPodfileCode;
|
|
8
|
-
var
|
|
8
|
+
var _codeInjection = require("./codeInjection");
|
|
9
9
|
var _fileManagement = require("./fileManagement");
|
|
10
10
|
async function injectCIOPodfileCode(iosPath) {
|
|
11
|
+
const blockStart = '# --- CustomerIO Host App START ---';
|
|
12
|
+
const blockEnd = '# --- CustomerIO Host App END ---';
|
|
11
13
|
const filename = `${iosPath}/Podfile`;
|
|
12
14
|
const podfile = await _fileManagement.FileManagement.read(filename);
|
|
13
|
-
const matches = podfile.match(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
16
|
+
if (!matches) {
|
|
17
|
+
// We need to decide what line of code in the Podfile to insert our native code.
|
|
18
|
+
// The "post_install" line is always present in an Expo project Podfile so it's reliable.
|
|
19
|
+
// Find that line in the Podfile and then we will insert our code above that line.
|
|
20
|
+
const lineInPodfileToInjectSnippetBefore = /post_install do \|installer\|/;
|
|
21
|
+
const snippetToInjectInPodfile = `
|
|
22
|
+
${blockStart}
|
|
23
|
+
pod 'customerio-reactnative/apn', :path => '../node_modules/customerio-reactnative'
|
|
24
|
+
${blockEnd}
|
|
25
|
+
`.trim();
|
|
26
|
+
_fileManagement.FileManagement.write(filename, (0, _codeInjection.injectCodeByRegex)(podfile, lineInPodfileToInjectSnippetBefore, snippetToInjectInPodfile).join('\n'));
|
|
23
27
|
} else {
|
|
24
|
-
console.log('
|
|
28
|
+
console.log('CustomerIO Podfile snippets already exists. Skipping...');
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
async function injectCIONotificationPodfileCode(iosPath, useFrameworks) {
|
|
28
32
|
const filename = `${iosPath}/Podfile`;
|
|
29
33
|
const podfile = await _fileManagement.FileManagement.read(filename);
|
|
30
|
-
const
|
|
34
|
+
const blockStart = '# --- CustomerIO Notification START ---';
|
|
35
|
+
const blockEnd = '# --- CustomerIO Notification END ---';
|
|
36
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
31
37
|
if (!matches) {
|
|
32
|
-
const
|
|
33
|
-
|
|
38
|
+
const snippetToInjectInPodfile = `
|
|
39
|
+
${blockStart}
|
|
40
|
+
target 'NotificationService' do
|
|
41
|
+
${useFrameworks === 'static' ? 'use_frameworks! :linkage => :static' : ''}
|
|
42
|
+
pod 'customerio-reactnative-richpush/apn', :path => '../node_modules/customerio-reactnative'
|
|
43
|
+
end
|
|
44
|
+
${blockEnd}
|
|
45
|
+
`.trim();
|
|
46
|
+
_fileManagement.FileManagement.append(filename, snippetToInjectInPodfile);
|
|
34
47
|
}
|
|
35
48
|
}
|
|
36
49
|
//# sourceMappingURL=injectCIOPodfileCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_codeInjection","require","_fileManagement","injectCIOPodfileCode","iosPath","blockStart","blockEnd","filename","podfile","FileManagement","read","matches","match","RegExp","lineInPodfileToInjectSnippetBefore","snippetToInjectInPodfile","trim","write","injectCodeByRegex","join","console","log","injectCIONotificationPodfileCode","useFrameworks","append"],"sources":["injectCIOPodfileCode.ts"],"sourcesContent":["import type { CustomerIOPluginOptionsIOS } from '../../types/cio-types';\nimport { injectCodeByRegex } from './codeInjection';\nimport { FileManagement } from './fileManagement';\n\nexport async function injectCIOPodfileCode(iosPath: string) {\n const blockStart = '# --- CustomerIO Host App START ---';\n const blockEnd = '# --- CustomerIO Host App END ---';\n\n const filename = `${iosPath}/Podfile`;\n const podfile = await FileManagement.read(filename);\n const matches = podfile.match(new RegExp(blockStart));\n\n if (!matches) {\n // We need to decide what line of code in the Podfile to insert our native code.\n // The \"post_install\" line is always present in an Expo project Podfile so it's reliable.\n // Find that line in the Podfile and then we will insert our code above that line.\n const lineInPodfileToInjectSnippetBefore = /post_install do \\|installer\\|/;\n\n const snippetToInjectInPodfile = `\n${blockStart}\n pod 'customerio-reactnative/apn', :path => '../node_modules/customerio-reactnative'\n${blockEnd}\n`.trim();\n\n FileManagement.write(\n filename,\n injectCodeByRegex(\n podfile,\n lineInPodfileToInjectSnippetBefore,\n snippetToInjectInPodfile\n ).join('\\n')\n );\n } else {\n console.log('CustomerIO Podfile snippets already exists. Skipping...');\n }\n}\n\nexport async function injectCIONotificationPodfileCode(\n iosPath: string,\n useFrameworks: CustomerIOPluginOptionsIOS['useFrameworks']\n) {\n const filename = `${iosPath}/Podfile`;\n const podfile = await FileManagement.read(filename);\n\n const blockStart = '# --- CustomerIO Notification START ---';\n const blockEnd = '# --- CustomerIO Notification END ---';\n\n const matches = podfile.match(new RegExp(blockStart));\n\n if (!matches) {\n const snippetToInjectInPodfile = `\n${blockStart}\ntarget 'NotificationService' do\n ${useFrameworks === 'static' ? 'use_frameworks! :linkage => :static' : ''}\n pod 'customerio-reactnative-richpush/apn', :path => '../node_modules/customerio-reactnative'\nend\n${blockEnd}\n`.trim();\n\n FileManagement.append(filename, snippetToInjectInPodfile);\n }\n}\n"],"mappings":";;;;;;;AACA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEO,eAAeE,oBAAoBA,CAACC,OAAe,EAAE;EAC1D,MAAMC,UAAU,GAAG,qCAAqC;EACxD,MAAMC,QAAQ,GAAG,mCAAmC;EAEpD,MAAMC,QAAQ,GAAI,GAAEH,OAAQ,UAAS;EACrC,MAAMI,OAAO,GAAG,MAAMC,8BAAc,CAACC,IAAI,CAACH,QAAQ,CAAC;EACnD,MAAMI,OAAO,GAAGH,OAAO,CAACI,KAAK,CAAC,IAAIC,MAAM,CAACR,UAAU,CAAC,CAAC;EAErD,IAAI,CAACM,OAAO,EAAE;IACZ;IACA;IACA;IACA,MAAMG,kCAAkC,GAAG,+BAA+B;IAE1E,MAAMC,wBAAwB,GAAI;AACtC,EAAEV,UAAW;AACb;AACA,EAAEC,QAAS;AACX,CAAC,CAACU,IAAI,CAAC,CAAC;IAEJP,8BAAc,CAACQ,KAAK,CAClBV,QAAQ,EACR,IAAAW,gCAAiB,EACfV,OAAO,EACPM,kCAAkC,EAClCC,wBACF,CAAC,CAACI,IAAI,CAAC,IAAI,CACb,CAAC;EACH,CAAC,MAAM;IACLC,OAAO,CAACC,GAAG,CAAC,yDAAyD,CAAC;EACxE;AACF;AAEO,eAAeC,gCAAgCA,CACpDlB,OAAe,EACfmB,aAA0D,EAC1D;EACA,MAAMhB,QAAQ,GAAI,GAAEH,OAAQ,UAAS;EACrC,MAAMI,OAAO,GAAG,MAAMC,8BAAc,CAACC,IAAI,CAACH,QAAQ,CAAC;EAEnD,MAAMF,UAAU,GAAG,yCAAyC;EAC5D,MAAMC,QAAQ,GAAG,uCAAuC;EAExD,MAAMK,OAAO,GAAGH,OAAO,CAACI,KAAK,CAAC,IAAIC,MAAM,CAACR,UAAU,CAAC,CAAC;EAErD,IAAI,CAACM,OAAO,EAAE;IACZ,MAAMI,wBAAwB,GAAI;AACtC,EAAEV,UAAW;AACb;AACA,IAAIkB,aAAa,KAAK,QAAQ,GAAG,qCAAqC,GAAG,EAAG;AAC5E;AACA;AACA,EAAEjB,QAAS;AACX,CAAC,CAACU,IAAI,CAAC,CAAC;IAEJP,8BAAc,CAACe,MAAM,CAACjB,QAAQ,EAAEQ,wBAAwB,CAAC;EAC3D;AACF"}
|
|
@@ -6,11 +6,6 @@ let pluginPackageRoot = f.next().filename;
|
|
|
6
6
|
pluginPackageRoot = path.dirname(pluginPackageRoot);
|
|
7
7
|
export const LOCAL_PATH_TO_CIO_NSE_FILES = path.join(pluginPackageRoot, 'src/helpers/native-files/ios');
|
|
8
8
|
export const IOS_DEPLOYMENT_TARGET = '13.0';
|
|
9
|
-
export const CIO_SDK_VERSION = "'~> 2.0'";
|
|
10
|
-
export const CIO_PODFILE_REGEX = /pod 'CustomerIO\/MessagingPushAPN'/;
|
|
11
|
-
export const CIO_CIO_TARGET_REGEX = /cio_target_names/;
|
|
12
|
-
export const CIO_PODFILE_NOTIFICATION_REGEX = /target 'NotificationService' do/;
|
|
13
|
-
export const CIO_PODFILE_POST_INSTALL_REGEX = /post_install do \|installer\|/;
|
|
14
9
|
export const GROUP_IDENTIFIER_TEMPLATE_REGEX = /{{GROUP_IDENTIFIER}}/gm;
|
|
15
10
|
export const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = /{{BUNDLE_SHORT_VERSION}}/gm;
|
|
16
11
|
export const BUNDLE_VERSION_TEMPLATE_REGEX = /{{BUNDLE_VERSION}}/gm;
|
|
@@ -57,16 +52,6 @@ export const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = `
|
|
|
57
52
|
- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
|
|
58
53
|
completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);
|
|
59
54
|
}`;
|
|
60
|
-
export const CIO_PODFILE_SNIPPET = ` pod 'CustomerIO/MessagingPushAPN', ${CIO_SDK_VERSION}`;
|
|
61
|
-
export const CIO_PODFILE_NOTIFICATION_SNIPPET = `
|
|
62
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
63
|
-
${CIO_PODFILE_SNIPPET}
|
|
64
|
-
end`;
|
|
65
|
-
export const CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET = `
|
|
66
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
67
|
-
use_frameworks! :linkage => :static
|
|
68
|
-
${CIO_PODFILE_SNIPPET}
|
|
69
|
-
end`;
|
|
70
55
|
export const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = `
|
|
71
56
|
@objc(registerPushNotification:)
|
|
72
57
|
public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["finder","require","path","f","__dirname","pluginPackageRoot","next","filename","dirname","LOCAL_PATH_TO_CIO_NSE_FILES","join","IOS_DEPLOYMENT_TARGET","
|
|
1
|
+
{"version":3,"names":["finder","require","path","f","__dirname","pluginPackageRoot","next","filename","dirname","LOCAL_PATH_TO_CIO_NSE_FILES","join","IOS_DEPLOYMENT_TARGET","GROUP_IDENTIFIER_TEMPLATE_REGEX","BUNDLE_SHORT_VERSION_TEMPLATE_REGEX","BUNDLE_VERSION_TEMPLATE_REGEX","CIO_DIDFINISHLAUNCHINGMETHOD_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERRORFULL_REGEX","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX","CIO_APPDELEGATEDECLARATION_REGEX","CIO_APPDELEGATEHEADER_REGEX","DEFAULT_BUNDLE_VERSION","DEFAULT_BUNDLE_SHORT_VERSION","CIO_TARGET_NAME","CIO_NOTIFICATION_TARGET_NAME","CIO_APPDELEGATEHEADER_SNIPPET","CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET","CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET","CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET","CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET","CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET","CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET","CIO_REGISTER_PUSHNOTIFICATION_SNIPPET"],"sources":["ios.ts"],"sourcesContent":["const finder = require('find-package-json');\nconst path = require('path');\n\nconst f = finder(__dirname);\nlet pluginPackageRoot = f.next().filename;\n// This is the path to the root of the customerio-expo-plugin package\npluginPackageRoot = path.dirname(pluginPackageRoot);\n\nexport const LOCAL_PATH_TO_CIO_NSE_FILES = path.join(\n pluginPackageRoot,\n 'src/helpers/native-files/ios'\n);\nexport const IOS_DEPLOYMENT_TARGET = '13.0';\nexport const GROUP_IDENTIFIER_TEMPLATE_REGEX = /{{GROUP_IDENTIFIER}}/gm;\nexport const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = /{{BUNDLE_SHORT_VERSION}}/gm;\nexport const BUNDLE_VERSION_TEMPLATE_REGEX = /{{BUNDLE_VERSION}}/gm;\nexport const CIO_DIDFINISHLAUNCHINGMETHOD_REGEX =\n /(- \\(BOOL\\)application:\\(UIApplication \\*\\)application didFinishLaunchingWithOptions:\\(NSDictionary \\*\\)launchOptions(\\s|\\n)*?\\{)((.|\\n)*)\\[super(\\s)application:application(\\s)didFinishLaunchingWithOptions:launchOptions\\];/;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_REGEX =\n /return \\[super application:application didFailToRegisterForRemoteNotificationsWithError:error\\];/;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERRORFULL_REGEX =\n /(- \\(void\\)application:\\(UIApplication \\*\\)application didFailToRegisterForRemoteNotificationsWithError:\\(NSError \\*\\)error(\\s|\\n)*?\\{)(.|\\n){2}.*\\n\\}/;\n\nexport const CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_REGEX =\n /return \\[super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken\\];/;\n\nexport const CIO_APPDELEGATEDECLARATION_REGEX =\n /@implementation AppDelegate(.|\\n)/;\n\nexport const CIO_APPDELEGATEHEADER_REGEX =\n /@interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate>/;\nexport const DEFAULT_BUNDLE_VERSION = '1';\nexport const DEFAULT_BUNDLE_SHORT_VERSION = '1.0';\nexport const CIO_TARGET_NAME = 'CustomerIOSDK';\nexport const CIO_NOTIFICATION_TARGET_NAME = 'NotificationService';\nexport const CIO_APPDELEGATEHEADER_SNIPPET = `\n#import <UserNotifications/UserNotifications.h>\n\n@interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate, UNUserNotificationCenterDelegate>\n`;\n\nexport const CIO_PUSHNOTIFICATIONHANDLERDECLARATION_SNIPPET = `\nCIOAppPushNotificationsHandler* pnHandlerObj = [[CIOAppPushNotificationsHandler alloc] init];\n`;\n\nexport const CIO_DIDFAILTOREGISTERFORREMOTENOTIFICATIONSWITHERROR_SNIPPET = `\n [super application:application didFailToRegisterForRemoteNotificationsWithError:error];\n [pnHandlerObj application:application error:error];\n`;\n\nexport const CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPET = `\n [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];\n return [pnHandlerObj application:application deviceToken:deviceToken];\n`;\n\nexport const CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET = `\n // Register for push notifications\n [pnHandlerObj registerPushNotification:self];\n`;\n\n// Enable push handling - notification response\nexport const CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET = `\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {\n [pnHandlerObj userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];\n}`;\n\n// Foreground push handling\nexport const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = `\n// show push when the app is in foreground\n- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {\n completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);\n}`;\nexport const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = `\n@objc(registerPushNotification:)\n public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {\n\n let center = UNUserNotificationCenter.current()\n center.delegate = notificationDelegate\n center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in\n if error == nil{\n DispatchQueue.main.async {\n UIApplication.shared.registerForRemoteNotifications()\n }\n }\n }\n }`;\n"],"mappings":"AAAA,MAAMA,MAAM,GAAGC,OAAO,CAAC,mBAAmB,CAAC;AAC3C,MAAMC,IAAI,GAAGD,OAAO,CAAC,MAAM,CAAC;AAE5B,MAAME,CAAC,GAAGH,MAAM,CAACI,SAAS,CAAC;AAC3B,IAAIC,iBAAiB,GAAGF,CAAC,CAACG,IAAI,CAAC,CAAC,CAACC,QAAQ;AACzC;AACAF,iBAAiB,GAAGH,IAAI,CAACM,OAAO,CAACH,iBAAiB,CAAC;AAEnD,OAAO,MAAMI,2BAA2B,GAAGP,IAAI,CAACQ,IAAI,CAClDL,iBAAiB,EACjB,8BACF,CAAC;AACD,OAAO,MAAMM,qBAAqB,GAAG,MAAM;AAC3C,OAAO,MAAMC,+BAA+B,GAAG,wBAAwB;AACvE,OAAO,MAAMC,mCAAmC,GAAG,4BAA4B;AAC/E,OAAO,MAAMC,6BAA6B,GAAG,sBAAsB;AACnE,OAAO,MAAMC,kCAAkC,GAC7C,gOAAgO;AAElO,OAAO,MAAMC,0DAA0D,GACrE,kGAAkG;AAEpG,OAAO,MAAMC,8DAA8D,GACzE,wJAAwJ;AAE1J,OAAO,MAAMC,0DAA0D,GACrE,wGAAwG;AAE1G,OAAO,MAAMC,gCAAgC,GAC3C,mCAAmC;AAErC,OAAO,MAAMC,2BAA2B,GACtC,mEAAmE;AACrE,OAAO,MAAMC,sBAAsB,GAAG,GAAG;AACzC,OAAO,MAAMC,4BAA4B,GAAG,KAAK;AACjD,OAAO,MAAMC,eAAe,GAAG,eAAe;AAC9C,OAAO,MAAMC,4BAA4B,GAAG,qBAAqB;AACjE,OAAO,MAAMC,6BAA6B,GAAI;AAC9C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,8CAA8C,GAAI;AAC/D;AACA,CAAC;AAED,OAAO,MAAMC,4DAA4D,GAAI;AAC7E;AACA;AACA,CAAC;AAED,OAAO,MAAMC,4DAA4D,GAAI;AAC7E;AACA;AACA,CAAC;AAED,OAAO,MAAMC,2CAA2C,GAAI;AAC5D;AACA;AACA,CAAC;;AAED;AACA,OAAO,MAAMC,iDAAiD,GAAI;AAClE;AACA;AACA,EAAE;;AAEF;AACA,OAAO,MAAMC,0CAA0C,GAAI;AAC3D;AACA;AACA;AACA,EAAE;AACF,OAAO,MAAMC,qCAAqC,GAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI"}
|
|
@@ -1,29 +1,42 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { injectCodeByRegex } from './codeInjection';
|
|
2
2
|
import { FileManagement } from './fileManagement';
|
|
3
3
|
export async function injectCIOPodfileCode(iosPath) {
|
|
4
|
+
const blockStart = '# --- CustomerIO Host App START ---';
|
|
5
|
+
const blockEnd = '# --- CustomerIO Host App END ---';
|
|
4
6
|
const filename = `${iosPath}/Podfile`;
|
|
5
7
|
const podfile = await FileManagement.read(filename);
|
|
6
|
-
const matches = podfile.match(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
9
|
+
if (!matches) {
|
|
10
|
+
// We need to decide what line of code in the Podfile to insert our native code.
|
|
11
|
+
// The "post_install" line is always present in an Expo project Podfile so it's reliable.
|
|
12
|
+
// Find that line in the Podfile and then we will insert our code above that line.
|
|
13
|
+
const lineInPodfileToInjectSnippetBefore = /post_install do \|installer\|/;
|
|
14
|
+
const snippetToInjectInPodfile = `
|
|
15
|
+
${blockStart}
|
|
16
|
+
pod 'customerio-reactnative/apn', :path => '../node_modules/customerio-reactnative'
|
|
17
|
+
${blockEnd}
|
|
18
|
+
`.trim();
|
|
19
|
+
FileManagement.write(filename, injectCodeByRegex(podfile, lineInPodfileToInjectSnippetBefore, snippetToInjectInPodfile).join('\n'));
|
|
16
20
|
} else {
|
|
17
|
-
console.log('
|
|
21
|
+
console.log('CustomerIO Podfile snippets already exists. Skipping...');
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
export async function injectCIONotificationPodfileCode(iosPath, useFrameworks) {
|
|
21
25
|
const filename = `${iosPath}/Podfile`;
|
|
22
26
|
const podfile = await FileManagement.read(filename);
|
|
23
|
-
const
|
|
27
|
+
const blockStart = '# --- CustomerIO Notification START ---';
|
|
28
|
+
const blockEnd = '# --- CustomerIO Notification END ---';
|
|
29
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
24
30
|
if (!matches) {
|
|
25
|
-
const
|
|
26
|
-
|
|
31
|
+
const snippetToInjectInPodfile = `
|
|
32
|
+
${blockStart}
|
|
33
|
+
target 'NotificationService' do
|
|
34
|
+
${useFrameworks === 'static' ? 'use_frameworks! :linkage => :static' : ''}
|
|
35
|
+
pod 'customerio-reactnative-richpush/apn', :path => '../node_modules/customerio-reactnative'
|
|
36
|
+
end
|
|
37
|
+
${blockEnd}
|
|
38
|
+
`.trim();
|
|
39
|
+
FileManagement.append(filename, snippetToInjectInPodfile);
|
|
27
40
|
}
|
|
28
41
|
}
|
|
29
42
|
//# sourceMappingURL=injectCIOPodfileCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["injectCodeByRegex","FileManagement","injectCIOPodfileCode","iosPath","blockStart","blockEnd","filename","podfile","read","matches","match","RegExp","lineInPodfileToInjectSnippetBefore","snippetToInjectInPodfile","trim","write","join","console","log","injectCIONotificationPodfileCode","useFrameworks","append"],"sources":["injectCIOPodfileCode.ts"],"sourcesContent":["import type { CustomerIOPluginOptionsIOS } from '../../types/cio-types';\nimport { injectCodeByRegex } from './codeInjection';\nimport { FileManagement } from './fileManagement';\n\nexport async function injectCIOPodfileCode(iosPath: string) {\n const blockStart = '# --- CustomerIO Host App START ---';\n const blockEnd = '# --- CustomerIO Host App END ---';\n\n const filename = `${iosPath}/Podfile`;\n const podfile = await FileManagement.read(filename);\n const matches = podfile.match(new RegExp(blockStart));\n\n if (!matches) {\n // We need to decide what line of code in the Podfile to insert our native code.\n // The \"post_install\" line is always present in an Expo project Podfile so it's reliable.\n // Find that line in the Podfile and then we will insert our code above that line.\n const lineInPodfileToInjectSnippetBefore = /post_install do \\|installer\\|/;\n\n const snippetToInjectInPodfile = `\n${blockStart}\n pod 'customerio-reactnative/apn', :path => '../node_modules/customerio-reactnative'\n${blockEnd}\n`.trim();\n\n FileManagement.write(\n filename,\n injectCodeByRegex(\n podfile,\n lineInPodfileToInjectSnippetBefore,\n snippetToInjectInPodfile\n ).join('\\n')\n );\n } else {\n console.log('CustomerIO Podfile snippets already exists. Skipping...');\n }\n}\n\nexport async function injectCIONotificationPodfileCode(\n iosPath: string,\n useFrameworks: CustomerIOPluginOptionsIOS['useFrameworks']\n) {\n const filename = `${iosPath}/Podfile`;\n const podfile = await FileManagement.read(filename);\n\n const blockStart = '# --- CustomerIO Notification START ---';\n const blockEnd = '# --- CustomerIO Notification END ---';\n\n const matches = podfile.match(new RegExp(blockStart));\n\n if (!matches) {\n const snippetToInjectInPodfile = `\n${blockStart}\ntarget 'NotificationService' do\n ${useFrameworks === 'static' ? 'use_frameworks! :linkage => :static' : ''}\n pod 'customerio-reactnative-richpush/apn', :path => '../node_modules/customerio-reactnative'\nend\n${blockEnd}\n`.trim();\n\n FileManagement.append(filename, snippetToInjectInPodfile);\n }\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,iBAAiB;AACnD,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,OAAO,eAAeC,oBAAoBA,CAACC,OAAe,EAAE;EAC1D,MAAMC,UAAU,GAAG,qCAAqC;EACxD,MAAMC,QAAQ,GAAG,mCAAmC;EAEpD,MAAMC,QAAQ,GAAI,GAAEH,OAAQ,UAAS;EACrC,MAAMI,OAAO,GAAG,MAAMN,cAAc,CAACO,IAAI,CAACF,QAAQ,CAAC;EACnD,MAAMG,OAAO,GAAGF,OAAO,CAACG,KAAK,CAAC,IAAIC,MAAM,CAACP,UAAU,CAAC,CAAC;EAErD,IAAI,CAACK,OAAO,EAAE;IACZ;IACA;IACA;IACA,MAAMG,kCAAkC,GAAG,+BAA+B;IAE1E,MAAMC,wBAAwB,GAAI;AACtC,EAAET,UAAW;AACb;AACA,EAAEC,QAAS;AACX,CAAC,CAACS,IAAI,CAAC,CAAC;IAEJb,cAAc,CAACc,KAAK,CAClBT,QAAQ,EACRN,iBAAiB,CACfO,OAAO,EACPK,kCAAkC,EAClCC,wBACF,CAAC,CAACG,IAAI,CAAC,IAAI,CACb,CAAC;EACH,CAAC,MAAM;IACLC,OAAO,CAACC,GAAG,CAAC,yDAAyD,CAAC;EACxE;AACF;AAEA,OAAO,eAAeC,gCAAgCA,CACpDhB,OAAe,EACfiB,aAA0D,EAC1D;EACA,MAAMd,QAAQ,GAAI,GAAEH,OAAQ,UAAS;EACrC,MAAMI,OAAO,GAAG,MAAMN,cAAc,CAACO,IAAI,CAACF,QAAQ,CAAC;EAEnD,MAAMF,UAAU,GAAG,yCAAyC;EAC5D,MAAMC,QAAQ,GAAG,uCAAuC;EAExD,MAAMI,OAAO,GAAGF,OAAO,CAACG,KAAK,CAAC,IAAIC,MAAM,CAACP,UAAU,CAAC,CAAC;EAErD,IAAI,CAACK,OAAO,EAAE;IACZ,MAAMI,wBAAwB,GAAI;AACtC,EAAET,UAAW;AACb;AACA,IAAIgB,aAAa,KAAK,QAAQ,GAAG,qCAAqC,GAAG,EAAG;AAC5E;AACA;AACA,EAAEf,QAAS;AACX,CAAC,CAACS,IAAI,CAAC,CAAC;IAEJb,cAAc,CAACoB,MAAM,CAACf,QAAQ,EAAEO,wBAAwB,CAAC;EAC3D;AACF"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
export declare const LOCAL_PATH_TO_CIO_NSE_FILES: any;
|
|
2
2
|
export declare const IOS_DEPLOYMENT_TARGET = "13.0";
|
|
3
|
-
export declare const CIO_SDK_VERSION = "'~> 2.0'";
|
|
4
|
-
export declare const CIO_PODFILE_REGEX: RegExp;
|
|
5
|
-
export declare const CIO_CIO_TARGET_REGEX: RegExp;
|
|
6
|
-
export declare const CIO_PODFILE_NOTIFICATION_REGEX: RegExp;
|
|
7
|
-
export declare const CIO_PODFILE_POST_INSTALL_REGEX: RegExp;
|
|
8
3
|
export declare const GROUP_IDENTIFIER_TEMPLATE_REGEX: RegExp;
|
|
9
4
|
export declare const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX: RegExp;
|
|
10
5
|
export declare const BUNDLE_VERSION_TEMPLATE_REGEX: RegExp;
|
|
@@ -25,7 +20,4 @@ export declare const CIO_DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN_SNIPPE
|
|
|
25
20
|
export declare const CIO_CONFIGURECIOSDKPUSHNOTIFICATION_SNIPPET = "\n // Register for push notifications\n [pnHandlerObj registerPushNotification:self];\n";
|
|
26
21
|
export declare const CIO_DIDRECEIVENOTIFICATIONRESPONSEHANDLER_SNIPPET = "\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {\n [pnHandlerObj userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];\n}";
|
|
27
22
|
export declare const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = "\n// show push when the app is in foreground\n- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {\n completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);\n}";
|
|
28
|
-
export declare const CIO_PODFILE_SNIPPET: string;
|
|
29
|
-
export declare const CIO_PODFILE_NOTIFICATION_SNIPPET: string;
|
|
30
|
-
export declare const CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET: string;
|
|
31
23
|
export declare const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = "\n@objc(registerPushNotification:)\n public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {\n\n let center = UNUserNotificationCenter.current()\n center.delegate = notificationDelegate\n center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in\n if error == nil{\n DispatchQueue.main.async {\n UIApplication.shared.registerForRemoteNotifications()\n }\n }\n }\n }";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "customerio-expo-plugin",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.11",
|
|
4
4
|
"description": "Expo config plugin for the Customer IO React Native SDK",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"registry": "https://registry.npmjs.org/"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"customerio-reactnative": "^
|
|
43
|
+
"customerio-reactnative": "^3.0.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@expo/config-plugins": "^4.1.4",
|
|
@@ -11,11 +11,6 @@ export const LOCAL_PATH_TO_CIO_NSE_FILES = path.join(
|
|
|
11
11
|
'src/helpers/native-files/ios'
|
|
12
12
|
);
|
|
13
13
|
export const IOS_DEPLOYMENT_TARGET = '13.0';
|
|
14
|
-
export const CIO_SDK_VERSION = "'~> 2.0'";
|
|
15
|
-
export const CIO_PODFILE_REGEX = /pod 'CustomerIO\/MessagingPushAPN'/;
|
|
16
|
-
export const CIO_CIO_TARGET_REGEX = /cio_target_names/;
|
|
17
|
-
export const CIO_PODFILE_NOTIFICATION_REGEX = /target 'NotificationService' do/;
|
|
18
|
-
export const CIO_PODFILE_POST_INSTALL_REGEX = /post_install do \|installer\|/;
|
|
19
14
|
export const GROUP_IDENTIFIER_TEMPLATE_REGEX = /{{GROUP_IDENTIFIER}}/gm;
|
|
20
15
|
export const BUNDLE_SHORT_VERSION_TEMPLATE_REGEX = /{{BUNDLE_SHORT_VERSION}}/gm;
|
|
21
16
|
export const BUNDLE_VERSION_TEMPLATE_REGEX = /{{BUNDLE_VERSION}}/gm;
|
|
@@ -77,17 +72,6 @@ export const CIO_WILLPRESENTNOTIFICATIONHANDLER_SNIPPET = `
|
|
|
77
72
|
- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
|
|
78
73
|
completionHandler( UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound);
|
|
79
74
|
}`;
|
|
80
|
-
export const CIO_PODFILE_SNIPPET = ` pod 'CustomerIO/MessagingPushAPN', ${CIO_SDK_VERSION}`;
|
|
81
|
-
export const CIO_PODFILE_NOTIFICATION_SNIPPET = `
|
|
82
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
83
|
-
${CIO_PODFILE_SNIPPET}
|
|
84
|
-
end`;
|
|
85
|
-
export const CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET = `
|
|
86
|
-
target '${CIO_NOTIFICATION_TARGET_NAME}' do
|
|
87
|
-
use_frameworks! :linkage => :static
|
|
88
|
-
${CIO_PODFILE_SNIPPET}
|
|
89
|
-
end`;
|
|
90
|
-
|
|
91
75
|
export const CIO_REGISTER_PUSHNOTIFICATION_SNIPPET = `
|
|
92
76
|
@objc(registerPushNotification:)
|
|
93
77
|
public func registerPushNotification(withNotificationDelegate notificationDelegate: UNUserNotificationCenterDelegate) {
|
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
import type { CustomerIOPluginOptionsIOS } from '../../types/cio-types';
|
|
2
|
-
import {
|
|
3
|
-
CIO_PODFILE_REGEX,
|
|
4
|
-
CIO_PODFILE_SNIPPET,
|
|
5
|
-
CIO_PODFILE_NOTIFICATION_SNIPPET,
|
|
6
|
-
CIO_PODFILE_NOTIFICATION_STATIC_FRAMEWORK_SNIPPET,
|
|
7
|
-
CIO_PODFILE_NOTIFICATION_REGEX,
|
|
8
|
-
CIO_CIO_TARGET_REGEX,
|
|
9
|
-
CIO_PODFILE_POST_INSTALL_REGEX,
|
|
10
|
-
} from '../constants/ios';
|
|
2
|
+
import { injectCodeByRegex } from './codeInjection';
|
|
11
3
|
import { FileManagement } from './fileManagement';
|
|
12
4
|
|
|
13
5
|
export async function injectCIOPodfileCode(iosPath: string) {
|
|
6
|
+
const blockStart = '# --- CustomerIO Host App START ---';
|
|
7
|
+
const blockEnd = '# --- CustomerIO Host App END ---';
|
|
8
|
+
|
|
14
9
|
const filename = `${iosPath}/Podfile`;
|
|
15
10
|
const podfile = await FileManagement.read(filename);
|
|
16
|
-
const matches = podfile.match(
|
|
17
|
-
|
|
11
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
12
|
+
|
|
13
|
+
if (!matches) {
|
|
14
|
+
// We need to decide what line of code in the Podfile to insert our native code.
|
|
15
|
+
// The "post_install" line is always present in an Expo project Podfile so it's reliable.
|
|
16
|
+
// Find that line in the Podfile and then we will insert our code above that line.
|
|
17
|
+
const lineInPodfileToInjectSnippetBefore = /post_install do \|installer\|/;
|
|
18
|
+
|
|
19
|
+
const snippetToInjectInPodfile = `
|
|
20
|
+
${blockStart}
|
|
21
|
+
pod 'customerio-reactnative/apn', :path => '../node_modules/customerio-reactnative'
|
|
22
|
+
${blockEnd}
|
|
23
|
+
`.trim();
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
FileManagement.write(
|
|
26
|
+
filename,
|
|
27
|
+
injectCodeByRegex(
|
|
28
|
+
podfile,
|
|
29
|
+
lineInPodfileToInjectSnippetBefore,
|
|
30
|
+
snippetToInjectInPodfile
|
|
31
|
+
).join('\n')
|
|
23
32
|
);
|
|
24
|
-
let content: string[] = lines;
|
|
25
|
-
if (index > -1) {
|
|
26
|
-
content = [
|
|
27
|
-
...lines.slice(0, index - 1),
|
|
28
|
-
!matches ? CIO_PODFILE_SNIPPET : '',
|
|
29
|
-
...lines.slice(index - 1),
|
|
30
|
-
];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
FileManagement.write(filename, content.join('\n'));
|
|
34
33
|
} else {
|
|
35
|
-
console.log('
|
|
34
|
+
console.log('CustomerIO Podfile snippets already exists. Skipping...');
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
|
|
@@ -42,13 +41,22 @@ export async function injectCIONotificationPodfileCode(
|
|
|
42
41
|
) {
|
|
43
42
|
const filename = `${iosPath}/Podfile`;
|
|
44
43
|
const podfile = await FileManagement.read(filename);
|
|
45
|
-
|
|
44
|
+
|
|
45
|
+
const blockStart = '# --- CustomerIO Notification START ---';
|
|
46
|
+
const blockEnd = '# --- CustomerIO Notification END ---';
|
|
47
|
+
|
|
48
|
+
const matches = podfile.match(new RegExp(blockStart));
|
|
46
49
|
|
|
47
50
|
if (!matches) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const snippetToInjectInPodfile = `
|
|
52
|
+
${blockStart}
|
|
53
|
+
target 'NotificationService' do
|
|
54
|
+
${useFrameworks === 'static' ? 'use_frameworks! :linkage => :static' : ''}
|
|
55
|
+
pod 'customerio-reactnative-richpush/apn', :path => '../node_modules/customerio-reactnative'
|
|
56
|
+
end
|
|
57
|
+
${blockEnd}
|
|
58
|
+
`.trim();
|
|
59
|
+
|
|
60
|
+
FileManagement.append(filename, snippetToInjectInPodfile);
|
|
53
61
|
}
|
|
54
62
|
}
|