UNPKG

@bacons/apple-targets

Version:
104 lines (103 loc) 4.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getEASCredentialsForXcodeProject = exports.withAutoEasExtensionCredentials = exports.withEASTargets = void 0; const target_1 = require("./target"); const with_bacons_xcode_1 = require("./with-bacons-xcode"); const debug = require("debug")("expo:target:eas"); function getAppExtensions(config) { return config.extra.eas.build.experimental.ios .appExtensions; } function safeSet(obj, key, value) { const segments = key.split("."); const last = segments.pop(); let current = obj; segments.forEach((segment) => { if (!current[segment]) { current[segment] = {}; } current = current[segment]; }); if (!current[last]) { current[last] = value; } return current; } // TODO: This should all go into EAS instead. const withEASTargets = (config, { bundleIdentifier, targetName, entitlements }) => { // Extra EAS targets safeSet(config, "extra.eas.build.experimental.ios.appExtensions", []); const extensions = getAppExtensions(config); const existingIndex = extensions.findIndex((ext) => ext.bundleIdentifier === bundleIdentifier); const settings = { bundleIdentifier, targetName, entitlements, }; if (existingIndex > -1) { debug("Found existing EAS target with bundle identifier: %s", bundleIdentifier); debug("Using new settings: %o", settings); extensions[existingIndex] = settings; } else { debug("Adding new iOS target for code signing with EAS: %o", settings); extensions.push(settings); // "appExtensions": [ // { // "targetName": "widgets", // "bundleIdentifier": "com.evanbacon.pillarvalley.widgets", // "entitlements": { // "com.apple.security.application-groups": [ // "group.bacon.data" // ] // } // } // ] } return config; }; exports.withEASTargets = withEASTargets; const withAutoEasExtensionCredentials = (config) => { return (0, with_bacons_xcode_1.withXcodeProjectBeta)(config, async (config) => { safeSet(config, "extra.eas.build.experimental.ios.appExtensions", []); const creds = getEASCredentialsForXcodeProject(config.modResults); const extensions = getAppExtensions(config); // Warn about duplicates extensions.forEach((ext) => { const existing = creds.find((cred) => cred.bundleIdentifier === ext.bundleIdentifier); if (existing && (existing.targetName !== ext.targetName || existing.parentBundleIdentifier !== ext.parentBundleIdentifier)) { throw new Error(`EAS credentials already has a target "${ext.targetName}" with bundle identifier: ${ext.bundleIdentifier}.`); } }); config.extra.eas.build.experimental.ios.appExtensions = [ ...extensions, ...creds, ]; return config; }); }; exports.withAutoEasExtensionCredentials = withAutoEasExtensionCredentials; function getEASCredentialsForXcodeProject(project) { const parentBundleIdentifier = (0, target_1.getMainAppTarget)(project).getDefaultConfiguration().props.buildSettings .PRODUCT_BUNDLE_IDENTIFIER; const targets = (0, target_1.getAuxiliaryTargets)(project); return targets.map((target) => { var _a; const config = target.getDefaultConfiguration(); const entitlements = config.getEntitlements(); const targetName = target.props.productName; if (!targetName) { throw new Error(`Target ${target.getDisplayName()} (${target.uuid}) does not have a productName.`); } return { targetName, bundleIdentifier: (_a = config.props.buildSettings) === null || _a === void 0 ? void 0 : _a.PRODUCT_BUNDLE_IDENTIFIER, parentBundleIdentifier, entitlements, }; }); } exports.getEASCredentialsForXcodeProject = getEASCredentialsForXcodeProject;