截至 2026 年 8 月 30 日,Xcode 26.6 要求运行在 macOS Tahoe 26.2 或更高版本上;如果你的课程代码能打开,却一直停在 “Resolving Package Graph”,先不要删除缓存。先用浏览器或 Git 验证仓库能否访问,再查看 Xcode 的软件包解析信息,最后核对版本规则与 Package.resolved。Xcode 26.6 的系统要求可参考 Apple 官方发布说明

症状:课程项目能打开,但 Swift Package Manager 下载失败、解析卡住或随后编译报错。 最快解法:先判断失败发生在下载前、版本解析后,还是已经进入编译阶段;不同位置对应不同处理方式。

这篇文章适合第一次给 SwiftUI 课程项目添加第三方软件包、看不懂解析报错的零基础学生;也适合打开老师或 GitHub 示例项目后,卡在下载依赖步骤的 Windows 用户与远程 Mac 用户。 如果你使用学校电脑、受限网络或小组私有仓库,不确定问题出在账号还是开发环境,也可以按下面的分流路线检查。

**经验提醒:** “重新下载”只能处理部分本地缓存问题,不能修复错误的仓库地址、没有权限的私有仓库,或项目本身无法满足的版本条件。

先把卡住的位置分清楚

Swift Package Manager 可以理解为“替你的项目领取指定版本的教材”。仓库地址是书店地址,版本规则是你允许领取的版本范围,Package.resolved 则像借书记录,记录项目最后实际拿到的具体版本。Apple 说明,软件包管理器会通过依赖解析确定项目最终使用的精确版本,而 Package.resolved 会保存解析结果。(developer.apple.com)

