You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Xcode会自动修改Package.resolved中的依赖版本?

问题:Xcode自动修改Package.resolved中的依赖版本

我有一个Xcode项目,依赖某私有包。该私有包的Package.swift文件中声明了如下依赖:

.package(url: "https://github.com/marmelroy/PhoneNumberKit.git", .upToNextMajor(from: "3.3.0")),

项目的Package.resolved文件中,PhoneNumberKit对应的内容为:

{
   "identity" : "phonenumberkit",
   "kind" : "remoteSourceControl",
   "location" : "https://github.com/marmelroy/PhoneNumberKit.git",
   "state" : {
     "revision" : "6edd6e38a30aec087cb97f7377edf876c29a427e",
     "version" : "3.5.9"
   }
}

但每当我打开Xcode时,它会自动执行「解析包依赖图」步骤,将Package.resolved中的PhoneNumberKit修改为:

{
   "identity" : "phonenumberkit",
   "kind" : "remoteSourceControl",
   "location" : "https://github.com/marmelroy/PhoneNumberKit.git",
   "state" : {
     "revision" : "56f612ea0178406b1ff57846401bd68a57d96a80",
     "version" : "3.5.4"
   }
}

我认为这不符合逻辑,Package.resolved的作用本应是确保项目所有开发者使用相同的依赖版本。请问Xcode为何会自动修改该依赖的版本?注:此处以PhoneNumberKit为例,其他包也存在此问题。


原因分析与解决办法

核心原因

  • 依赖约束冲突:私有包使用的.upToNextMajor(from: "3.3.0")允许使用3.x系列的任意版本,但项目中其他依赖可能对PhoneNumberKit有更严格的版本限制,Xcode解析时会选择满足所有约束的最低兼容版本(3.5.4),而非你指定的3.5.9。
  • Xcode自动解析策略:Xcode默认会在打开项目时校验依赖兼容性,若当前Package.resolved中的版本不满足某一依赖的约束条件,就会重新解析并替换为符合所有约束的版本。
  • 本地缓存/索引异常:Xcode本地的包缓存或索引可能留存旧数据,导致解析过程中优先选择旧版本。
  • 私有包未同步更新:私有包本身可能被修改过依赖约束,而你本地的私有包副本未同步最新内容,导致Xcode使用旧约束逻辑解析。

解决措施

  • 锁定固定版本:修改私有包Package.swift中PhoneNumberKit的依赖约束为固定版本,强制SPM使用指定版本:
    .package(url: "https://github.com/marmelroy/PhoneNumberKit.git", .exact("3.5.9")),
    
  • 排查依赖冲突:在终端执行swift package show dependencies命令,查看所有依赖的约束关系,定位导致版本降级的冲突来源,调整对应依赖的约束规则。
  • 关闭自动更新:在Xcode中执行File > Packages > Reset Package Caches,然后关闭File > Packages > Automatically Update Packages选项,阻止Xcode自动修改依赖版本。
  • 同步私有包:确保本地私有包是最新版本,拉取私有包的最新代码后重新解析依赖。
  • 维护Package.resolved版本控制:将Package.resolved加入版本控制,确保所有开发者使用同一文件;若Xcode自动修改,手动恢复该文件后重启项目。

内容的提问来源于stack exchange,提问作者nikano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:35:07