UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

155 lines • 7.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.XcodebuildArgsService = void 0; const path = require("path"); const constants = require("../../constants"); const constants_1 = require("../../common/constants"); const yok_1 = require("../../common/yok"); const _ = require("lodash"); const ios_project_service_1 = require("../ios-project-service"); class XcodebuildArgsService { constructor($devicePlatformsConstants, $devicesService, $fs, $iOSWatchAppService, $logger, $xcconfigService) { this.$devicePlatformsConstants = $devicePlatformsConstants; this.$devicesService = $devicesService; this.$fs = $fs; this.$iOSWatchAppService = $iOSWatchAppService; this.$logger = $logger; this.$xcconfigService = $xcconfigService; } async getBuildForSimulatorArgs(platformData, projectData, buildConfig) { let args = await this.getArchitecturesArgs(buildConfig); if (this.$iOSWatchAppService.hasWatchApp(platformData, projectData)) { args = args.concat(["CODE_SIGNING_ALLOWED=NO"]); } else { args = args.concat(["CODE_SIGN_IDENTITY="]); } let destination = "generic/platform=iOS Simulator"; let isvisionOS = this.$devicePlatformsConstants.isvisionOS(buildConfig.platform); if (isvisionOS) { destination = "platform=visionOS Simulator"; if (buildConfig._device) { destination += `,id=${buildConfig._device.deviceInfo.identifier}`; } } args = args .concat([ "-destination", destination, "build", "-configuration", buildConfig.release ? constants_1.Configurations.Release : constants_1.Configurations.Debug, ]) .concat(this.getBuildCommonArgs(platformData, projectData, isvisionOS ? ios_project_service_1.VisionSimulatorPlatformSdkName : ios_project_service_1.SimulatorPlatformSdkName)) .concat(this.getBuildLoggingArgs()) .concat(this.getXcodeProjectArgs(platformData, projectData)); return args; } async getBuildForDeviceArgs(platformData, projectData, buildConfig) { const architectures = await this.getArchitecturesArgs(buildConfig); const archivePath = path.join(platformData.getBuildOutputPath(buildConfig), projectData.projectName + ".xcarchive"); let destination = "generic/platform=iOS"; let isvisionOS = this.$devicePlatformsConstants.isvisionOS(buildConfig.platform); if (isvisionOS) { destination = "platform=visionOS"; if (buildConfig._device) { destination += `,id=${buildConfig._device.deviceInfo.identifier}`; } } const args = [ "-destination", destination, "archive", "-archivePath", archivePath, "-configuration", buildConfig.release ? constants_1.Configurations.Release : constants_1.Configurations.Debug, "-allowProvisioningUpdates", ] .concat(this.getXcodeProjectArgs(platformData, projectData)) .concat(architectures) .concat(this.getBuildCommonArgs(platformData, projectData, ios_project_service_1.DevicePlatformSdkName)) .concat(this.getBuildLoggingArgs()); return args; } async getArchitecturesArgs(buildConfig) { const args = []; if (this.$devicePlatformsConstants.isvisionOS(buildConfig.platform)) { args.push("ONLY_ACTIVE_ARCH=YES"); return args; } const devicesArchitectures = buildConfig.buildForDevice ? await this.getArchitecturesFromConnectedDevices(buildConfig) : []; if (!buildConfig.buildForDevice || devicesArchitectures.length > 1) { args.push("ONLY_ACTIVE_ARCH=NO"); } return args; } getXcodeProjectArgs(platformData, projectData) { const xcworkspacePath = path.join(platformData.projectRoot, `${projectData.projectName}.xcworkspace`); // Introduced in Xcode 14+ // ref: https://forums.swift.org/t/telling-xcode-14-beta-4-to-trust-build-tool-plugins-programatically/59305/5 const skipPackageValidation = "-skipPackagePluginValidation"; const extraArgs = [ "-scheme", projectData.projectName, skipPackageValidation, ]; const BUILD_SETTINGS_FILE_PATH = path.join(projectData.appResourcesDirectoryPath, platformData.normalizedPlatformName, constants.BUILD_XCCONFIG_FILE_NAME); // Only include explicit properties from build.xcconfig // Note: we could include entire file via -xcconfig flag // however doing so introduces unwanted side effects // like cocoapods issues related to ASSETCATALOG_COMPILER_APPICON_NAME // references: https://medium.com/@iostechset/why-cocoapods-eats-app-icons-79fe729808d4 // https://github.com/CocoaPods/CocoaPods/issues/7003 const deployTargetProperty = "IPHONEOS_DEPLOYMENT_TARGET"; const deployTargetVersion = this.$xcconfigService.readPropertyValue(BUILD_SETTINGS_FILE_PATH, deployTargetProperty); if (deployTargetVersion) { extraArgs.push(`${deployTargetProperty}=${deployTargetVersion}`); } const swiftUIBootProperty = "NS_SWIFTUI_BOOT"; const swiftUIBootValue = this.$xcconfigService.readPropertyValue(BUILD_SETTINGS_FILE_PATH, swiftUIBootProperty); if (swiftUIBootValue) { extraArgs.push(`${swiftUIBootProperty}=${swiftUIBootValue}`); } if (this.$fs.exists(xcworkspacePath)) { return ["-workspace", xcworkspacePath, ...extraArgs]; } const xcodeprojPath = path.join(platformData.projectRoot, `${projectData.projectName}.xcodeproj`); return ["-project", xcodeprojPath, ...extraArgs]; } getBuildLoggingArgs() { return this.$logger.getLevel() === "INFO" ? ["-quiet"] : []; } getBuildCommonArgs(platformData, projectData, platformSdkName) { let args = []; if (!this.$iOSWatchAppService.hasWatchApp(platformData, projectData)) { args = args.concat(["-sdk", platformSdkName]); } args = args.concat([ "BUILD_DIR=" + path.join(platformData.projectRoot, constants.BUILD_DIR), "SHARED_PRECOMPS_DIR=" + path.join(platformData.projectRoot, constants.BUILD_DIR, "sharedpch"), ]); return args; } async getArchitecturesFromConnectedDevices(buildConfig) { const platform = this.$devicePlatformsConstants.iOS.toLowerCase(); await this.$devicesService.initialize({ platform, deviceId: buildConfig.device, skipEmulatorStart: true, }); const instances = this.$devicesService.getDevicesForPlatform(platform); const architectures = _(instances) .map((d) => d.deviceInfo.activeArchitecture) .filter((d) => !!d) .uniq() .value(); return architectures; } } exports.XcodebuildArgsService = XcodebuildArgsService; yok_1.injector.register("xcodebuildArgsService", XcodebuildArgsService); //# sourceMappingURL=xcodebuild-args-service.js.map