如何从 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")
我和 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")