Skip to content

Commit

Permalink
Stop ignoring preBuild script files
Browse files Browse the repository at this point in the history
  • Loading branch information
Definitely-Not-Vlad committed Dec 14, 2020
1 parent 2d3365f commit 66ed776
Show file tree
Hide file tree
Showing 34 changed files with 1,089 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ yarn.lock
.tmp/

# Build files
build
*/*/server/build

# Zip files
*.zip
Expand Down
16 changes: 16 additions & 0 deletions shoutem.advertising/app/build/const.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const pack = require('../package.json');

// defines scope for the current extension state within the global app's state
function ext(resourceName) {
return resourceName ? `${pack.name}.${resourceName}` : pack.name;
}

const DEFAULT_ADMOB_APPS = {
IOS: 'ca-app-pub-7090812163729304~6362478856',
ANDROID: 'ca-app-pub-7090812163729304~5646069659'
};

module.exports = {
ext,
DEFAULT_ADMOB_APPS,
};
7 changes: 7 additions & 0 deletions shoutem.advertising/app/build/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const { injectFirebaseSettings } = require('./injectFirebaseSettings');
const { injectAdMobPlistData } = require('./injectAdMobPlistData')

exports.preBuild = function preBuild(appConfiguration) {
injectFirebaseSettings(appConfiguration);
injectAdMobPlistData(appConfiguration)
};
62 changes: 62 additions & 0 deletions shoutem.advertising/app/build/injectAdMobPlistData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const _ = require('lodash');
const fs = require('fs-extra');
const plist = require('plist');
const { ext, DEFAULT_ADMOB_APPS } = require('./const');

function parsePlist(plistPath) {
let plistResult = {};

if (fs.existsSync(plistPath)) {
const plistContent = fs.readFileSync(plistPath, 'utf8');

try {
plistResult = plist.parse(plistContent);
} catch (e) {
console.error('Unable to parse plist', plistPath);
}
}

return plistResult;
}

const getExtension = (appConfiguration, extensionName) => {
const includedResources = _.get(appConfiguration, 'included');
const extension = _.find(includedResources, {
type: 'shoutem.core.extensions',
id: extensionName,
});

return extension;
};

const getExtensionSettings = (appConfiguration, extensionName) => {
const extension = getExtension(appConfiguration, extensionName);
return _.get(extension, 'attributes.settings');
};

/**
* Adding GADApplicationIdentifier and SKAdNetworkItems keys per AdMob instructions.
* https://developers.google.com/admob/ios/quick-start#update_your_infoplist
*/
function injectAdMobPlistData(appConfiguration) {
const plistPath = 'ios/Info.plist';
const currentPlistContents = parsePlist(plistPath);
const extSettings = getExtensionSettings(appConfiguration, ext());
const iOSAdAppId = _.get(extSettings, 'iOSAdAppId', DEFAULT_ADMOB_APPS.IOS);

const adMobPlistData = {
GADApplicationIdentifier: iOSAdAppId,
SKAdNetworkItems: [
{ SKAdNetworkIdentifier: 'cstr6suwn9.skadnetwork' }
]
};

const adInfoPlist = Object.assign(currentPlistContents, adMobPlistData);

fs.writeFileSync(plistPath, plist.build(adInfoPlist));
}


module.exports = {
injectAdMobPlistData,
};
49 changes: 49 additions & 0 deletions shoutem.advertising/app/build/injectFirebaseSettings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const _ = require('lodash');
const fs = require('fs-extra');
const path = require('path');
const { projectPath } = require('@shoutem/build-tools');
const { ext, DEFAULT_ADMOB_APPS } = require('./const');

const getExtension = (appConfiguration, extensionName) => {
const includedResources = _.get(appConfiguration, 'included');
const extension = _.find(includedResources, {
type: 'shoutem.core.extensions',
id: extensionName,
});

return extension;
};

const getExtensionSettings = (appConfiguration, extensionName) => {
const extension = getExtension(appConfiguration, extensionName);
return _.get(extension, 'attributes.settings');
};

function injectFirebaseSettings(appConfiguration) {
const extSettings = getExtensionSettings(appConfiguration, ext());
const AndroidAdAppId = _.get(extSettings, 'AndroidAdAppId', DEFAULT_ADMOB_APPS.ANDROID);
const iOSAdAppId = _.get(extSettings, 'iOSAdAppId', DEFAULT_ADMOB_APPS.IOS);
const filePath = path.resolve(projectPath, 'firebase.json');

try {
fs.ensureFileSync(filePath);
const existingConfig = fs.readJsonSync(filePath, { throws: false });
const config = {
'react-native': {
admob_android_app_id: AndroidAdAppId,
admob_ios_app_id: iOSAdAppId,
},
};
const actionTaken = _.isEmpty(existingConfig) ? 'Created' : 'Modified';
const newConfig = existingConfig ? _.merge(existingConfig, config) : config;
fs.writeJsonSync(filePath, newConfig);

console.log(`[${ext()}] - ${actionTaken} root/firebase.json`);
} catch (error) {
console.log(error);
}
}

