nativescript
Version:
Command-line interface for building NativeScript projects
85 lines • 3.85 kB
JavaScript
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
;