Swift 包管理器 - 解决包版本终端命令

Posted

技术标签:

【中文标题】Swift 包管理器 - 解决包版本终端命令【英文标题】:Swift Package Manager - Resolve Package Versions terminal command 【发布时间】:2019-11-14 07:56:28 【问题描述】:

我想用 SPM 替换 cocoapods。我决定一次去一个图书馆。我从 cocoapods 中删除了 swinject 库并通过File->Swift Packages->Add Package Dependency添加它

这很成功,项目按预期构建和运行。

然后我请团队中的其他人检查分支,看看他们是否可以毫无问题地构建项目。然后我们遇到了错误“缺少包装产品'Swinject'”。我们通过在 Xcode 中执行 File->Swift Packages->Resolve Package Versions 解决了这个错误。

我也需要在构建服务器上运行它。我尝试在终端应用程序中输入swift package --help 以查看可用的命令。 resolve 命令看起来很有希望,所以我尝试了但无济于事。 (错误:找不到根清单)

那么,我的问题是,是否有与File->Swift Packages->Resolve Package Versions 相同的终端命令?

注意:当我通过 SPM 添加第 3 方库时,它为我创建了一个文件:Proj.xcworkspace/xcshareddata/swiftpm/Package.resolved。它还对Proj.xcodeproj/project.pbxproj 文件进行了各种更改。没有创建 package.swift 文件。

更新: 我得到的最接近答案的是我应该尝试xcodebuild -resolvePackageDependencies,不幸的是该命令与File->Swift Packages->Resolve Package Versions 的作用不同。

【问题讨论】:

如果有人路过但他们的 CI 仍然存在问题,您还可以检查您是否忽略了位于 .swiftpm/xcode/ 文件夹中的方案 【参考方案1】:

我在项目中遇到了 SPM 问题。看来你需要通过-clonedSourcePackagesDirPath [directory]

xcodebuild -resolvePackageDependencies -workspace ck550.xcworkspace -scheme ck550-cli -clonedSourcePackagesDirPath .

xcodebuild -workspace ck550.xcworkspace -scheme ck550-cli -clonedSourcePackagesDirPath .

第一个命令将所有 Swift 包解析并下载到 ./checkouts 中,并且还创建了其他一些 ./[dirs]

第二个命令启动应用程序的构建,并且那些 SPM 包也被构建。

这是构建服务器的输出: https://travis-ci.org/vookimedlo/ck550-macos/builds/626438212

Travis-CI 配置: https://github.com/vookimedlo/ck550-macos/blob/master/.travis.yml

【讨论】:

谢谢!这适用于 Azure Pipeline。我的项目只包含来自 Github 的 SPM 和开源 (Vapor) 包!【参考方案2】:

据我所知,有 2 个 Package.resolved 文件。一个在工作区,一个在项目上。由于某种原因,工作区有旧版本的包并正在运行

xcodebuild -resolvePackageDependencies -workspace myworkspace.xcworkspace -scheme my scheme

不起作用。但是,解决项目(因为项目的 Package.resolved 具有正确的包版本信息)确实有效

xcodebuild -resolvePackageDependencies -project myproject.xcodeproj -scheme my scheme

【讨论】:

很棒的帮助 - 我完全被 Xcode 13.2.1 无法解析软件包所困扰(不要让我开始了解 Apple 质量......)

以上是关于Swift 包管理器 - 解决包版本终端命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux 包管理器

解决“程序包管理器控制台”输入命令找不到Nuget包问题

Swift 包管理器教程

conda常用命令

如何使用 Swift 包管理器更新 iOS 模拟器部署目标?

如何使用 Swift 包管理器 binaryTarget?