Xcode 命令 /usr/bin/codesign 失败,退出代码为 1:errSecInternalComponent

Posted

技术标签:

【中文标题】Xcode 命令 /usr/bin/codesign 失败,退出代码为 1:errSecInternalComponent【英文标题】:Xcode Command /usr/bin/codesign failed with exit code 1 : errSecInternalComponent 【发布时间】:2014-07-24 06:56:07 【问题描述】:

我正在尝试向我的 Xcode 添加新的配置文件,以测试设备上的应用程序。以下是我遵循的步骤:

    已删除所有证书和配置文件

    创建/添加 ios 开发证书

    在线添加我的 IOS 设备

    创建 IOS 配置文件

    添加 IOS 配置文件

    清理应用

    构建然后运行应用程序

    在构建设置中设置 Codesigning 和 Provisioning Profile

    大量谷歌搜索 > 没有成功

这是我得到的错误:

CSSM_SignData returned: 800108E6
/Users/alexpelletier/Library/Developer/Xcode/DerivedData/MyExpense-efnqzvoqwngzcmazaotyalepiice/Build/Products/Debug-iphoneos/MyExpense.app:     errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1

【问题讨论】:

错误来自配置文件设置和证书和捆绑包 ID 不匹配。确保您的 PP、捆绑 ID 和证书在 iTunes 连接和应用程序中正确设置并正确分配。 我在对我构建的框架进行代码签名期间遇到了从 Xcode 11.2.1 到 11.3 的问题。不涉及配置文件。 Mohit Manhas 的回答澄清了这一点。 如果您使用 SSH 并且不允许 codesign 访问 Keychain 中的私钥,则会发生这种情况。要检查这一点,请在钥匙串中找到钥匙,右键单击并选择“获取信息”,切换到“访问控制”并查看“代码设计”应用程序是否在“始终允许访问”列表中。请参阅此评论github.com/electron-userland/electron-builder/issues/… 我所做的是从 GUI 运行脚本一次并单击“始终允许”进行密钥访问,然后它开始工作。 【参考方案1】:

打开Keychain Access,然后在文件菜单中选择Lock All Keychains

然后回到 Xcode 并清理和重建。它将再次提示您输入密码以解锁钥匙串。

在此之后,假设你没有其他编译问题,它会成功!

【讨论】:

令人难以置信的是这个愚蠢的锁定和解锁有帮助!谢谢 这应该是公认的答案。比重启更理智! 也为我工作。为 android 构建一个 apk 30 秒,为 iOS 构建一个应用程序.. 2 小时。 说真的WTF?!谢谢! 在 MacOS Big Sur 11.6 上找不到 lock all keychains 选项【参考方案2】:

当登录钥匙串被锁定时会发生这种情况。要解锁登录钥匙串,请运行:

security unlock-keychain login.keychain

如果您的钥匙串受密码保护,请使用-p 选项指定密码:

security unlock-keychain -p PASSWORD login.keychain

如果您使用的是持续集成系统,您可能希望通过大多数 CI 系统在其设置中提供的环境变量/令牌注入密码。

有问题的错误代码是described in Apple's docs作为内部错误,因此完全有可能在其他情况下也发生这种情况。

【讨论】:

不幸的是,这个解决方案似乎完全是循环的:运行上述命令需要您输入密码,这在非交互式会话中显然是不行的(例如通过 CI 代理执行此操作时,例如詹金斯)。 我们在 Jenkins 上遇到了类似的问题,除了上面命令中提到的内容之外,我们还必须将密码作为参数传递给命令,所以我们执行了“security unlock-keychain -p $ KeychainPassword ",您可以轻松地将 KeychainPaasword 安全地存储在 Jenkins 上。 我非常感谢你的这篇文章。我花了几天时间试图弄清楚为什么 codesign 失败了,这是拯救我的神奇命令!!! 似乎解锁必须在运行 codesign 的同一个 bash 会话中完成,否则它将失败。 选项:security unlock-keychain login.keychain 工作得很好。如果你没有提供你的登录密码,控制台会在这个过程中询问:password to unlock login.keychain:【参考方案3】:

这似乎是代码签名机制中的一个错误,重新启动你的 mac 应该可以解决问题

【讨论】:

不同的情况,但类似的错误消息 - 重启工作。 将近四年后,它仍然有效!我忘记了黄金法则——“如果有疑问,请重新启动!” 如果您正在等待破坏性较小的解决方案,请参阅下面 Mohit Manhas 的回答 没有帮助我 在不到 24 小时内,重新启动帮助我修复了一个杂项。其他系统上的 DNS 问题,以及这个代码设计的噩梦。谢谢!【参考方案4】:

