UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

85 lines 3.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SPMService = void 0; const yok_1 = require("../../common/yok"); const trapezedev_project_1 = require("@rigor789/trapezedev-project"); const path = require("path"); class SPMService { constructor($logger, $projectConfigService, $xcodebuildCommandService, $xcodebuildArgsService) { this.$logger = $logger; this.$projectConfigService = $projectConfigService; this.$xcodebuildCommandService = $xcodebuildCommandService; this.$xcodebuildArgsService = $xcodebuildArgsService; } getSPMPackages(projectData, platform) { const spmPackages = this.$projectConfigService.getValue(`${platform}.SPMPackages`, []); return spmPackages; } // note: this is not used anywhere at the moment. // public hasSPMPackages(projectData: IProjectData): boolean { // return this.getSPMPackages(projectData).length > 0; // } async applySPMPackages(platformData, projectData, pluginSpmPackages) { var _a; try { const spmPackages = this.getSPMPackages(projectData, platformData.platformNameLowerCase); if (pluginSpmPackages === null || pluginSpmPackages === void 0 ? void 0 : pluginSpmPackages.length) { // include swift packages from plugin configs spmPackages.push(...pluginSpmPackages); } if (!spmPackages.length) { this.$logger.trace("SPM: no SPM packages to apply."); return; } const project = new trapezedev_project_1.MobileProject(platformData.projectRoot, { ios: { path: ".", }, enableAndroid: false, }); await project.load(); // note: in trapeze both visionOS and iOS are handled by the ios project. if (!project.ios) { this.$logger.trace("SPM: no iOS project found via trapeze."); return; } // todo: handle removing packages? Or just warn and require a clean? for (const pkg of spmPackages) { if ("path" in pkg) { // resolve the path relative to the project root this.$logger.trace("SPM: resolving path for package: ", pkg.path); pkg.path = path.resolve(projectData.projectDir, pkg.path); } this.$logger.trace(`SPM: adding package ${pkg.name} to project.`, pkg); await project.ios.addSPMPackage(projectData.projectName, pkg); // Add to other Targets if specified (like widgets, etc.) if ((_a = pkg.targets) === null || _a === void 0 ? void 0 : _a.length) { for (const target of pkg.targets) { await project.ios.addSPMPackage(target, pkg); } } } await project.commit(); // finally resolve the dependencies await this.resolveSPMDependencies(platformData, projectData); } catch (err) { this.$logger.trace("SPM: error applying SPM packages: ", err); } } async resolveSPMDependencies(platformData, projectData) { await this.$xcodebuildCommandService.executeCommand(this.$xcodebuildArgsService .getXcodeProjectArgs(platformData, projectData) .concat([ "-destination", "generic/platform=iOS", "-resolvePackageDependencies", ]), { cwd: projectData.projectDir, message: "Resolving SPM dependencies...", }); } } exports.SPMService = SPMService; yok_1.injector.register("spmService", SPMService); //# sourceMappingURL=spm-service.js.map