Package.resolved文件已损坏或格式不正确。

85
我遇到了一个构建错误,提示我所有的 SPM 包都丢失了。我决定将每个包从项目中移除并重新添加,但是每次尝试添加包时都会出现以下错误:

Package.resolved 文件已损坏或格式不正确;请修复或删除文件以继续

我尝试删除 Package.resolved 文件并让其重新生成(但它没有),但我仍然收到相同的错误消息。有什么办法可以解决这个问题吗?

enter image description here

15个回答

209

我尝试了Maxwell上面提供的解决方案,但对我来说并没有解决问题。

这个错误在Xcode 12中出现,但升级到Xcode 13也没有修复它。

相反,我决定相信Xcode的话,并删除Package.resolved文件。但它在哪里?我这样做:

  1. 在Finder中,按Shift+Cmd+.以显示隐藏的文件和文件夹。

  2. Package.resolved文件位于.xcodeproj目录下的[appName].xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

  3. 右键单击.xcodeproj和project.xcworkspace以显示包内容。

  4. 将Package.resolved文件移动到垃圾箱,然后清空垃圾箱。

  5. 重新打开Xcode并再次打开项目。这给了我另一个错误:根路径下的软件包无法访问(无法读取'4.5.0':)

  6. 在Xcode中,选择File / Packages / Reset package caches。 Swift Package Manager开始处理此操作。

  7. 重新构建项目。错误已经消失,我的项目成功重建。


5
欢迎您在个人资料中添加网站链接,但这绝对不应该出现在个别答案中(除非该链接确实对回答的内容有所贡献,显然在这里并没有)。请参阅推广指南 - tripleee
2
谢谢!你的答案是唯一解决了我的问题的! - Brian Douglas Moakley
14
我会尽力做到最好。这是翻译的内容: 我在我的工作区找到了它: project.xcworkspace/xcshareddata/swiftpm/Package.resolved - Andres Canella
7
在工作区中也找到它了。我认为如果你正在使用CocoaPods,那么该文件将位于工作区而不是xcodeproj中。 - Joshua
3
我遇到的另一个问题是,如果 Xcode 被打开,它会立即重新创建文件,并且仍然存在问题。关闭 Xcode 然后删除文件可以解决这个问题。 - Andres Canella
显示剩余7条评论

22

再补充另一种有效的情况,我在CI上遇到了相同的错误,但是更详细一些:

Package.resolved文件已损坏或格式不正确;修复或删除该文件以继续:不支持的模式版本2。

这意味着CI上的Xcode版本不支持该模式格式。

将Xcode版本更新为与我们的开发环境匹配即可解决问题。


1
你是想更新模式格式还是更新Xcode? - Nat Serrano
4
我指的是升级XCode。只有最新版本才知道如何处理新的架构版本(很可能旧版本向后兼容)。 - GoRoS
1
@GoRoS 这是我在 CI 中运行的命令,在我遇到这个错误之前运行的 /Applications/Xcode_13.2.1.app/Contents/Developer/usr/bin/xcodebuild -resolvePackageDependencies -scheme "xxx (Production)" -project ./xxx.xcodeproj。 我不确定该怎么办。我甚至尝试从 gitignore 中删除 Package.resolved,但没有任何改变。 - Tarek
2
@Tarek 尝试将 Xcode 更新到 13.4.1 或更高版本,并使用该版本启动相同的 cmd。这应该支持第二个版本的模式。 - GoRoS
3
@GoRoS,谢谢您的帮助!这个方法可行。我发现使用 macos-12 可以让 13.4.1 版本工作,而不是用 macos-latest - Tarek
可以确认,从 macos-latest 切换到 macos-12 是解决方法。很遗憾,你会认为 latest 应该与更近期的 Xcode 版本捆绑在一起。 - Justin Hammond

10

在合并更新后,我遇到了同样的问题。对我有帮助的是删除Package.resolved文件。


1
如何? - ScottyBlades
请查看被接受的答案以获取所需步骤。 - Sangsom
我注意到了这个评论。然而,无论如何我都无法按照那些步骤显示隐藏文件。 - ScottyBlades

10

在项目中同时使用 CocoaPodsSwiftPackageManager 时,会有两个Package.resolved文件。一个位于YourProj.xcworkspace中,另一个位于YourProj.xcproj -> project.xcworkspace中。我不得不将两个文件都删除,然后它才能正常工作。


4
此问题可能由于从.xcworkspace而不是.xcodeproj文件打开的项目引起。我们从CocoaPods转换到SPM,旧的.xcworkspace搞乱了一切。

3
出现此问题的原因是Package.resolved 文件损坏,您需要删除禁用的包和 Package.resolved 文件。
在 Finder 中找不到 Package.resolved 文件,您应该在项目中选择它。具体步骤如下:
1. 打开 .xcodeproj 或 .xcworkspace 并右键单击以显示内容。 2. 右键单击项目.xcworkspace 的内容以显示其内容。 3. 打开 xcshareddata/swiftpm 目录,您应该能够找到 Package.resolved 文件。 4. 删除该文件,然后重新添加包。

这就是我所做的,它解决了问题。 - Michał Ziobro

3

我在forums.swift.org上找到了这个答案,对我很有用:

  1. 关闭Xcode
  2. 然后完全删除派生数据目录(清空垃圾桶以确保绝对安全)。
  3. 重新启动Xcode
  4. 重置Swift包缓存

5
没有帮助到____。 - Andrew_STOP_RU_WAR_IN_UA

3

接受的答案有效但是找到它真的很令人困惑。

如果看了接受的答案但找不到在哪里,看一下@Andres Canella在下面的评论:project.xcworkspace/xcshareddata/swiftpm/Package.resolved

1- 关闭Xcode

2- 打开你的项目文件夹,然后右键点击白色项目图标,并选择显示包内容

enter image description here

enter image description here

3- 打开xcshareddata文件夹,然后打开swiftpm文件夹,再打开configuration文件夹,您应该能看到Package.resolved文件,只需将其删除即可。

enter image description here


1

确保依赖图处于良好状态。Xcode在识别和报告版本冲突问题方面非常糟糕。


1

我赞同上述内容并希望进行补充(或者更简单一些),您不需要关闭Xcode,只需执行相同的操作,Package.resolved文件将自动添加到swiftpm文件夹中,然后您只需要更新pods即可。


2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接