High Sierra/Xcode 9.4.1 上遇到同样的问题,所有登录尝试都以errSecInternalComponent 结束

    转到钥匙串访问 进入登录钥匙串 选择“我的证书”类别 找到您要用来签名的证书并展开它以查看密钥。 双击键 转到“访问控制”选项卡。 将密钥访问控制更新为“允许所有应用程序访问此项目”

或者:

在 mac 终端上运行 codesign 命令并“始终允许”/usr/bin/codesign 访问密钥

    如果尝试从 ssh/CI 签名,您还需要运行

    security unlock-keychain login.keychain
    

    在尝试签署 app bundle 之前

【讨论】:

您能否详细说明“将密钥访问控制更新为“允许所有应用程序访问此项目”?我什至不知道这意味着什么。 @JonMcClung 打开钥匙串访问,转到登录钥匙串 - 我的证书。找到您要签名的证书,展开它以查看密钥。双击该键,您应该会看到“访问控制”选项卡。开关允许有 @KonradRudolph security unlock-keychain -p <password> login.keychain 来自 CI。 @KonradRudolph 如果您允许协同设计访问私钥,则无需为安全解锁钥匙串提供密码。留下一个空字符串作为密码就足够了。 @KonradRudolph 可能仍然不理想,但您可以将该解锁命令移至 ~/.bash_profile,以便钥匙串在 SSH 客户端启动时解锁,但您不需要从 CI 脚本中引用它【参考方案5】:

我遇到了同样的问题,我重新启动我的 macOS,它就可以工作了。

在中国,我们有开发者之间的说法:

小问题,重启就好。大问题,应该重新安装。

有时候,上面这句话会对你有很大帮助!

【讨论】:

我们在美国有一句话 - '永远不要重启旧硬件' @Brant 为什么你有这样的说法?这很有趣。 开个玩笑——但我们遇到了类似的问题,最后只好重启旧服务器。 @ifeegoo 旧服务器在启动备份时可能会出现问题(可能是操作系统自行更新?也许有人破坏了启动脚本?)或者需要一些没有人知道的手动启动过程。在你尝试之前你无法知道。也许bios rom坏了。这只是在适当维护的环境中不应该成为问题的事情之一,但您在尝试之前实际上并不知道并且您宁愿不尝试。 @LassiKinnunen 你说得对,我们是安卓和iOS的移动开发者,所以这种情况不关心服务器。服务器真的很危险,不适合。【参考方案6】:

如果它对其他人有帮助,我遇到了 errSecInternalComponent 错误 codesign 因为我是通过 ssh 会话运行它到我的 macOS 机器。从 macOS 机器上的终端窗口运行相同的命令就可以了。

大概这是因为codesign 需要从登录钥匙串访问私钥。

