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 $ KeychainPasswordcodesign
失败了,这是拯救我的神奇命令!!!
似乎解锁必须在运行 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 打开钥匙串访问,转到登录钥匙串 - 我的证书。找到您要签名的证书,展开它以查看密钥。双击该键,您应该会看到“访问控制”选项卡。开关允许有 @KonradRudolphsecurity 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 -> preferences -> accounts -> select the account -> manage certificate -> (+) in bottom left -> Apple development
参考:https://***.com/a/62646138/234110
【讨论】:
【参考方案19】:如果有人遇到我所做的类似问题,只是想标注一下。就我而言,我的苹果开发和分发证书、密钥和配置文件是最新的。我的 iOS 代码构建在用户模式下运行没有任何问题,但是当代码构建以 root 权限(即 % sudo 或通过命令行使用 sudo 调用 Xcode)运行时,由于代码签名问题,它不起作用。
因此,我将相应的工作证书和登录密钥复制到钥匙串工具中的系统位置。然后它开始工作,没有任何代码签名问题。
同样,我们可以从工作机器导出所需的证书、密钥进行构建,然后将它们导入到非工作机器的钥匙串工具中可能会解决问题。
【讨论】:
以上是关于Xcode 命令 /usr/bin/codesign 失败,退出代码为 1:errSecInternalComponent的主要内容,如果未能解决你的问题,请参考以下文章
XCode7 提示:当前未安装 Xcode 命令行工具,需要运行 Alcatraz
Xcode 命令行工具 (XCode 4.6) 从终端运行单元测试