Fastlane通过SSH执行失败(无法签名应用)
SSH远程执行Fastlane代码签名失败的解决方案
核心原因
SSH登录的Shell属于无GUI环境,缺少VNC登录时的钥匙串访问权限、完整环境变量,以及代码签名所需的交互授权。
具体解决步骤
1. 解锁登录钥匙串
SSH环境下默认钥匙串处于锁定状态,需提前解锁,在构建脚本开头添加以下命令:
security unlock-keychain -p "你的登录钥匙串密码" ~/Library/Keychains/login.keychain-db
注意:担心密码明文泄露的话,可通过环境变量传递,比如security unlock-keychain -p "$KEYCHAIN_PASSWORD",提前在SSH会话中导出该变量
2. 配置代码签名的钥匙串访问权限
授予codesign工具访问钥匙串的权限,执行:
security set-key-partition-list -S apple-tool:,apple: -s -k "你的登录钥匙串密码" ~/Library/Keychains/login.keychain-db
该命令允许Xcode、Fastlane等工具访问钥匙串内的签名证书。
3. 确保SSH会话继承完整环境变量
VNC登录的Shell包含完整的PATH及Xcode相关环境变量,SSH默认缺失。可在构建脚本开头导入用户zsh配置:
source ~/.zshrc
或直接导出Xcode命令行工具路径:
export PATH="/Applications/Xcode.app/Contents/Developer/usr/bin:$PATH"
4. 明确Fastlane签名配置
避免依赖本地GUI自动选择,在Fastfile中指定签名参数:
lane :build do gym( scheme: "Unity-iPhone", export_method: "app-store", signing_style: "manual", provisioning_profile_specifier: "你的描述文件名称", code_sign_identity: "iPhone Distribution: 你的开发者账号" ) end
5. 禁用代码签名交互提示
SSH环境无法弹出授权窗口,需关闭相关提示:
defaults write com.apple.security.authorization ignore-authorization-ui -bool YES
执行后重启SSH会话生效,构建完成后可改回NO恢复正常提示。
内容的提问来源于stack exchange,提问作者mcExchange
相关产品推荐
相关产品推荐

