summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js')
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js b/StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js
new file mode 100644
index 00000000..b3a7ab59
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js
@@ -0,0 +1,164 @@
+#!/usr/bin/env node
+
+'use strict';
+
+/**
+ * This hook makes sure projects using [cordova-plugin-firebase](https://github.com/arnesson/cordova-plugin-firebase)
+ * will build properly and have the required key files copied to the proper destinations when the app is build on Ionic Cloud using the package command.
+ * Credits: https://github.com/arnesson.
+ */
+var fs = require('fs');
+var path = require("path");
+var Utilities = require("./lib/utilities");
+
+var appName = Utilities.getAppName();
+var pluginVariables = {};
+
+var IOS_DIR = 'platforms/ios';
+var ANDROID_DIR = 'platforms/android';
+var PLUGIN_ID = 'cordova-plugin-firebasex';
+
+var PLATFORM = {
+ IOS: {
+ dest: IOS_DIR + '/' + appName + '/Resources/GoogleService-Info.plist',
+ src: [
+ 'GoogleService-Info.plist',
+ IOS_DIR + '/www/GoogleService-Info.plist',
+ 'www/GoogleService-Info.plist'
+ ],
+ appPlist: IOS_DIR + '/' + appName + '/'+appName+'-Info.plist',
+ },
+ ANDROID: {
+ dest: ANDROID_DIR + '/app/google-services.json',
+ src: [
+ 'google-services.json',
+ ANDROID_DIR + '/assets/www/google-services.json',
+ 'www/google-services.json',
+ ANDROID_DIR + '/app/src/main/google-services.json'
+ ],
+ colorsXml:{
+ src: './plugins/' + Utilities.getPluginId() +'/src/android/colors.xml',
+ target: ANDROID_DIR + '/app/src/main/res/values/colors.xml'
+ }
+ }
+};
+
+
+var parsePluginVariables = function(){
+ // Parse plugin.xml
+ var plugin = Utilities.parsePluginXml();
+ var prefs = [];
+ if(plugin.plugin.preference){
+ prefs = prefs.concat(plugin.plugin.preference);
+ }
+ plugin.plugin.platform.forEach(function(platform){
+ if(platform.preference){
+ prefs = prefs.concat(platform.preference);
+ }
+ });
+ prefs.forEach(function(pref){
+ pluginVariables[pref._attributes.name] = pref._attributes.default;
+ });
+
+ // Parse config.xml
+ var config = Utilities.parseConfigXml();
+ (config.widget.plugin ? [].concat(config.widget.plugin) : []).forEach(function(plugin){
+ (plugin.variable ? [].concat(plugin.variable) : []).forEach(function(variable){
+ if((plugin._attributes.name === PLUGIN_ID || plugin._attributes.id === PLUGIN_ID) && variable._attributes.name && variable._attributes.value){
+ pluginVariables[variable._attributes.name] = variable._attributes.value;
+ }
+ });
+ });
+
+ // Parse package.json
+ var packageJSON = Utilities.parsePackageJson();
+ if(packageJSON.cordova && packageJSON.cordova.plugins){
+ for(const pluginId in packageJSON.cordova.plugins){
+ if(pluginId === PLUGIN_ID){
+ for(const varName in packageJSON.cordova.plugins[pluginId]){
+ var varValue = packageJSON.cordova.plugins[pluginId][varName];
+ pluginVariables[varName] = varValue;
+ }
+ }
+ }
+ }
+
+ // set platform key path from plugin variable
+ if (pluginVariables.ANDROID_FIREBASE_CONFIG_FILEPATH) PLATFORM.ANDROID.src = [pluginVariables.ANDROID_FIREBASE_CONFIG_FILEPATH];
+ if (pluginVariables.IOS_FIREBASE_CONFIG_FILEPATH) PLATFORM.IOS.src = [pluginVariables.IOS_FIREBASE_CONFIG_FILEPATH];
+};
+
+module.exports = function (context) {
+
+ //get platform from the context supplied by cordova
+ var platforms = context.opts.platforms;
+ parsePluginVariables();
+
+ // Copy key files to their platform specific folders
+ if (platforms.indexOf('android') !== -1 && Utilities.directoryExists(ANDROID_DIR)) {
+ Utilities.log('Preparing Firebase on Android');
+ Utilities.copyKey(PLATFORM.ANDROID);
+
+ if(!fs.existsSync(path.resolve(PLATFORM.ANDROID.colorsXml.target))){
+ fs.copyFileSync(path.resolve(PLATFORM.ANDROID.colorsXml.src), path.resolve(PLATFORM.ANDROID.colorsXml.target));
+ }
+
+ const $colorsXml = Utilities.parseXmlFileToJson(PLATFORM.ANDROID.colorsXml.target, {compact: true});
+ var accentColor = pluginVariables.ANDROID_ICON_ACCENT,
+ $resources = $colorsXml.resources,
+ existingAccent = false,
+ writeChanges = false;
+
+ if($resources.color){
+ var $colors = $resources.color.length ? $resources.color : [$resources.color];
+ $colors.forEach(function($color){
+ if($color._attributes.name === 'accent'){
+ existingAccent = true;
+ if($color._text !== accentColor){
+ $color._text = accentColor;
+ writeChanges = true;
+ }
+ }
+ });
+ }else{
+ $resources.color = {};
+ }
+
+ if(!existingAccent){
+ var $accentColor = {
+ _attributes: {
+ name: 'accent'
+ },
+ _text: accentColor
+ };
+ if($resources.color && Object.keys($resources.color).length){
+ if(typeof $resources.color.length === 'undefined'){
+ $resources.color = [$resources.color];
+ }
+ $resources.color.push($accentColor)
+ }else{
+ $resources.color = $accentColor;
+ }
+ writeChanges = true;
+ }
+
+ if(writeChanges){
+ Utilities.writeJsonToXmlFile($colorsXml, PLATFORM.ANDROID.colorsXml.target);
+ Utilities.log('Updated colors.xml with accent color');
+ }
+ }
+
+ if (platforms.indexOf('ios') !== -1 && Utilities.directoryExists(IOS_DIR)){
+ Utilities.log('Preparing Firebase on iOS');
+ Utilities.copyKey(PLATFORM.IOS);
+
+ var helper = require("./ios/helper");
+ var xcodeProjectPath = helper.getXcodeProjectPath();
+ helper.ensureRunpathSearchPath(context, xcodeProjectPath);
+
+ if(pluginVariables['IOS_STRIP_DEBUG'] && pluginVariables['IOS_STRIP_DEBUG'] === 'true'){
+ helper.stripDebugSymbols();
+ }
+ helper.applyPluginVarsToPlists(PLATFORM.IOS.dest, PLATFORM.IOS.appPlist, pluginVariables);
+ }
+};