"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; function _isEmpty() { const data = _interopRequireDefault(require("lodash/isEmpty")); _isEmpty = function () { return data; }; return data; } function _pickBy() { const data = _interopRequireDefault(require("lodash/pickBy")); _pickBy = function () { return data; }; return data; } function _get() { const data = _interopRequireDefault(require("lodash/get")); _get = function () { return data; }; return data; } function _xdl() { const data = require("@expo/xdl"); _xdl = function () { return data; }; return data; } function _BaseBuilder() { const data = _interopRequireDefault(require("../BaseBuilder")); _BaseBuilder = function () { return data; }; return data; } function _constants() { const data = require("../constants"); _constants = function () { return data; }; return data; } function constants() { const data = _interopRequireWildcard(require("./credentials/constants")); constants = function () { return data; }; return data; } function utils() { const data = _interopRequireWildcard(require("../utils")); utils = function () { return data; }; return data; } function credentials() { const data = _interopRequireWildcard(require("./credentials")); credentials = function () { return data; }; return data; } function apple() { const data = _interopRequireWildcard(require("./appleApi")); apple = function () { return data; }; return data; } function _image() { const data = require("./utils/image"); _image = function () { return data; }; return data; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class IOSBuilder extends _BaseBuilder().default { async run() { await this.validateProject(); await this.checkForBuildInProgress(); if (this.options.type === 'archive') { await this.prepareCredentials(); } const publishedExpIds = await this.ensureProjectIsPublished(); if (!this.options.publicUrl) { await this.checkStatusBeforeBuild(); } await this.build(publishedExpIds); } async validateProject() { const bundleIdentifier = (0, _get().default)(this.manifest, 'ios.bundleIdentifier'); const sdkVersion = this.manifest.sdkVersion; await this.validateIcon(); if (!bundleIdentifier) { throw new (_xdl().XDLError)('INVALID_OPTIONS', `Your project must have a bundleIdentifier set in app.json. See https://docs.expo.io/versions/latest/distribution/building-standalone-apps/#2-configure-appjson`); } await utils().checkIfSdkIsSupported(sdkVersion, _constants().PLATFORMS.IOS); } async getAppleCtx({ bundleIdentifier, username, experienceName }) { if (!this.appleCtx) { await apple().setup(); const authData = await apple().authenticate(this.options); this.appleCtx = { ...authData, bundleIdentifier, username, experienceName }; } return this.appleCtx; } async prepareCredentials() { const username = this.manifest.owner || this.user.username; const projectMetadata = { username, experienceName: `@${username}/${this.manifest.slug}`, sdkVersion: this.manifest.sdkVersion, bundleIdentifier: (0, _get().default)(this.manifest, 'ios.bundleIdentifier') }; await this.clearAndRevokeCredentialsIfRequested(projectMetadata); const existingCredentials = await credentials().fetch(projectMetadata); const missingCredentials = credentials().determineMissingCredentials(existingCredentials); if (missingCredentials) { await this.produceMissingCredentials(projectMetadata, missingCredentials); } } async clearAndRevokeCredentialsIfRequested(projectMetadata) { const { clearCredentials, clearDistCert, clearPushKey, clearPushCert, clearProvisioningProfile } = this.options; const shouldClearAnything = clearCredentials || clearDistCert || clearPushKey || clearPushCert || clearProvisioningProfile; if (shouldClearAnything) { const credsToClear = await this.clearCredentialsIfRequested(projectMetadata); if (credsToClear && this.options.revokeCredentials) { await credentials().revoke((await this.getAppleCtx(projectMetadata)), Object.keys(credsToClear)); } } } async clearCredentialsIfRequested(projectMetadata) { const credsToClear = this.determineCredentialsToClear(); if (credsToClear) { await credentials().clear(projectMetadata, credsToClear); } return credsToClear; } determineCredentialsToClear() { const { clearCredentials, clearDistCert, clearPushKey, clearPushCert, clearProvisioningProfile } = this.options; const credsToClearAll = { distributionCert: Boolean(clearCredentials || clearDistCert), pushKey: Boolean(clearCredentials || clearPushKey), // TODO: backward compatibility, remove when all users migrate to push keys pushCert: Boolean(clearCredentials || clearPushCert), provisioningProfile: Boolean(clearCredentials || clearProvisioningProfile) }; const credsToClear = (0, _pickBy().default)(credsToClearAll); return (0, _isEmpty().default)(credsToClear) ? null : credsToClear; } async produceMissingCredentials(projectMetadata, missingCredentials) { const appleCtx = await this.getAppleCtx(projectMetadata); const metadata = {}; if (missingCredentials.includes(constants().PROVISIONING_PROFILE) && !missingCredentials.includes(constants().DISTRIBUTION_CERT)) { // we need to get distribution certificate serial number metadata.distCertSerialNumber = await credentials().getDistributionCertSerialNumber(projectMetadata); } const { userCredentialsIds, credentials: userProvidedCredentials, toGenerate, metadata: metadataFromPrompt } = await credentials().prompt(appleCtx, this.options, missingCredentials); Object.assign(metadata, metadataFromPrompt); const generatedCredentials = await credentials().generate(appleCtx, toGenerate, metadata); const newCredentials = { ...userProvidedCredentials, ...generatedCredentials, teamId: appleCtx.team.id }; await credentials().update(projectMetadata, newCredentials, userCredentialsIds); } async ensureProjectIsPublished() { if (this.options.publicUrl) { return undefined; } else { return await this.ensureReleaseExists(_constants().PLATFORMS.IOS); } } platform() { return _constants().PLATFORMS.IOS; } // validates whether the icon doesn't have transparency async validateIcon() { try { const icon = (0, _get().default)(this.manifest, 'ios.icon', this.manifest.icon); await (0, _image().ensurePNGIsNotTransparent)(icon); } catch (err) { if (err instanceof _xdl().XDLError) { throw err; } else {// something weird happened, let's assume the icon is correct } } } } var _default = IOSBuilder; exports.default = _default; //# sourceMappingURL=../../../__sourcemaps__/commands/build/ios/IOSBuilder.js.map