如何以编程方式加载Swift软件包配置?

g

我试图用来SwiftPM分析本地Package.swift文件。我找不到任何有关此操作的文档。理想情况下,我会打电话给类似

import PackageDescription

let package = try Package(at: "pathToFile/Package.swift")
print(package.dependencies) ...

我尝试使用

 let package = try PackageBuilder.loadPackage(
            packagePath: .init(absolutePath),
            swiftCompiler: .init("/usr/bin/swift"),
            swiftCompilerFlags: [],
            diagnostics: .init())

但这失败,error: no such module \'PackageDescription\'\nimport PackageDescription\n ^", diagnosticFile: nil)因为我的Package.swift文件import PackageDescription按预期开始

也许有一些事情在这里

尤里

您应该使用swiftCompilerparam为编译器提供完整路径,以避免出现问题,例如:

import PackageModel
import PackageLoading
import PackageGraph
import Workspace

let swiftCompiler: AbsolutePath = {
    let string: String
#if os(macOS)
    string = try! Process.checkNonZeroExit(args: "xcrun", "--sdk", "macosx", "-f", "swiftc").spm_chomp()
#else
    string = try! Process.checkNonZeroExit(args: "which", "swiftc").spm_chomp()
#endif
    return AbsolutePath(string)
}()

let package = AbsolutePath(".../swift-package-manager")
let diagnostics = DiagnosticsEngine()

do {
    let manifest = try ManifestLoader.loadManifest(packagePath: package, swiftCompiler: swiftCompiler, packageKind: .local)
    let loadedPackage = try PackageBuilder.loadPackage(packagePath: package, swiftCompiler: swiftCompiler, diagnostics: diagnostics)
    let graph = try Workspace.loadGraph(packagePath: package, swiftCompiler: swiftCompiler, diagnostics: diagnostics)
    
    // Manifest
    let products = manifest.products.map({ $0.name }).joined(separator: ", ")
    print("Products:", products)
    let targets = manifest.targets.map({ $0.name }).joined(separator: ", ")
    print("Targets:", targets)
    
    // Package
    let executables = loadedPackage.targets.filter({ $0.type == .executable }).map({ $0.name })
    print("Executable targets:", executables)
    
    // PackageGraph
    let numberOfFiles = graph.reachableTargets.reduce(0, { $0 + $1.sources.paths.count })
    print("Total number of source files (including dependencies):", numberOfFiles)
}
catch {
    print(error)
}

输出:

Products: SwiftPM, SwiftPM-auto, PackageDescription
Targets: PackageDescription, LLBuildManifest, SourceControl, SPMLLBuild, PackageModel, PackageLoading, PackageGraph, Build, Xcodeproj, Workspace, Commands, swift-package, swift-build, swift-test, swift-run, swiftpm-xctest-helper, SPMTestSupport, BuildTests, CommandsTests, WorkspaceTests, FunctionalTests, FunctionalPerformanceTests, PackageDescription4Tests, PackageLoadingTests, PackageLoadingPerformanceTests, PackageModelTests, PackageGraphTests, PackageGraphPerformanceTests, SourceControlTests, XcodeprojTests
Executable targets: ["swift-run", "swift-build", "swift-package", "swiftpm-xctest-helper", "swift-test"]
Total number of source files (including dependencies): 344

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以编程方式获取基本软件包列表

来自分类Dev

如何以编程方式创建Enterprise Architect软件包,类,属性

来自分类Dev

以编程方式安装提供其版本的NPM软件包

来自分类Dev

如何在Visual Studio中以编程方式对VSIX软件包添加的菜单项进行排序?

来自分类Dev

NuGet-以编程方式安装软件包(多个来源)

来自分类Dev

如何以编程方式配置@ComponentScan?

来自分类Dev

如何从NuGet提要中以编程方式获取NuGet软件包的版本?

来自分类Dev

如何使用软件包列表配置npm软件包?像凉亭

来自分类Dev

如何下载软件包,编程R

来自分类Dev

如何以编程方式从资源加载替代的strings.xml

来自分类Dev

如何以编程方式重新加载p:dataGrid?

来自分类Dev

如何以编程方式找到Swift的版本?

来自分类Dev

Rscript和软件包:如何以及何时确定要加载哪些软件包?

来自分类Dev

如何以编程方式设置WPF工具包DateTimePicker

来自分类Dev

Swift如何以编程方式移动UIButton?

来自分类Dev

Swift:如何以编程方式将图片加载到窗口中?

来自分类Dev

Composer,以编程方式读取软件包的版本号

来自分类Dev

如何以仅保留每个软件包最新版本的方式清理var / cache / apt

来自分类Dev

如何以编程方式获取已安装的作曲家软件包?

来自分类Dev

如何以编程方式自动配置?

来自分类Dev

通用Lisp软件包-可能无法加载软件包时如何处理?

来自分类Dev

如何以仅保留每个软件包最新版本的方式清理var / cache / apt

来自分类Dev

如何以编程方式从apt获取软件包列表?

来自分类Dev

如何以正确的方式安装RPM软件包?

来自分类Dev

如何以编程方式配置SSLInfo?

来自分类Dev

如何以非交互方式安装apt软件包?

来自分类Dev

Composer,以编程方式读取软件包的版本号

来自分类Dev

Eclipse PDE:如何以编程方式在包资源管理器中加载新项目?

来自分类Dev

如何以编程方式设置 ImageResizer 配置?

Related 相关文章

  1. 1

    以编程方式获取基本软件包列表

  2. 2

    如何以编程方式创建Enterprise Architect软件包,类,属性

  3. 3

    以编程方式安装提供其版本的NPM软件包

  4. 4

    如何在Visual Studio中以编程方式对VSIX软件包添加的菜单项进行排序?

  5. 5

    NuGet-以编程方式安装软件包(多个来源)

  6. 6

    如何以编程方式配置@ComponentScan?

  7. 7

    如何从NuGet提要中以编程方式获取NuGet软件包的版本?

  8. 8

    如何使用软件包列表配置npm软件包?像凉亭

  9. 9

    如何下载软件包,编程R

  10. 10

    如何以编程方式从资源加载替代的strings.xml

  11. 11

    如何以编程方式重新加载p:dataGrid?

  12. 12

    如何以编程方式找到Swift的版本?

  13. 13

    Rscript和软件包:如何以及何时确定要加载哪些软件包?

  14. 14

    如何以编程方式设置WPF工具包DateTimePicker

  15. 15

    Swift如何以编程方式移动UIButton?

  16. 16

    Swift:如何以编程方式将图片加载到窗口中?

  17. 17

    Composer,以编程方式读取软件包的版本号

  18. 18

    如何以仅保留每个软件包最新版本的方式清理var / cache / apt

  19. 19

    如何以编程方式获取已安装的作曲家软件包?

  20. 20

    如何以编程方式自动配置?

  21. 21

    通用Lisp软件包-可能无法加载软件包时如何处理?

  22. 22

    如何以仅保留每个软件包最新版本的方式清理var / cache / apt

  23. 23

    如何以编程方式从apt获取软件包列表?

  24. 24

    如何以正确的方式安装RPM软件包?

  25. 25

    如何以编程方式配置SSLInfo?

  26. 26

    如何以非交互方式安装apt软件包?

  27. 27

    Composer,以编程方式读取软件包的版本号

  28. 28

    Eclipse PDE:如何以编程方式在包资源管理器中加载新项目?

  29. 29

    如何以编程方式设置 ImageResizer 配置?

热门标签

归档