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


104

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

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

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

  3. 在线添加我的IOS设备

  4. 创建IOS配置文件

  5. 添加IOS配置文件

  6. 清洁应用

  7. 生成然后运行应用程序

  8. 在构建设置中设置协同设计和供应配置文件

  9. 大量使用Google搜索>没有成功

这是我得到的错误:

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

1
该错误是由于供应配置文件设置与证书和捆绑软件ID不匹配所致。确保在中正确设置了PP,捆绑ID和证书,并在iTunes Connect和应用程序中正确分配了它们。
Alex Pelletier 2014年

1
在我构建的框架的代码签名期间,我遇到了从Xcode 11.2.1到11.3的问题。没有涉及配置文件。莫希特·曼哈​​斯(Mohit Manhas)的答案将其澄清。
Daniel Zhang

如果您使用的是SSH,并且不允许codesign访问钥匙串中的私钥,则会发生这种情况。要进行检查,请在“钥匙串”中找到钥匙,右键单击并选择“获取信息”,切换到“访问控制”,然后查看“共同设计”应用程序是否在“始终允许访问”列表中。看到此评论github.com/electron-userland/electron-builder/issues/…我所做的是从GUI运行脚本一次,然后单击“始终允许”进行键访问,然后它开始工作。
ArticIceJuice

Answers:


239

打开“ 钥匙串访问”,然后在“ 文件”菜单中选择“ 锁定所有钥匙串”

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

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


7
令人难以置信的是,这种愚蠢的锁定和解锁功能会有所帮助!谢谢
Josip B.

8
这应该是公认的答案。比重启更理智!
yonix

3
也为我工作。在30秒钟内为Android构建一个apk,为iOS生成一个应用。2小时。
加布

1
真的是WTF吗?谢谢!
彼得·刘易斯

1
@FredericP对我来说,我最近更改了密码。因此,在上一次使用xcode解锁钥匙串和用于执行此操作的密码之间存在一些相互作用。
sherrellbc

77

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


不同的情况,但类似的错误消息-重新启动工作。
mikus

近四年后,它仍然有效!我忘记了黄金法则-“如有疑问,请重新启动!”
艾伦(Alan)

2
如果您正在等待破坏性较小的解决方案,请参见下面的Mohit Manhas的答案
yonix

没帮我
Anoop Vaidya

70

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

security unlock-keychain login.keychain

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

然后再次尝试构建或代码签名操作。有问题的错误代码在Apple文档中描述为内部错误,因此在其他情况下也很可能发生这种错误。


1
不幸的是,该解决方案似乎是完全循环的:运行以上命令要求您输入密码,这在非交互式会话中显然是行不通的(例如通过CI代理(如Jenkins)执行此操作)。
康拉德·鲁道夫

很好,正如您所说,这不适用于CI bot等非交互式会话。在命令行会话中(例如,通过ssh)运行远程构建时,此功能很有用。
cbracken

3
我们在Jenkins上也遇到了类似的问题,除了上述命令中提到的内容外,我们还必须将密码作为该命令的参数传递,因此我们执行了“安全解锁密钥链-p $ KeychainPassword <登录密钥链>”,在这里您可以轻松地将KeychainPaasword安全地存储在Jenkins上。
Mohit Tater

1
对于这篇文章,我感激不尽。我花了几天的时间来弄清楚为什么codesign失败了,这是拯救了我的神奇命令!
Dimu4

32

High Sierra/ 上有相同的问题Xcode 9.4.1,所有尝试签名的结尾都在errSecInternalComponent

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

或者:

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

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

    security unlock-keychain login.keychain

    在尝试签署应用程序捆绑之前


?你可以在“更新密钥访问控制‘允许所有应用程序访问此项目’阐述我不知道,即使是手段。
乔恩·麦克朗

2
@JonMcClung打开钥匙串访问,进入登录钥匙串-我的证书。找到您用来签名的证书,将其展开以查看密钥。双击该键,您应该看到“访问控制”选项卡。切换到允许存在
平衡

5
security unlock-keychain -p <password> login.keychain来自CI的@KonradRudolph 。
平衡

1
@KonradRudolph如果您允许codesign访问私钥,则无需为安全性解锁钥匙串提供密码。留下一个空字符串作为密码就足够了。
卡米尔·索佐塔科夫斯基

1
@KonradRudolph可能仍不理想,但您可以将解锁命令移至,~/.bash_profile以便在SSH客户端启动时解锁钥匙串,但无需从CI脚本中引用它
sschilli

17

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

在中国,开发商之间有句俗话:

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

有时候,以上话语对您有很大帮助!


7
我们在美国说过“永远不要重启旧硬件”
布兰特(Brant)

@布兰特你为什么这么说?这真有趣。
ifeegoo

只是在开玩笑-但是我们遇到了类似的问题,最后只求助于重启旧服务器。
布兰特(Brant)

1
@ifeegoo旧服务器可能无法启动备份(可能是操作系统本身已更新?还是有人破坏了启动脚本?),或者需要一些手动启动过程,没人知道。尝试之前不知道。也许BIOS ROM变坏了。在保持正确的环境中,这只是其中的一部分,应该不会成为问题,但是在尝试之前您实际上并不知道,而宁愿不尝试。
Lassi Kinnunen

1
@LassiKinnunen是的,我们是Android和iOS的移动开发人员,因此这种情况与服务器无关。服务器确实很危险,不适合使用。
ifeegoo 18/09/20

8

万一它对其他人有帮助,我会遇到一个errSecInternalComponent错误,codesign因为我是通过与我的macOS机器的ssh会话运行它的。从macOS机器本身的终端窗口运行相同的命令是可行的。

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

从同一会话运行security unlock-keychain login.keychain(如cbracken的回答所解释)也应该起作用。


这很奇怪,即使运行keychain unlock命令似乎也会无声地失败,因为codesign仍然不起作用。但是,使用远程桌面(而不是SSH)运行相同的命令可以正常工作。
最大

2

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

security unlock-keychain login.keychain

在尝试签署应用程序捆绑之前

或从用户界面

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

Thx到@Equilibrium和@Jon McClung


2

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

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

在此处输入图片说明


2

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


2

正如@Equilibrium在注释之一中指出的,如果您在命令行环境中。像詹金斯(我的情况)一样,您可能需要将密码传递给解决方案中提到的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上,我帮助命令了 安全性解锁钥匙串-p {account-password} login.keychain
A.Kant

2

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

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

  1. 使用-A或-T / usr / bin / codesign安全导入.p12文件
  2. 安全设置密钥分区列表-S apple-tool:,apple:,codesign:-s -k#{password}#{keychainPath}
  3. 将所有供应配置文件更改为[UUID] .mobileprovision并将其复制到jenkins服务器上的“〜/ Library / MobileDevice / Provisioning \ Profiles”
  4. 清理派生数据并重新启动jenkins服务器
  5. 确保默认钥匙串是登录钥匙串,并已将其解锁。

最终解决:

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

2.打开'vnc:// localhost'

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

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

祝好运


1

只需使用mac终端尝试一次,但不能从ssh会话尝试

security unlock-keychain login.keychain

然后在提示对话框中选择“始终允许”。然后,您可以在远程会话中使用xcodebuild。


1

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


0

我不得不:

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

2)返回Xcode并撤消应用程序证书

3)Xcode需要新证书

4)锁定所有K​​eyChain

5)清理项目

6)重建

而已。希望它对任何人有帮助。


0

以上方法对我没有用。

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

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

而已。希望它对任何人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.