xcodebuild 错误 - SecKey API 返回:-25308

Posted

技术标签:

【中文标题】xcodebuild 错误 - SecKey API 返回:-25308【英文标题】:xcodebuild error - SecKey API returned: -25308 【发布时间】:2017-01-03 20:07:47 【问题描述】:

我在尝试构建我的 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 块,但问题仍然存在...

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

【问题讨论】:

您是否尝试清理项目的构建文件夹? 是的,我已经多次清除所有内容。 通过此链接:forums.developer.apple.com/thread/64101 可能与钥匙串访问问题有关。 【参考方案1】:

这是一个钥匙串访问问题。解决办法是Here

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

【讨论】:

【参考方案2】:

您可以使用安全命令来查找错误代码。 在这种情况下,它显示“不允许用户交互”。 如果您尝试通过 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>

这是一个“完整”的 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 $2') # 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

感谢 Bochun Bai 在 Apple 支持下花了 3 周时间寻找 -25308 问题的解决方案并将其发布到 https://sinofool.net/blog/archives/322

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于xcodebuild 错误 - SecKey API 返回:-25308的主要内容,如果未能解决你的问题,请参考以下文章

IOS:无法从 CryptoKit SecureEnclave 私钥创建 SecKey 表示(OSStatus 错误 -50 - 从数据创建 EC 私钥失败))

xcodebuild 仅打印错误

将私有 base64 编码密钥转换为 SecKey

xcodebuild - '代码签名错误:无法找到配置文件 X'

Jenkins 中的 XcodeBuild 框架出现错误

xcodebuild 在不应该出现签名错误时给出错误