nativescript
Version:
Command-line interface for building NativeScript projects
124 lines • 5.2 kB
JavaScript
"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 = `
<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 = `
<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