在同一会话中运行 security unlock-keychain login.keychain(如 cbracken's answer 所解释)也应该可以工作。

【讨论】:

这很奇怪,即使运行钥匙串解锁命令似乎也静默失败,因为代码设计仍然不起作用。但是使用远程桌面(而不是 SSH)运行相同的命令可以正常工作。【参考方案7】:

正如@Equilibrium 在其中一个 cmets 中指出的那样,如果您在命令行环境中。像 Jenkins(我的情况)一样,您可能需要将密码传递给解决方案中提到的 security-unlock 命令。

所以不要使用,

security unlock-keychain login.keychain

使用:

security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>

登录钥匙串的路径可以是 $HOME/Library/Keychains/login.keychain(我的情况)或只是 login.keychain

【讨论】:

你的答案是基于@equilibrium 的答案,但我会考虑的。在 Bamboo CI 我帮助命令 security unlock-keychain -p account-password login.keychain 我从另一台 Mac 导入钥匙串后遇到了这个问题,我没有意识到我在项目中使用。我将您的解决方案与钥匙串的确切路径一起使用,然后重新构建它并工作 - 花了几天时间试图解决这个问题。【参考方案8】:

上述解决方案对我没有任何作用。

解决方案为我工作......

    首次打开钥匙串访问 然后选择登录并点击证书 双击 Apple 全球开发者关系证书颁发机构 打开信任部分,并从“始终信任”中设置为“使用系统默认值” 清理构建文件夹并运行

【讨论】:

【参考方案9】:

我运行了security unlock-keychain login.keychain,但我的登录密码无效。所以我重新启动,然后再次运行 Xcode,它就可以工作了。运行该命令也可以。奇怪的问题。

【讨论】:

【参考方案10】:

对于从 jenkins 和 ssh 遇到此问题的任何人:

很有可能您没有授予对钥匙串中私钥的访问权限,我试过但不确定为什么所有这些都不起作用:

    使用 -A 或 -T /usr/bin/codesign 安全导入 .p12 文件 security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k #password #keychainPath 将所有配置文件更改为 [UUID].mobileprovision 并将它们复制到 jenkins 服务器上的“~/Library/MobileDevice/Provisioning\ Profiles” 清理派生数据并重启 jenkins 服务器 确保默认钥匙串是登录钥匙串并解锁。

最终解决:

1.ssh [user]@[jenkinsServerIP] -L 5900:localhost:5900,登录jenkins服务器

2.open 'vnc://localhost'

如果您的 jenkins 服务器允许,这将启动一个远程屏幕...

然后打开 keychain.app 以授予 /usr/bin/codesign 对私钥的访问权限

祝你好运

【讨论】:

【参考方案11】:

如果尝试从 ssh 运行命令签名:

security unlock-keychain login.keychain

在尝试签署 app bundle 之前

或来自用户界面

将密钥访问控制更新为“允许所有应用程序访问此项目”

感谢@Equilibrium 和@Jon McClung

【讨论】:

【参考方案12】:

我遇到了同样的问题 发现问题在于对应用程序进行代码签名。

Opened the developer account and accepted the updated agreement and it worked.  

【讨论】:

【参考方案13】:

右键单击与钥匙串中的代码签名证书关联的私钥,然后单击“允许所有应用程序”而不是依靠提示为我修复它,因为构建是通过 ssh 进行的。

【讨论】:

【参考方案14】:

使用 mac 终端尝试一次,而不是从 ssh 会话中尝试一次

security unlock-keychain login.keychain

并在提示的对话框中选择始终允许。 然后你可以在远程会话中进行 xcodebuild。

【讨论】:

【参考方案15】:

我不得不:

1) 删除与项目关联的证书

2) 回到 Xcode 并撤销应用证书

3) Xcode 需要新证书

4) 锁定所有钥匙串

5) 清理项目

6) 重建

就是这样。希望它对任何人都有帮助。

【讨论】:

【参考方案16】:

以上方法对我来说没用。

我通过以下方式解决了它:

    打开钥匙串访问。 点击登录菜单。 删除所有个人证书。 清理项目。 重建。

就是这样。希望它对任何人都有帮助。

【讨论】:

【参考方案17】:

在我的例子中,BUCK 试图为development 签署 IPA,但没有安装任何开发证书。将构建配置更改为 release(这是我需要的 - 为 iTunes 构建)为我修复了它。

【讨论】:

【参考方案18】:

就我而言,这解决了。

xcode -&gt; preferences -&gt; accounts -&gt; select the account -&gt; manage certificate -&gt; (+) in bottom left -&gt; Apple development

参考:https://***.com/a/62646138/234110

【讨论】:

【参考方案19】:

如果有人遇到我所做的类似问题,只是想标注一下。就我而言,我的苹果开发和分发证书、密钥和配置文件是最新的。我的 iOS 代码构建在用户模式下运行没有任何问题,但是当代码构建以 root 权限(即 % sudo 或通过命令行使用 sudo 调用 Xcode)运行时,由于代码签名问题,它不起作用。

因此,我将相应的工作证书和登录密钥复制到钥匙串工具中的系统位置。然后它开始工作,没有任何代码签名问题。

同样,我们可以从工作机器导出所需的证书、密钥进行构建,然后将它们导入到非工作机器的钥匙串工具中可能会解决问题。

【讨论】:

以上是关于Xcode 命令 /usr/bin/codesign 失败,退出代码为 1:errSecInternalComponent的主要内容,如果未能解决你的问题,请参考以下文章

“在 Xcode 项目中执行命令”是啥意思?

XCode7 提示:当前未安装 Xcode 命令行工具,需要运行 Alcatraz

Xcode 命令行工具 (XCode 4.6) 从终端运行单元测试

XCode:用于 xcode 命令行构建的 Documents and Library 文件夹

Xcode 10 错误:产生多个命令

使用下载的 pkg 文件时,xcode 命令行工具安装在哪里?