如何从 Swift 包管理器清单文件加载文件和 运行 swift 代码?

How to load file and run swift code from Swift Package Manager manifest file?

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

// 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 基于文件构建不同的依赖项?

谢谢!

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

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