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

Xcode持续弹出Swift包仓库密码输入框,如何解决?

解决Swift包依赖授权时Xcode弹出密码框卡住的问题

问题背景

我在Artifactory的Swift包仓库中有一个需账号密码授权的包。在GitLab CI或本地构建时,解析包依赖图会因Xcode弹出密码输入框而卡住。尝试过以下方法但均无效:

  • 使用fastlane的unlock_keychain解锁钥匙串
  • 通过security add-internet-password -a $1 -s <url> -r https -w $2 -T /Applications/Xcode.app -T /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild命令手动将密码添加到钥匙串并授权Xcode访问
  • 使用带--disable-keychain和--enable-netrc选项的swift package-registry login命令

需要找到无需在每台构建机上手动勾选“始终允许”的解决办法。

可行解决方案

1. 修复钥匙串凭证添加命令(核心解决权限问题)

你之前的security add-internet-password命令缺少关键参数,导致权限未正确授予。使用以下命令添加凭证,直接设置“始终允许”权限:

security add-internet-password \
  -a "$ARTIFACTORY_USERNAME" \
  -s "your-artifactory-domain.com" \
  -r "https" \
  -w "$ARTIFACTORY_PASSWORD" \
  -T "/Applications/Xcode.app" \
  -T "/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild" \
  -T "/usr/bin/swift" \
  -U
  • -U参数会自动将访问权限设置为“允许”,跳过手动勾选步骤
  • 必须添加/usr/bin/swift的授权,因为Swift包管理器本身也会直接访问仓库

2. 用.netrc文件自动提供凭证

通过创建.netrc文件让SwiftPM直接读取账号密码,无需依赖钥匙串:

  1. 在用户根目录生成.netrc文件:
echo "machine your-artifactory-domain.com login $ARTIFACTORY_USERNAME password $ARTIFACTORY_PASSWORD" > ~/.netrc
  1. 严格设置文件权限为600(SwiftPM会忽略权限过宽的.netrc):
chmod 600 ~/.netrc
  1. 确保SwiftPM启用netrc支持:
    • 构建时添加参数:swift build --enable-netrc
    • 或设置环境变量:export SWIFTCI_USE_NETRC=1

3. GitLab CI专用临时钥匙串方案

在CI流水线中创建独立的临时钥匙串,规避系统钥匙串的权限限制:

# 创建临时钥匙串并设置密码
security create-keychain -p "$CI_KEYCHAIN_PASSWORD" build.keychain
# 将临时钥匙串设为默认
security default-keychain -s build.keychain
# 解锁钥匙串
security unlock-keychain -p "$CI_KEYCHAIN_PASSWORD" build.keychain
# 禁用钥匙串自动锁定(避免构建超时)
security set-keychain-settings -t 3600 -l ~/Library/Keychains/build.keychain
# 添加凭证到临时钥匙串并授权所有相关工具
security add-internet-password \
  -a "$ARTIFACTORY_USERNAME" \
  -s "your-artifactory-domain.com" \
  -r "https" \
  -w "$ARTIFACTORY_PASSWORD" \
  -T "/Applications/Xcode.app" \
  -T "/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild" \
  -T "/usr/bin/swift" \
  -U \
  build.keychain

CI环境使用独立钥匙串,不会受系统钥匙串的权限弹窗影响。

4. 命令行触发Xcode依赖解析并指定钥匙串

直接通过xcodebuild命令触发依赖解析,同时指定使用已配置好的钥匙串:

xcodebuild -resolvePackageDependencies \
  -package-path ./YourPackageDirectory \
  -authenticationKeychain build.keychain

结合临时钥匙串使用,确保Xcode在解析依赖时自动读取凭证,不会弹出密码框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:13:09