Xcode 11.4编译错误“缺少软件包产品<软件包名称>”

时间:2020-03-31 14:06:52

标签: ios swift xcode dependencies

当我在我的Xcode项目中集成一个local package时,一切都很好,但是当我切换分支并要运行该应用程序时,Xcode给出了编译错误Missing package product <package name>。当我退出Xcode并重新打开它时,一切都很好。知道这可能是什么吗? Xcode错误?

我们还通过Swift Package Manager集成了外部软件包,该软件包运行良好。那里没有问题。

该问题在post by Jesse Squires中也得到了很好的描述。

11 个答案:

答案 0 :(得分:32)

解决方案 1: 文件 > Swift 包 > 重置包缓存

enter image description here

解决方案 2: 文件 > Swift 包 > 更新到最新的包版本

enter image description here

答案 1 :(得分:28)

对我来说,我需要File> Swift Packages> Reset Package Caches

答案 2 :(得分:15)

在Xcode中,依次转到“文件”>“ Swift软件包”>“更新到最新的软件包版本”

为我工作

答案 3 :(得分:3)

在Xcode中,转到Product > Clean Build Folder

这对我有用。该问题最初是在我尝试解决删除“派生数据”文件夹后出现的另一个问题时开始的。

重新启动Xcode无效,但清理build文件夹无效。我不知道这里的其他答案是否对我有用,因为我没有尝试让他们认为清理build文件夹有效。

答案 4 :(得分:2)

在 Xcode 12.5 beta 上没有一个答案对我有用。我不得不手动删除所有 spm 包并重新添加它们。

答案 5 :(得分:1)

我不确定根本原因,但是我很定期地得到这个原因。不是最优雅的解决方案,但是“重置程序包缓存”或“更新到最新程序包版本”对我来说都不起作用。对我来说,我必须退出Xcode,并删除DerivedData。

rm -rf ~/Library/Developer/Xcode/DerivedData/*

然后重建。

答案 6 :(得分:0)

在Xcode 12.0.1(12A7300)中,此错误已修复。至少我不懂了?

答案 7 :(得分:0)

在两个不同项目的两个不同 Xcode 实例中打开相同的本地 Swift 包时,我收到此错误。通过退出 Xcode 并一次只打开一个项目,让它再次工作。

答案 8 :(得分:0)

SPM 重置包缓存与更新到最新包版​​本

fetch the latest possible version(based on restrictions)

更新到最新的软件包版本

reset cache(derived folder) -> Update to Latest Package Versions 

重置包缓存

<path_to_derived_data>/<randomizer>/SourcePackages/checkouts/<project_name>
//e.g
/Users/alex/Library/Developer/Xcode/DerivedData/SPM-dpsmlyjrashqjefkfheppizcrgic/SourcePackages/checkouts/SPMExperiments

文件夹

this.classList.toggle("active");

[Local SPM]

答案 9 :(得分:0)

目前我的解决方法是运行 Product > Clean Build Folder (cmd-k),然后重新启动 Xcode。这是 Xcode 12.4 和 12.5 中的问题,12.5 的每个用户包缓存没有解决该问题。

File > Swift Packages > Reset Package Caches 似乎也有效,但对我来说速度较慢。

上下文:

我的一个供应商通过 SPM 分发他们的预编译二进制库。每当我在 git 开发分支之间切换时,我得到:

“二进制目标 'xyz' 提取失败:操作无法完成。(TSCBasic.StringError 错误 1。)”

对于完全不相关的包,它也会导致这些“缺少包产品”错误,这大概是因为如果一个包失败,整个 SPM 过程就会失败(“解析包图失败”),即使这些包是完全独立的。

答案 10 :(得分:0)

Xcode 源代码控制应该被启用来运行它。 Preference -> Source Control 并启用源代码控制。