react-native-integrate
Version:
Automate integration of additional code into React Native projects
122 lines (121 loc) • 4.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyAddCapability = applyAddCapability;
const path_1 = __importDefault(require("path"));
const picocolors_1 = __importDefault(require("picocolors"));
const constants_1 = require("../../constants");
const prompter_1 = require("../../prompter");
const variables_1 = require("../../variables");
const xcodeTask_addCapability_ad_1 = require("./xcodeTask.addCapability.ad");
const xcodeTask_addCapability_bm_1 = require("./xcodeTask.addCapability.bm");
const xcodeTask_addCapability_common_1 = require("./xcodeTask.addCapability.common");
const xcodeTask_addCapability_gc_1 = require("./xcodeTask.addCapability.gc");
const xcodeTask_addCapability_groups_1 = require("./xcodeTask.addCapability.groups");
const xcodeTask_addCapability_ks_1 = require("./xcodeTask.addCapability.ks");
const xcodeTask_addCapability_maps_1 = require("./xcodeTask.addCapability.maps");
const xcodeTask_helpers_1 = require("./xcodeTask.helpers");
function applyAddCapability(content, action) {
const { addCapability } = action;
let { target } = action;
target = (0, variables_1.getText)(target);
const nativeTarget = content.getTarget(constants_1.Constants.XCODE_APPLICATION_TYPE);
let group;
let destination = 'ios';
switch (target) {
case 'main':
group = content.findPBXGroupKey({
name: nativeTarget.target.name,
});
destination += `/${nativeTarget.target.name}`;
break;
default:
group = content.findPBXGroupKeyByAny(target);
destination += `/${target}`;
break;
}
const groupObj = content.getPBXGroupByKey(group);
const groupName = groupObj.name || path_1.default.basename(groupObj.path);
const filename = groupName + '.entitlements';
destination += `/${filename}`;
const isAdded = groupObj.children.some(x => (0, xcodeTask_helpers_1.unquote)(x.comment) == filename);
if (!isAdded) {
const releasePatch = (0, xcodeTask_helpers_1.patchXcodeProject)({
push: (array, item) => array.unshift(item),
});
try {
content.addFile(`${filename}`, group, {
target: nativeTarget.uuid,
lastKnownFileType: 'text.plist.entitlements',
});
}
finally {
releasePatch();
}
content.updateBuildProperty('CODE_SIGN_ENTITLEMENTS', `${groupName}/${filename}`, null, groupName);
content.updateBuildProperty('CODE_SIGN_ENTITLEMENTS', `${groupName}/${filename}`, null, '"' + groupName + '"');
}
switch (addCapability) {
case 'push':
case 'wireless-configuration':
case 'app-attest':
case 'data-protection':
case 'homekit':
case 'healthkit':
case 'inter-app-audio':
case 'increased-memory':
(0, xcodeTask_addCapability_common_1.addCommonCapability)({
destination,
filename,
targetName: groupName,
capability: addCapability,
});
break;
case 'groups':
(0, xcodeTask_addCapability_groups_1.addGroupsCapability)({
destination,
filename,
targetName: groupName,
groups: action.groups,
});
break;
case 'domains':
(0, xcodeTask_addCapability_ad_1.addDomainsCapability)({
destination,
filename,
targetName: groupName,
domains: action.domains,
});
break;
case 'background-mode':
(0, xcodeTask_addCapability_bm_1.addBMCapability)({
targetName: groupName,
modes: action.modes,
});
break;
case 'game-controllers':
(0, xcodeTask_addCapability_gc_1.addGCCapability)({
targetName: groupName,
controllers: action.controllers,
});
break;
case 'maps':
(0, xcodeTask_addCapability_maps_1.addMapsCapability)({
targetName: groupName,
routing: action.routing,
});
break;
case 'keychain-sharing':
(0, xcodeTask_addCapability_ks_1.addKSCapability)({
destination,
filename,
targetName: groupName,
groups: action.groups,
});
break;
}
(0, prompter_1.logMessage)(`added ${picocolors_1.default.yellow(addCapability)} capability to the ${picocolors_1.default.yellow(groupName)} target`);
return content;
}