<
你看到的现象更可能的问题第一项验证
输入网址后立刻报错,或一直没有软件包信息仓库地址、网络、证书或域名限制浏览器打开仓库主页,再用 Git 读取仓库
一直停在 “Resolving Package Graph”版本规则冲突、仓库访问不完整或解析过程失败查看完整日志,检查 Package.swiftPackage.resolved
软件包显示出来,但没有可选产品依赖仓库存在,项目目标与产品不匹配检查要添加到哪个 Target
依赖解析完成,但 SwiftUI 项目编译失败平台、工具链、产品名称或代码 API 不兼容单独查看第一个编译错误,不要继续重置缓存
Apple 的文档说明,Xcode 支持添加、移除和管理 Swift 软件包依赖;软件包可以通过远程 Git URL 加入,也可以作为本地软件包使用。([developer.apple.com](https://developer.apple.com/documentation/Xcode/swift-packages?changes=_7&utm_source=openai))

为什么 Xcode 一直显示 “resolving package graph”? 通常不能只凭这句话判断是下载问题。你需要先看它是否已经识别仓库、是否列出了版本与产品;如果连仓库信息都拿不到,优先查访问条件;如果仓库已识别但版本无法组合,再查依赖声明。

第一步:第一次添加公开软件包时,先验证地址

如果你是第一次给 SwiftUI 课程项目添加软件包,最容易犯的错误是把网页地址、仓库地址和某个文件地址混在一起。课程资料可能给出项目主页、README 页面或某个目录链接,但 Xcode 需要的是软件包对应的 Git 仓库 URL。

先在浏览器打开课程提供的地址,确认页面确实属于目标仓库;再检查地址末尾有没有多余的空格、引号、标点或复制进去的中文说明。之后,在终端中进入一个临时目录,使用只读方式验证仓库是否可读取:

git ls-remote https://github.com/OWNER/REPOSITORY.git

如果命令能返回分支或提交信息,说明当前设备至少可以读取这个远程仓库;如果浏览器能打开、Git 却失败,则要继续检查代理、证书、Git 配置或学校网络策略。GitHub 官方文档列出了 HTTPS 与 SSH 两类远程地址,并说明 HTTPS 在防火墙或代理环境下可能更容易使用。(docs.github.com)

<
验证结果说明下一步
浏览器和 git ls-remote 都成功仓库地址与基础访问大概率正常回到 Xcode 检查版本规则与产品
浏览器成功,Git 失败可能是 Git 凭证、代理、证书或 SSH 配置问题先固定使用正确的 HTTPS 地址测试
浏览器和 Git 都失败地址错误、仓库下线、网络限制或权限不足向课程方确认仓库状态,不要反复重装 Xcode
公开仓库能访问,课程私有仓库失败很可能是账号或组织权限问题单独验证你的账户是否被授予读取权限
接着在 Xcode 中通过添加软件包依赖的入口输入仓库 URL,确认软件包名称、版本范围和产品选择。Apple 的示例流程要求输入软件包 URL,随后选择项目需要使用的产品;软件包管理器会下载对应版本并将其加入项目。

停止条件: 如果公开仓库在浏览器和 Git 中都无法访问,先保存完整错误文本、仓库地址和操作步骤,再联系课程提供者或网络管理员。此时继续删缓存、重启 Xcode 或重新安装,不能证明问题已经接近解决。

第二步:版本解析失败时,不要把所有版本都改成最新

版本解析不是“哪个版本新就用哪个”。项目可能要求一个版本范围,依赖包之间也可能各自要求不同版本;如果这些条件无法同时满足,解析就会失败。Swift Package Manager 支持版本范围、分支和指定提交等依赖方式,但 Swift 官方文档说明,指定提交会固定依赖且不再自动获得更新;精确版本也可能在多个依赖共同使用时增加冲突。(docs.swift.org)

<
版本写法新手应如何理解适合的使用场景
从某个版本开始,允许兼容更新“至少使用这一版,后续按规则更新”课程项目与一般应用
精确版本“只能用这一版教材”课程方明确指定版本时
分支“跟着某条正在变化的教学线路”同时开发多个软件包时
提交记录“锁定某一次具体内容”临时复现或特殊修复,不适合随意使用
打开项目的依赖设置或 Package.swift,记录软件包名称、最低版本、上限、分支或提交记录。然后检查 Package.resolved 中是否保存了另一组已经解析过的版本。不要先删除它,而是先复制一份,例如:
Package.resolved.backup-2026-08-30

如果你打开的是老师提供的示例项目,还要比较课程说明、项目声明和当前仓库标签是否对应。同学使用的提交记录如果不同,即使仓库地址相同,最终依赖也可能不同。

Package.resolved 冲突可以直接删除吗? 不建议把删除它当成万能修复。它记录的是解析结果,而不是项目全部依赖规则;删除后,Xcode 可能重新选择一组不同版本,结果可能从“无法下载”变成“能够解析但课程代码编译失败”。Apple 建议在需要稳定构建时将该文件提交到 Git 仓库,避免不同环境使用意外的依赖版本。(developer.apple.com)

只有在你已经完成备份、确认课程方允许重新解析,并且准备比较解析前后的差异时,才考虑重新生成。重新解析后至少记录以下内容:

  • 哪些软件包版本发生变化;
  • 是否从版本标签变成分支或提交;
  • SwiftUI 代码出现的第一个新编译错误;
  • 课程项目是否仍然使用原来的产品名称。

第三步:学校电脑或受限网络,按三层证据排查

学校电脑的问题通常不在 Xcode 本身,而在“你能做什么”受到限制。常见限制包括:不能安装或更新开发工具、网络代理要求证书、某些仓库域名被拦截、系统账户没有写入开发目录的权限。这些条件会让你误以为 Swift Package Manager 下载失败。

你可以按下面的顺序做一次合规验证:

  1. 浏览器验证: 打开软件包仓库主页,确认网页加载完整,而不是只显示登录页或错误页。
  2. Git 验证: 使用课程给出的正确仓库地址执行 git ls-remote,记录终端返回的错误。
  3. Xcode 日志验证: 打开 Report navigator,选择对应操作并展开日志,保留第一条网络、认证或解析错误。Apple 建议通过 Report navigator 查看失败操作的详细日志。(developer.apple.com)
不要关闭系统安全校验,不要执行来源不明的网络脚本,也不要为了绕过学校设备管理而修改代理或证书设置。你没有权限修改的策略,应由学校管理员处理。

学校网络无法添加 Swift 软件包时,最稳妥的解决方式是什么? 先把错误证据交给课程方或网络管理员;如果公开仓库在其他合规网络可访问,而学校电脑始终失败,就把项目记录、提交号和 Package.resolved 一起保留,转移到网络条件明确、拥有完整开发权限的 Mac 环境验证。不要反复重装 Xcode,因为重装不会解除域名限制或账户策略。

第四步:私有仓库要把“地址、账号、钥匙”分开

公开依赖通常不需要额外身份认证;私有依赖则不同。你需要确认自己是否被加入正确的仓库、组织或团队,并确认课程方给的是 HTTPS 地址还是 SSH 地址。

HTTPS 凭证、SSH 密钥和 Package.resolved 解决的是三个不同问题:

  • HTTPS 凭证: 证明你可以通过 HTTPS 读取远程仓库;
  • SSH 密钥: 证明当前 Mac 使用的密钥属于有权限的账号;
  • Package.resolved 记录项目最终使用的依赖版本,不负责授予仓库访问权。
使用私有仓库时,账号必须真正拥有访问权限;SSH 地址还要求当前设备配置了与账户对应的密钥。

如果你需要检查项目当前使用的远程地址,可以先查看:

git remote -v

需要更换地址时,使用课程方确认过的 URL,再用 git remote set-url 修改。不要仅凭浏览器已经登录,就判断 Xcode 或 Git 一定使用了同一个身份。

安全边界很明确:不要向同学索要私人密钥,不要把个人访问令牌粘贴进课程群,也不要把含凭证的 URL 提交到 Git。最小验证方法是先用一个没有课程源代码的小测试仓库确认读取权限,再回到正式项目。

私有依赖显示无权限,但我能在浏览器看到仓库,怎么办? 浏览器登录状态不等于 Xcode 使用了同一个身份。先确认 Git 使用的是哪个 URL 和哪个凭证,再检查组织是否要求额外授权;如果你没有管理权限,就让仓库所有者确认你的读取权限,而不是复制别人的 SSH 私钥。

停止条件: 如果公开仓库读取成功、私有仓库始终返回认证失败,且课程方确认你的账号没有读取权限,那么问题已经从“下载故障”变成“授权缺失”,应停止修改本机环境。

第五步:用最小项目判断是原项目还是 Mac 环境

当课程项目依赖很多、目录结构复杂时,不要直接在原项目里反复试错。新建一个空白的 Swift 项目,只添加同一个公开软件包,使用与课程项目相同的版本规则。

然后做三次验证:

  1. 第一次添加依赖,观察仓库是否能识别、版本是否能解析;
  2. 关闭并重新打开项目,确认依赖是否仍然存在;
  3. 运行一次最小构建,确认软件包产品可以被目标使用。
如果空白项目成功,而课程项目失败,优先检查课程项目的 Package.swift、项目声明、Target 产品选择和 Package.resolved。如果空白项目也失败,才继续检查当前 Mac 的网络、Git 配置、Xcode 权限或系统版本。 <
最小项目结果结论倾向处理方向
空白项目成功,课程项目失败原项目声明或锁定版本有问题备份并比较项目依赖记录
空白项目也卡住当前设备或网络环境有问题检查 Git、代理、证书和权限
解析成功,构建失败产品、平台或代码兼容性问题查看第一个编译错误
本机失败,干净 Mac 成功本机环境污染或策略限制迁移学习环境,不再盲目重装
注意,解析成功不等于项目已经修好。Xcode 的构建报告仍然要检查;应在 Report navigator 中展开失败操作并查看 Logs,而不是只看最后一行错误。

最后验收:决定继续修复还是换环境

完成上面的步骤后,用同一个课程项目、同一个 Git 提交和同一个 Package.resolved 做对照。你不需要追求某个固定下载速度,而要确认结果是否可重复:

  • 软件包仓库可以读取;
  • 依赖版本能够按项目规则解析;
  • 关闭并重新打开 Xcode 后,依赖仍然可用;
  • SwiftUI 项目可以完成目标构建;
  • 私有仓库凭证没有写入代码或提交记录。

可勾选排错清单

  • [ ] 已保存完整错误文本,而不是只截图最后一行。
  • [ ] 已记录软件包仓库 URL、操作步骤和 Git 提交号。
  • [ ] 浏览器可以访问目标仓库,或已确认仓库本身需要登录。
  • [ ] 已用 git ls-remote 验证当前 Mac 的基础读取能力。
  • [ ] 已检查 Xcode 中的软件包版本规则与产品选择。
  • [ ] 已备份 Package.resolved,没有把删除文件当作第一步。
  • [ ] 已确认课程项目与示例仓库使用的是同一提交或同一版本范围。
  • [ ] 已分别检查公开依赖和私有依赖的权限。
  • [ ] 已在最小空白项目中测试同一个软件包。
  • [ ] 已查看 Report navigator 中的实际日志。
  • [ ] 已完成一次关闭、重开和重新构建验收。
  • [ ] 已明确下一步是修复项目、请求课程方更新依赖,还是更换学习环境。
如果只有原设备失败,而同一项目在干净 Mac 上可以正常解析,网络、权限、缓存或本机 Git 配置就是更合理的怀疑对象。反过来,如果换到干净 Mac 后仍失败,就应回到仓库状态、版本声明或私有仓库权限排查,而不是继续更换设备。

对于 Windows 用户,远程 Mac 可以解决“没有 macOS、无法使用 Xcode、学校电脑权限受限”这类环境问题,但它不会自动修复错误的仓库地址、无效版本规则或缺失的私有仓库权限。你可以先阅读 没有 Mac 学 SwiftUI 的入门路线,再按同一个课程项目做一次短期验证;如果需要了解可用的 Mac 方案,也可以查看 Mac 远程学习环境

你现在该选哪条路

如果仓库打不开,先修地址或访问条件;如果仓库能读但版本无法组合,检查版本规则与 Package.resolved;如果只有学校电脑失败,优先保留项目记录并迁移到合规、干净的 Mac 环境。

继续使用学校电脑的缺点是网络策略和安装权限不由你控制,问题复现也可能因管理员配置变化而反复出现;本地购买 Mac 的缺点是一次性成本高,而且为了一个课程项目可能长期闲置。若你只是需要完成 Swift、SwiftUI 或 iOS 学习中的短期验证,租赁 MACGPU 的远程 Mac 可以让你在明确的 macOS 环境中测试同一项目,不必先承担购买实体 Mac 的成本。

最后更新于 2026 年 8 月 30 日;Xcode 26.6 的系统要求、Swift 软件包行为、Package.resolved 说明与日志查看方式已根据 Apple 的 Xcode 26.6 发布说明、Swift 软件包文档、依赖版本规则说明和软件包构建工作流文档核实。