diff --git a/appcenter-analytics/package.json b/appcenter-analytics/package.json index 21bd6d63c..9cf005fc7 100644 --- a/appcenter-analytics/package.json +++ b/appcenter-analytics/package.json @@ -22,25 +22,8 @@ "appcenter": "1.3.0" }, "rnpm": { - "params": [ - { - "type": "list", - "name": "whenToEnableAnalytics", - "message": "For the Android app, should user tracking be enabled automatically?", - "choices": [ - { - "name": "Enable Automatically", - "value": "ALWAYS_SEND" - }, - { - "name": "Enable in JavaScript", - "value": "ENABLE_IN_JS" - } - ] - } - ], "android": { - "packageInstance": "new AppCenterReactNativeAnalyticsPackage(MainApplication.this, ${whenToEnableAnalytics})" + "packageInstance": "new AppCenterReactNativeAnalyticsPackage(MainApplication.this, getResources().getString(R.string.appCenterAnalytics_whenToEnableAnalytics))" }, "commands": { "prelink": "node node_modules/appcenter-analytics/scripts/prelink", diff --git a/appcenter-analytics/scripts/postlink.js b/appcenter-analytics/scripts/postlink.js index 1888def60..1c5d17258 100644 --- a/appcenter-analytics/scripts/postlink.js +++ b/appcenter-analytics/scripts/postlink.js @@ -1,22 +1,53 @@ const rnpmlink = require('appcenter-link-scripts'); -const npmPackages = require('./../package.json'); +const inquirer = require('inquirer'); return rnpmlink.ios.checkIfAppDelegateExists() .then(() => rnpmlink.ios.initAppCenterConfig().catch((e) => { console.log(`Could not create or update AppCenter config file (AppCenter-Config.plist). Error Reason - ${e.message}`); return Promise.reject(); })) - .then(() => { - const prompt = npmPackages.rnpm.params[0]; - prompt.message = prompt.message.replace(/Android/, 'iOS'); - return rnpmlink.inquirer.prompt(prompt) - .catch((e) => { - console.log(`Could not determine when to enable AppCenter analytics. Error Reason - ${e.message}`); - return Promise.reject(); - }); + .then(() => + inquirer.prompt([{ + type: 'list', + name: 'whenToEnableAnalytics', + message: 'For the Android app, should user tracking be enabled automatically?', + choices: [ + { + name: 'Enable Automatically', + value: 'ALWAYS_SEND' + }, + { + name: 'Enable in JavaScript', + value: 'ENABLE_IN_JS' + }] + }]).catch((e) => { + console.log(`Could not determine when to enable AppCenter analytics. Error Reason - ${e.message}`); + return Promise.reject(); + }) + ) + .then((androidAnswer) => { + rnpmlink.android.patchStrings('appCenterAnalytics_whenToEnableAnalytics', + androidAnswer.whenToEnableAnalytics); + return inquirer.prompt([{ + type: 'list', + name: 'whenToEnableAnalytics', + message: 'For the iOS app, should user tracking be enabled automatically?', + choices: [ + { + name: 'Enable Automatically', + value: 'ALWAYS_SEND' + }, + { + name: 'Enable in JavaScript', + value: 'ENABLE_IN_JS' + }] + }]).catch((e) => { + console.log(`Could not determine when to enable AppCenter analytics. Error Reason - ${e.message}`); + return Promise.reject(); + }); }) - .then((answer) => { - const code = answer.whenToEnableAnalytics === 'ALWAYS_SEND' ? + .then((iosAnswer) => { + const code = iosAnswer.whenToEnableAnalytics === 'ALWAYS_SEND' ? ' [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true]; // Initialize AppCenter analytics' : ' [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:false]; // Initialize AppCenter analytics'; return rnpmlink.ios.initInAppDelegate('#import ', code, /.*\[AppCenterReactNativeAnalytics register.*/g) diff --git a/appcenter-crashes/package.json b/appcenter-crashes/package.json index c9a804a88..0ded1220a 100644 --- a/appcenter-crashes/package.json +++ b/appcenter-crashes/package.json @@ -24,25 +24,8 @@ "appcenter": "1.3.0" }, "rnpm": { - "params": [ - { - "type": "list", - "name": "whenToSendCrashes", - "message": "For the Android app, should crashes be sent automatically or processed in JavaScript before being sent?", - "choices": [ - { - "name": "Automatically", - "value": "ALWAYS_SEND" - }, - { - "name": "Processed in JavaScript by user", - "value": "ASK_JAVASCRIPT" - } - ] - } - ], "android": { - "packageInstance": "new AppCenterReactNativeCrashesPackage(MainApplication.this, ${whenToSendCrashes})" + "packageInstance": "new AppCenterReactNativeCrashesPackage(MainApplication.this, getResources().getString(R.string.appCenterCrashes_whenToSendCrashes))" }, "commands": { "prelink": "node node_modules/appcenter-crashes/scripts/prelink", diff --git a/appcenter-crashes/scripts/postlink.js b/appcenter-crashes/scripts/postlink.js index 5a23c86ff..34d79d1a0 100644 --- a/appcenter-crashes/scripts/postlink.js +++ b/appcenter-crashes/scripts/postlink.js @@ -1,22 +1,53 @@ const rnpmlink = require('appcenter-link-scripts'); -const npmPackages = require('./../package.json'); +const inquirer = require('inquirer'); return rnpmlink.ios.checkIfAppDelegateExists() .then(() => rnpmlink.ios.initAppCenterConfig().catch((e) => { console.log(`Could not create or update AppCenter config file (AppCenter-Config.plist). Error Reason - ${e.message}`); return Promise.reject(); })) - .then(() => { - const prompt = npmPackages.rnpm.params[0]; - prompt.message = prompt.message.replace(/Android/, 'iOS'); - return rnpmlink.inquirer.prompt(prompt) - .catch((e) => { - console.log(`Could not determine when to send AppCenter crashes. Error Reason - ${e.message}`); - return Promise.reject(); - }); + .then(() => + inquirer.prompt([{ + type: 'list', + name: 'whenToSendCrashes', + message: 'For the Android app, should crashes be sent automatically or processed in JavaScript before being sent?', + choices: [ + { + name: 'Automatically', + value: 'ALWAYS_SEND' + }, + { + name: 'Processed in JavaScript by user', + value: 'ASK_JAVASCRIPT' + }] + }]).catch((e) => { + console.log(`Could not determine when to send AppCenter crashes. Error Reason - ${e.message}`); + return Promise.reject(); + }) + ) + .then((androidAnswer) => { + rnpmlink.android.patchStrings('appCenterCrashes_whenToSendCrashes', + androidAnswer.whenToSendCrashes); + return inquirer.prompt([{ + type: 'list', + name: 'whenToSendCrashes', + message: 'For the iOS app, should crashes be sent automatically or processed in JavaScript before being sent?', + choices: [ + { + name: 'Automatically', + value: 'ALWAYS_SEND' + }, + { + name: 'Processed in JavaScript by user', + value: 'ASK_JAVASCRIPT' + }] + }]).catch((e) => { + console.log(`Could not determine when to send AppCenter crashes. Error Reason - ${e.message}`); + return Promise.reject(); + }); }) - .then((answer) => { - const code = answer.whenToSendCrashes === 'ALWAYS_SEND' ? + .then((iosAnswer) => { + const code = iosAnswer.whenToSendCrashes === 'ALWAYS_SEND' ? ' [AppCenterReactNativeCrashes registerWithAutomaticProcessing]; // Initialize AppCenter crashes' : ' [AppCenterReactNativeCrashes register]; // Initialize AppCenter crashes'; return rnpmlink.ios.initInAppDelegate('#import ', code, /.*\[AppCenterReactNativeCrashes register.*/g) diff --git a/appcenter-link-scripts/src/android/index.js b/appcenter-link-scripts/src/android/index.js index e96ea19e9..47c49a562 100644 --- a/appcenter-link-scripts/src/android/index.js +++ b/appcenter-link-scripts/src/android/index.js @@ -1,4 +1,5 @@ const fs = require('fs'); +const path = require('path'); const inquirer = require('inquirer'); const debug = require('debug')('appcenter-link:android:index'); @@ -39,5 +40,18 @@ module.exports = { console.log(`App Secret for Android written to ${file}`); return file; }); + }, + + patchStrings(key, value) { + const stringsFile = path.join('android', 'app', 'src', 'main', 'res', 'values', 'strings.xml'); + let stringsXml = fs.readFileSync(stringsFile, 'utf-8'); + const pattern = new RegExp(`.*`); + const newValue = `${value}`; + if (stringsXml.match(pattern)) { + stringsXml = stringsXml.replace(pattern, newValue); + } else { + stringsXml = stringsXml.replace('\n', `\n ${newValue}\n`); + } + fs.writeFileSync(stringsFile, stringsXml); } };