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

Xcode如何选择SSH密钥认证SPM依赖的私有Git仓库?

解决多Bitbucket账号下Xcode/SPM的SSH密钥匹配问题

问题描述

将有权限访问的私有Bitbucket仓库作为SPM依赖时,Xcode出现解析错误:

拉取远程仓库<my_repository.git>时出错:发生未知错误。请求的仓库不存在或您无访问权限。若确认仓库存在且有权限,请确保已完成认证。(-20)

问题根源是存在两个Bitbucket账号,对应不同SSH密钥,SSH按顺序尝试密钥时未匹配到目标仓库的有效密钥。此前在SourceTree中通过新建SSH密钥解决了问题,但希望找到更灵活的密钥指定方式。

解决方案

1. 按仓库/域名配置SSH密钥(推荐,非全局)

修改~/.ssh/config文件,针对Bitbucket域名或特定仓库单独指定密钥,不会影响其他项目:

# 针对所有Bitbucket仓库,默认使用密钥A
Host bitbucket.org
  IdentityFile ~/.ssh/bitbucket_default_key
  IdentitiesOnly yes

# 针对特定私有仓库,使用密钥B
Host bitbucket.org/my-special-repo
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket_special_key
  IdentitiesOnly yes
  • IdentitiesOnly yes:强制SSH仅使用指定的密钥,避免自动尝试其他密钥引发权限问题。
  • 配置完成后,SPM拉取对应仓库时会自动匹配指定密钥,无需修改Xcode设置。

2. 为Xcode单独指定SSH密钥(临时方案)

如果需要仅让当前Xcode实例使用特定密钥,可通过终端启动Xcode时注入环境变量:

  1. 关闭Xcode
  2. 打开终端执行以下命令:
SSH_AUTH_SOCK=~/.ssh/agent.sock ssh-add ~/.ssh/your_target_key && open -a Xcode
  • 该命令先将目标密钥添加到SSH代理,再启动Xcode,当前Xcode实例会使用代理中的密钥。
  • 注意:此方式仅对本次启动的Xcode有效,关闭后需重新执行。

3. 按项目配置SPM依赖的SSH地址

在项目的Package.swift中,将依赖仓库的SSH地址替换为~/.ssh/config中配置的别名地址:
比如在~/.ssh/config中配置了Host bitbucket-special,则Package.swift中写:

dependencies: [
    .package(url: "git@bitbucket-special:username/my-special-repo.git", from: "1.0.0")
]

SPM会自动匹配对应密钥完成拉取。

补充说明

全局设置IdentityFile虽能解决问题,但会影响所有SSH连接,推荐使用按域名/仓库配置SSH config的方式,既灵活又不会干扰其他项目。目前Xcode没有图形界面直接选择SSH密钥的功能,上述方法是最可行的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:23