首页 > 解决方案 > 如何从 Swift 包管理器清单文件加载文件并运行 swift 代码?

问题描述

我有一个具有 SPM 依赖项的 iOS 项目,我正在尝试根据配置文件更新 SPM 清单文件(Package.swift)中的 Package 对象,以获得类似于以下内容的内容:

// Package.swift
// swift-tools-version:5.3
import PackageDescription
import Foundation

var modules : [Modules] = getConfigurationFrom("file.json")

// Where getConfigurationFrom function calls to:
// Bundle.main.path(forResource: "file", ofType: "json")

if modules.first.isEnabled {
    // Build Package object with moduleA dependencies
    Package(name: "Package", ... Dependencies for ModuleA ...)
} else {
    // Build Package object with moduleB dependencies
    Package(name: "Package", ... Dependencies for ModuleB ...)
}

但是我无法从主包中正确加载 json 文件,也许我在这里遗漏了什么?或者是否有另一种方法可以在不使用方库的情况下使用 SPM 基于文件构建不同的依赖项?

谢谢!

标签: iosswiftxcodeswift-package-manager

解决方案


这有点 hacky,但你可以使用 获取当前文件的路径#file,所以如果你对与 Package.swift 位于同一目录中的 file.json 感兴趣,你可以这样做:

let packageURL = URL(fileURLWithPath: #file).deletingLastPathComponent()
let fileURL = packageURL.appendingPathComponent("file.json")

推荐阅读