module.exports = {
injectFirebaseSettings,
};
10 changes: 10 additions & 0 deletions shoutem.agora/app/build/const.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const CAMERA_PERMISSION_HANDLER =
" pod 'Permission-Camera', :path => '../node_modules/react-native-permissions/ios/Camera.podspec'";

const MIC_PERMISSION_HANDLER =
"pod 'Permission-Microphone', :path => '../node_modules/react-native-permissions/ios/Microphone.podspec'";

module.exports = {
CAMERA_PERMISSION_HANDLER,
MIC_PERMISSION_HANDLER,
};
5 changes: 5 additions & 0 deletions shoutem.agora/app/build/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const { injectPermissionHandlerIos } = require('./injectPermissions');

exports.preBuild = function preBuild() {
injectPermissionHandlerIos();
};
35 changes: 35 additions & 0 deletions shoutem.agora/app/build/injectPermissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const {
ANCHORS,
getPodfileTemplatePath,
inject,
projectPath,
} = require('@shoutem/build-tools');
const {
CAMERA_PERMISSION_HANDLER,
MIC_PERMISSION_HANDLER,
} = require('./const');

/**
* ios/Podfile.template injects required modifications for react-native-permissions package as described
* here: https://github.com/react-native-community/react-native-permissions#ios
*
* This must be run before pod install step
*/

function injectPermissionHandlerIos() {
const podfileTemplatePath = getPodfileTemplatePath({ cwd: projectPath });

inject(
podfileTemplatePath,
ANCHORS.IOS.PODFILE.EXTENSION_DEPENDENCIES,
CAMERA_PERMISSION_HANDLER,
);

inject(
podfileTemplatePath,
ANCHORS.IOS.PODFILE.EXTENSION_DEPENDENCIES,
MIC_PERMISSION_HANDLER,
);
}

module.exports = { injectPermissionHandlerIos };
69 changes: 69 additions & 0 deletions shoutem.audio/app/build/add-background-modes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
const _ = require('lodash');
const fs = require('fs-extra');
const plist = require('plist');

function parsePlist(plistPath) {
let plistResult = {};

if (!fs.existsSync(plistPath)) {
console.log('No path found on ' + plistPath);
return null;
}

const plistContent = fs.readFileSync(plistPath, 'utf8');

try {
plistResult = plist.parse(plistContent);
} catch (e) {
console.error('Unable to parse plist', plistPath);
}

return plistResult;
}

function hasTrackPlayingShortcut(configuration) {
const hasTrackPlayingShortcut = configuration.included.find(item => {
const isShortcut = item.type === 'shoutem.core.shortcuts';

if (!isShortcut) {
return false;
}

const canonicalName = _.get(item, 'attributes.canonicalName', '');

return (
canonicalName.includes('Radio') ||
canonicalName.includes('podcast-shortcut')
);
});

return hasTrackPlayingShortcut;
}

/**
* If radio or podcast shortcut is present, writes the required background
* mode into extension's Info.plist file
*/
function updateInfoPlist(appConfiguration) {
if (!hasTrackPlayingShortcut(appConfiguration)) {
return;
}

console.log('[shoutem.audio] - Adding audio background mode to extension Info.plist');

const plistPath = 'ios/Info.plist';
const currentPlistContents = parsePlist(plistPath);
const backgroundModePlistData = {
UIBackgroundModes: [
'audio',
],
};

const audioInfoPlist = Object.assign(currentPlistContents, backgroundModePlistData);

fs.writeFileSync(plistPath, plist.build(audioInfoPlist));
};

module.exports = {
updateInfoPlist,
};
7 changes: 7 additions & 0 deletions shoutem.audio/app/build/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const { injectTrackPlayer } = require('./injectTrackPlayer');
const { updateInfoPlist } = require('./add-background-modes');

exports.preBuild = function preBuild(appConfiguration) {
updateInfoPlist(appConfiguration);
injectTrackPlayer();
};
23 changes: 23 additions & 0 deletions shoutem.audio/app/build/injectTrackPlayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const fs = require('fs-extra');
const {
getGradlePropertiesPath,
projectPath,
} = require('@shoutem/build-tools');

function injectTrackPlayer() {
const searchText = '# org.gradle.jvmargs';
const replaceText = 'org.gradle.jvmargs';

const filePath = getGradlePropertiesPath({ cwd: projectPath });
const fileContents = fs.readFileSync(filePath, 'utf8');

const newFileContents = fileContents.replace(searchText, replaceText);

fs.writeFileSync(filePath, newFileContents, 'utf8');

console.log('[shoutem.audio] - Uncommenting JVM memory arguments in "android/gradle.properties" for `react-native-track-player`');
}

module.exports = {
injectTrackPlayer,
};
Loading

0 comments on commit 66ed776

Please sign in to comment.