UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

124 lines 5.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExportOptionsPlistService = void 0; const path = require("path"); const mobileProvisionFinder = require("ios-mobileprovision-finder"); const yok_1 = require("../../common/yok"); const constants = require("../../constants"); class ExportOptionsPlistService { constructor($fs, $tempService, $projectData) { this.$fs = $fs; this.$tempService = $tempService; this.$projectData = $projectData; } getExtensionProvisions() { const provisioningJSONPath = path.join(this.$projectData.getAppResourcesDirectoryPath(), constants.iOSAppResourcesFolderName, constants.NATIVE_EXTENSION_FOLDER, constants.EXTENSION_PROVISIONING_FILENAME); if (!this.$fs.exists(provisioningJSONPath)) { return ""; } const provisioningJSON = this.$fs.readJson(provisioningJSONPath); return Object.entries(provisioningJSON) .map(([id, provision]) => { return `<key>${id}</key>\n <string>${provision}</string>`; }) .join("\n"); } async createDevelopmentExportOptionsPlist(archivePath, projectData, buildConfig) { const exportOptionsMethod = this.getExportOptionsMethod(projectData, archivePath); const provision = buildConfig.provision || buildConfig.mobileProvisionIdentifier; const iCloudContainerEnvironment = buildConfig.iCloudContainerEnvironment; let plistTemplate = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>method</key> <string>${exportOptionsMethod}</string>`; if (provision) { plistTemplate += ` <key>provisioningProfiles</key> <dict> <key>${projectData.projectIdentifiers.ios}</key> <string>${provision}</string> ${this.getExtensionProvisions()} </dict>`; } plistTemplate += ` <key>uploadBitcode</key> <false/> <key>compileBitcode</key> <false/>`; if (iCloudContainerEnvironment) { plistTemplate += ` <key>iCloudContainerEnvironment</key> <string>${iCloudContainerEnvironment}</string>`; } plistTemplate += ` </dict> </plist>`; // Save the options... const exportOptionsPlistFilePath = await this.$tempService.path({ prefix: "export-", suffix: ".plist", }); this.$fs.writeFile(exportOptionsPlistFilePath, plistTemplate); // The xcodebuild exportPath expects directory and writes the <project-name>.ipa at that directory. const exportFileDir = path.resolve(path.dirname(archivePath)); const exportFilePath = path.join(exportFileDir, projectData.projectName + ".ipa"); return { exportFileDir, exportFilePath, exportOptionsPlistFilePath }; } async createDistributionExportOptionsPlist(archivePath, projectData, buildConfig) { const provision = buildConfig.provision || buildConfig.mobileProvisionIdentifier; const teamId = buildConfig.teamId; let plistTemplate = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> `; if (teamId) { plistTemplate += ` <key>teamID</key> <string>${teamId}</string> `; } if (provision) { plistTemplate += ` <key>signingStyle</key> <string>manual</string> <key>provisioningProfiles</key> <dict> <key>${projectData.projectIdentifiers.ios}</key> <string>${provision}</string> ${this.getExtensionProvisions()} </dict>`; } plistTemplate += ` <key>method</key> <string>app-store-connect</string> <key>uploadBitcode</key> <false/> <key>compileBitcode</key> <false/> <key>uploadSymbols</key> <false/> </dict> </plist>`; // Save the options... const exportOptionsPlistFilePath = await this.$tempService.path({ prefix: "export-", suffix: ".plist", }); this.$fs.writeFile(exportOptionsPlistFilePath, plistTemplate); const exportFileDir = path.resolve(path.dirname(archivePath)); const exportFilePath = path.join(exportFileDir, projectData.projectName + ".ipa"); return { exportFileDir, exportFilePath, exportOptionsPlistFilePath }; } getExportOptionsMethod(projectData, archivePath) { const embeddedMobileProvisionPath = path.join(archivePath, "Products", "Applications", `${projectData.projectName}.app`, "embedded.mobileprovision"); const provision = mobileProvisionFinder.provision.readFromFile(embeddedMobileProvisionPath); return { Development: "development", AdHoc: "ad-hoc", Distribution: "app-store", Enterprise: "enterprise", }[provision.Type]; } } exports.ExportOptionsPlistService = ExportOptionsPlistService; yok_1.injector.register("exportOptionsPlistService", ExportOptionsPlistService); //# sourceMappingURL=export-options-plist-service.js.map