UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

93 lines 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PublishIOS = void 0; const path = require("path"); const command_params_1 = require("../common/command-params"); const build_data_1 = require("../data/build-data"); const yok_1 = require("../common/yok"); class PublishIOS { constructor($applePortalSessionService, $injector, $itmsTransporterService, $logger, $projectData, $options, $prompter, $devicePlatformsConstants, $hostInfo, $errors, $buildController, $platformValidationService) { this.$applePortalSessionService = $applePortalSessionService; this.$injector = $injector; this.$itmsTransporterService = $itmsTransporterService; this.$logger = $logger; this.$projectData = $projectData; this.$options = $options; this.$prompter = $prompter; this.$devicePlatformsConstants = $devicePlatformsConstants; this.$hostInfo = $hostInfo; this.$errors = $errors; this.$buildController = $buildController; this.$platformValidationService = $platformValidationService; this.allowedParameters = [ new command_params_1.StringCommandParameter(this.$injector), new command_params_1.StringCommandParameter(this.$injector), new command_params_1.StringCommandParameter(this.$injector), new command_params_1.StringCommandParameter(this.$injector), ]; this.$projectData.initializeProjectData(); } async execute(args) { var _a; await this.$itmsTransporterService.validate(this.$options.appleApplicationSpecificPassword); const username = args[0] || (await this.$prompter.getString("Apple ID", { allowEmpty: false })); const password = args[1] || (await this.$prompter.getPassword("Apple ID password")); const user = await this.$applePortalSessionService.createUserSession({ username, password }, { applicationSpecificPassword: this.$options.appleApplicationSpecificPassword, sessionBase64: this.$options.appleSessionBase64, requireInteractiveConsole: true, requireApplicationSpecificPassword: true, }); if (!user.areCredentialsValid) { this.$errors.fail(`Invalid username and password combination. Used '${username}' as the username.`); } const mobileProvisionIdentifier = (_a = this.$options.provision) !== null && _a !== void 0 ? _a : args[2]; let ipaFilePath = this.$options.ipa ? path.resolve(this.$options.ipa) : null; if (!mobileProvisionIdentifier && !ipaFilePath) { this.$logger.warn("No mobile provision identifier set. A default mobile provision will be used. You can set one in app/App_Resources/iOS/build.xcconfig"); } this.$options.release = true; if (!ipaFilePath) { const platform = this.$devicePlatformsConstants.iOS.toLowerCase(); // No .ipa path provided, build .ipa on out own. if (mobileProvisionIdentifier) { // This is not very correct as if we build multiple targets we will try to sign all of them using the signing identity here. this.$logger.info("Building .ipa with the selected mobile provision and/or certificate. " + mobileProvisionIdentifier); this.$options.provision = mobileProvisionIdentifier; const buildData = new build_data_1.IOSBuildData(this.$projectData.projectDir, platform, { ...this.$options.argv, buildForAppStore: true, watch: false }); ipaFilePath = await this.$buildController.prepareAndBuild(buildData); } else { this.$logger.info("No .ipa, mobile provision or certificate set. Perfect! Now we'll build .xcarchive and let Xcode pick the distribution certificate and provisioning profile for you when exporting .ipa for AppStore submission."); const buildData = new build_data_1.IOSBuildData(this.$projectData.projectDir, platform, { ...this.$options.argv, buildForAppStore: true, watch: false }); ipaFilePath = await this.$buildController.prepareAndBuild(buildData); this.$logger.info(`Export at: ${ipaFilePath}`); } } await this.$itmsTransporterService.upload({ credentials: { username, password }, user, applicationSpecificPassword: this.$options.appleApplicationSpecificPassword, ipaFilePath, shouldExtractIpa: !!this.$options.ipa, verboseLogging: this.$logger.getLevel() === "TRACE", teamId: this.$options.teamId, }); } async canExecute(args) { if (!this.$hostInfo.isDarwin) { this.$errors.fail("iOS publishing is only available on macOS."); } if (!this.$platformValidationService.isPlatformSupportedForOS(this.$devicePlatformsConstants.iOS, this.$projectData)) { this.$errors.fail(`Applications for platform ${this.$devicePlatformsConstants.iOS} can not be built on this OS`); } return true; } } exports.PublishIOS = PublishIOS; yok_1.injector.registerCommand(["publish|ios", "appstore|upload"], PublishIOS); //# sourceMappingURL=appstore-upload.js.map