Xcode Command/usr/bin/codesign 失败,退出代码1: errSecInternalComponent

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

  1. 删除所有证书和供应配置文件

  2. 创建/添加 IOS 开发证书

  3. 联机添加我的 IOS 设备

  4. 创建 IOS 配置文件

  5. 添加 IOS 配置文件

  6. 清洁应用程序

  7. 构建然后运行应用程序

  8. 在生成设置中设置协同设计和配置配置文件

  9. 大量的谷歌搜索到没有成功

我得到的错误是:

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
100773 次浏览

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

我遇到了同样的问题,我重新启动了 macOS,它运行正常。

在中国,开发商之间有句谚语:

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

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

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

security unlock-keychain login.keychain

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

security unlock-keychain -p PASSWORD login.keychain

如果你正在使用一个持续集成系统,你可能想通过一个环境变量/令牌注入密码,这是大多数 CI 系统在他们的设置中提供的。

问题中的错误代码是 在苹果公司的文件中有描述作为一个内部错误,所以完全有可能在其他情况下也会发生这种情况。

打开 钥匙链访问,然后在 档案菜单中选择 锁定所有钥匙链

那就回 Xcode 清理重建。它将再次提示您输入密码以解锁钥匙链。

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

为了帮助其他人,我在使用 codesign时遇到了一个 errSecInternalComponent错误,因为我是通过 ssh 会话在 macOS 机器上运行它的。在 macOS 计算机本身的终端窗口中运行相同的命令可以工作。

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

从同一个会话运行 security unlock-keychain login.keychain(如 Cbracken 的回答所解释的)也应该有效。

High Sierra/Xcode 9.4.1上出现了同样的问题,所有的签名尝试都以 errSecInternalComponent结束

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

或者:

在 Mac 终端上运行协同设计命令,并且“总是允许”/usr/bin/协同设计访问密钥

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

    security unlock-keychain login.keychain
    

    在签署应用程序包之前

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

security unlock-keychain login.keychain

在签署应用程序包之前

或来自 UI

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

谢谢“均衡”和“乔恩 · 麦克朗”

只是尝试一次使用 Mac 终端,但不是从 ssh 会话

security unlock-keychain login.keychain

并在提示对话框中选择 always allow。 然后您可以在远程会话中使用 xcodebuild。

我也遇到过同样的问题,发现问题出在应用程序的代码签名上。

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

enter image description here

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

正如@EquBalance 在其中一条注释中指出的,如果你在命令行 env 中。像 Jenkins (我的例子)一样,您可能需要将密码传递给解决方案中提到的 安全解锁命令。

所以我没有用,

security unlock-keychain login.keychain

用途:

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

其中路径到登录密钥链可以是 $HOME/Library/Keychain/login.keychain(我的情况)或简单的 登录,钥匙链

对于遇到这个问题的任何人,从 jenkins 和 ssh:

很有可能你没有授权访问密钥链中的私钥,我试过,但不确定为什么所有这些都不起作用:

  1. Security import. p12文件,具有-A 或-T/usr/bin/codesign
  2. 安全集-密钥-分区-列表-S apple-tool: ,apple: ,codesign:-s-k # { password } # { keychainPath }
  3. 将所有配置文件更改为[ UUID ] . mobile 条款,并将它们复制到 jenkins 服务器上的“ ~/Library/MobileDevice/Provisoning Profiles”
  4. 清除派生数据并重启 Jenkins 服务器
  5. 确保默认密钥链是登录密钥链并解锁它。

最终解决方案:

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

2. 打开“ vnc://localhost”

这会启动一个远程屏幕,如果你的 Jenkins 服务器允许的话..。

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

祝你好运

右键单击密钥链中与协同设计证书相关的私钥,然后单击“允许所有应用程序”,而不是依赖提示为我修复它,因为构建是通过 ssh 进行的。

我不得不:

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

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

3) Xcode 需要一个新的证书

4)锁定所有钥匙链

5)清洁工程

6)重建

就是这样,希望对大家都有帮助。

