为啥我的所有应用程序在通过云服务共享其中一个后突然开始崩溃并出现 EXC_CRASH(代码签名无效)?

Posted

技术标签:

【中文标题】为啥我的所有应用程序在通过云服务共享其中一个后突然开始崩溃并出现 EXC_CRASH(代码签名无效)?【英文标题】:Why suddenly did all my apps start to crash with an EXC_CRASH (Code Signature Invalid) after sharing one of them via a cloud service?为什么我的所有应用程序在通过云服务共享其中一个后突然开始崩溃并出现 EXC_CRASH(代码签名无效)? 【发布时间】:2017-06-05 22:00:17 【问题描述】:

昨天,我正在开发我的应用程序的新版本。为了在另一台计算机上测试它,我将它拖放到一个文件夹中,该文件夹通过云服务在我拥有的几台 Mac 计算机之间共享。我认为这可能是一种将应用程序分发到在另一台运行旧版 macOS (10.11) 的计算机上进行测试。

我注意到的第一件事是我无法在测试计算机上启动我的最新版本。我通过打开 .app 文件夹进行了调查,发现 所有可执行文件都已被禁用(它们看起来像普通文档文件,而不是像终端的图标)。好吧,我想,所以显然你不能共享这样的应用程序。您需要始终通过磁盘映像或 zip 文件分发它们,如果您不是通过 Mac App Store 这样做,最好通过签名的磁盘映像。

我没想太多。由于我在另一个位置的测试机器上安装了 Xcode,因此我重新构建了我的应用程序,一切都按预期运行。

但是,当我回到家并尝试再次处理我的应用程序时,我注意到它的一个助手在启动时开始崩溃,并出现 EXC_CRASH (Code Signature Invalid) 异常。然后我尝试启动我的主应用程序,同样的事情发生了。我尝试使用我的卸载程序卸载该应用程序,但发生了同样的情况。

所以,我的问题是:这怎么可能?为什么我的所有应用都开始崩溃了,而我的所有应用都正常运行了几分钟?

【问题讨论】:

@Kendra 好吧,至少有一位评论者发现上下文对他们理解我的意图很重要,因为被误解的可能性很小,特别是如果您正在回答自己的问题并且按照建议发布指向您自己博客的链接。 【参考方案1】:

基本上,我发现发生这种情况的原因是,如果您尝试通过云服务共享的文件夹直接分发您的应用程序,您的 Mac 开发者证书可能会被 Apple 吊销。我通过在我的应用程序上运行以下命令来确定这一点:

spctl -a -v path/to/my/app

你瞧,我得到了这个结果:

path/to/my/app: CSSMERR_TP_CERT_REVOKED

我的解决方案是转到我的开发者帐户并单击撤销按钮以删除此列入黑名单的证书,然后按照网站上的说明创建一个新证书。

幸运的是,我的应用程序的旧版本没有受到影响,因为它们已由较早的证书签名。但是,如果已经分发给您的客户的应用程序是由撤销的证书签署的,请准备好接收大量投诉并告诉您的用户重新下载已辞职的应用程序。他们将在启动时被此 EXC_CRASH 异常杀死。告诉你的同事不要有通过云服务快速分发应用程序的“绝妙”想法。您的 Mac 开发者证书最终可能会被吊销。

【讨论】:

等等,这是否意味着如果某个随机用户将您的应用上传到 dropbox/icloud/whatever,它会为所有人吊销开发证书? @mgrandi 有这种潜力,但我不知道这是一个自动程序还是这个证书黑名单是由人策划的 Apple 肯定有一些关于此的官方文档。

以上是关于为啥我的所有应用程序在通过云服务共享其中一个后突然开始崩溃并出现 EXC_CRASH(代码签名无效)?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的推送中突然有合并提交?

为啥有时网络会突然断开

云计算OpenStack共享组件---Memcache缓存系统

为啥 node.js 不能在共享主机上运行? [关闭]

阿里云使用记录

云服务器绑定主机名的正确姿势