nativescript
Version:
Command-line interface for building NativeScript projects
93 lines • 5.34 kB
JavaScript
"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