上述方法对我没有用。

我通过以下方式解决了这个问题:

  1. 打开钥匙链访问。
  2. 点击登录菜单。
  3. 删除所有个人证书。
  4. 清理项目。
  5. 重建。

就是这样,希望对大家都有帮助。

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

以上解决方案对我无效。

对我来说可行的解决方案。

  1. 第一次开放钥匙链访问
  2. 然后选择“登录”并单击“证书”
  3. 双击苹果全球开发者关系证书授权 打开“信任”部分,并从“始终信任”设置为“使用系统默认值”
  4. 清除生成文件夹并运行

对我来说,这个问题解决了。

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

档号: https://stackoverflow.com/a/62646138/234110

只是想问问有没有人遇到和我一样的问题。在我的情况下,我的苹果开发人员和发行证书,密钥和最新的配置文件。我的 iOS 代码构建在用户模式下工作,没有任何问题,但它不工作,由于代码签名问题,当代码构建运行根特权,即% sudo 或调用 Xcode 使用 sudo 通过命令行。

因此,我复制了相应的工作证书,并将登录名键入 keychain 工具中的系统位置。然后它开始工作,没有任何代码符号问题。

同样,我们可以从工作机器上导出所需的证书、构建密钥,并将它们导入非工作机器的密钥链工具中,这样就可以解决问题。

如果你得到 errSecInternalComponent之后

Warning: unable to build chain to self-signed root for signer …

你的钥匙链上可能有错误的苹果全球开发者关系根证书。在这种情况下,请确保导入与开发人员证书签名的 WWDR 证书。我导入了将于2023年到期的 WWDR 证书,两个小时后终于意识到它无法工作,因为我的开发人员证书已经与将于2030年到期的 WWDR 证书(AppleWWDRCAG3.cer)签署了协议。下载页面: https://www.apple.com/certificateauthority/

发布一个我们最终不得不采用的解决方案以防其他人用完了可以尝试的东西。

在我们的“登录”密钥链中安装了一个新的苹果分销证书后,我们的詹金斯工作突然开始失败,唱 iOS 应用程序出现了同样的 ErrSecInternalComponent错误:

Command /usr/bin/codesign failed with exit code 1

我们的构建管道调用 security unlock-keychain,并且我们有 我们的企业分销证书没有问题(它在几周前刚巧被更新并安装在同一个 Keychain 中) ,其中解锁按预期工作。

在尝试了这个线程和其他地方提到的所有常见事情之后,我们最终在一个新的 Terminal 窗口中作为 Jenkins 用户手动运行协同设计,使用与 Jenkins 日志中发现的完全相同的命令: /usr/bin/codesign --force --sign...

这提示输入密码以解锁钥匙链,我们这样做了,然后选择 “总是允许”

在那之后,詹金斯设法签了字(如预期的那样)。

这显然是一个解决方案,因为我们可能不得不在证书过期后再次这样做,而且真的很奇怪,解锁可以用于企业证书,但不是用于通过 App Store 发布的证书... ... 它们实际上共享相同的管道。

对我来说,我可以在直接使用 Mac 或通过 VNC 时对文件进行签名,但不能通过 ssh。我觉得肯定和钥匙链里的证书有关。我已经在做 security unlock-keychain [keychain name]了,但这个看起来不够好。

最终为我解决了这个问题(在直接/VNC 连接中,而不是 ssh 连接中) :

  1. 确保您的证书所在的密钥链被锁定。关闭 钥匙链访问
  2. 打开终端
  3. 执行 没有运行 security unlock-keychain [keychain name]
  4. 使用 codesign工具运行签名过程。您将被要求输入密钥链的密码。
  5. 输入密码,然后点击“总是允许”

从现在起,我可以在命令之前通过 ssh、 只要我包括 security unlock-keychain [keychain name]使用 codesign

如果在密钥链中有一个具有相同名称的代码签名证书,请确保将其删除。我有一个 XCode 报告为“丢失的私钥”。在 codesign使用正确的证书之前,我必须通过钥匙链访问删除它。