xcodebuild 错误 - SecKey API 返回:-25308

xcodebuild error - SecKey API returned: -25308

我在尝试构建我的 iOS 应用程序时收到以下错误。此错误仅在构建发布配置时发生。此外,我将 CocoaPods 用于我的第三方依赖项,这些构建是通过 SSH 在 Jenkins 上 运行。

SecKey API returned: -25308, (null)/Users/iosbuilder/Library/Developer/Xcode/DerivedData/*/Build/Intermediates/ArchiveIntermediates/Production/InstallationBuildProductsLocation/Applications/*.app/Frameworks/AFNetworking.framework: 
unknown error -1=ffffffffffffffff
Command /bin/sh failed with exit code 1

我尝试解锁构建服务器上的钥匙串以确保没有 UI 钥匙串权限块,但问题仍然存在...

知道为什么会发生这种情况以及我该如何解决这个问题吗?

这是钥匙串访问问题。解决方案是

使用 link 中的代码,您可以尝试在 shell 中在项目的构建配置中执行它

刚刚重新启动了我的机器。它奏效了。

您可以使用security 命令查找错误代码。 在这种情况下,它表示 "User interaction not allowed"。 如果您尝试通过 SSH、通过 Jenkins 的脚本对您的应用程序进行签名,这很典型。

security error -25308
Error: 0xFFFF9D24 -25308 User interaction is not allowed.

您需要执行安全命令以通过非交互式 shell:

启用您的应用程序的代码签名
security set-key-partition-list -S apple: -k <Password> -D <Identity> -t private <your.keychain>

这是一个 "complete" Jenkins / SSH 友好的脚本来签署你的应用程序:

MY_KEYCHAIN="temp.keychain"
MY_KEYCHAIN_PASSWORD="secret"
CERT="certificate.p12"
CERT_PASSWORD="certificate secret"

security create-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Create temp keychain
security list-keychains -d user -s "$MY_KEYCHAIN" $(security list-keychains -d user | sed s/\"//g) # Append temp keychain to the user domain
security set-keychain-settings "$MY_KEYCHAIN" # Remove relock timeout
security unlock-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Unlock keychain
security import $CERT -k "$MY_KEYCHAIN" -P "$CERT_PASSWORD" -T "/usr/bin/codesign" # Add certificate to keychain
CERT_IDENTITY=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | sed -e 's/[^"]*"//' -e 's/".*//') # Programmatically derive the identity
CERT_UUID=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | awk '{print }') # Handy to have UUID (just in case)
security set-key-partition-list -S apple-tool:,apple: -s -k $MY_KEYCHAIN_PASSWORD -D "$CERT_IDENTITY" -t private $MY_KEYCHAIN # Enable codesigning from a non user interactive shell
### INSERT BUILD COMMANDS HERE ###
security delete-keychain "$MY_KEYCHAIN" # Delete temporary keychain

感谢白博纯花了 3 周时间与 Apple 支持一起找到 -25308 问题的解决方案并将其发布到 https://sinofool.net/blog/archives/322