diff options
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js')
| -rw-r--r-- | StoneIsland/plugins/cordova-plugin-firebasex/scripts/after_prepare.js | 164 |
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); + } +}; |
