开发人员 ID 签名的 OS X 应用程序在启动时因代码签名无效而崩溃

Posted

技术标签:

【中文标题】开发人员 ID 签名的 OS X 应用程序在启动时因代码签名无效而崩溃【英文标题】:Developer ID signed OS X app crashes on start with Code Signature Invalid 【发布时间】:2014-12-16 16:53:56 【问题描述】:

我正在尝试构建我的应用程序,以便与测试人员共享它。我的应用程序指定了权利(iCloud),所以我必须对其进行签名。要分发已签名的构建,我想我需要使用“开发人员 ID”对其进行签名,我已经这样做了。应用程序包似乎已正确签名 - 正在运行:

spctl --verbose=4 --assess --type execute <my app>

报告:

<my app>: accepted
source=Developer ID

但是当我运行应用程序时它崩溃了 - 一个“代码签名无效”异常。

那么为什么会崩溃呢?我想我需要包含我创建的配置文件,其中包括我的测试人员机器的 UUID,但是当我尝试从 Xcode 导出“开发人员 ID 签名应用程序”时,它总是将配置文件列为“无”,并且没有办法改变它。我做错了什么?

【问题讨论】:

【参考方案1】:

我发现我误解了很多事情。

首先 - 我很确定它会崩溃,因为虽然代码签名是有效的,但我正在尝试使用仅适用于从应用商店下载的应用的功能 (iCloud);该应用需要经过 Apple 签名才能运行。

其次 - 开发者 ID 签名的应用不使用配置文件;这些是可在应用商店之外实际分发的生产就绪应用(只要它们不使用应用商店独有的功能)。

那么我如何共享构建以便测试人员可以运行它并使用它的 iCloud 功能?答案是我像往常一样构建了一个开发版本,以开发人员身份签名,但创建了一个匹配的配置文件,包括我的测试人员机器的 UUID。然后我使用“导出为 Mac 应用程序”导出存档的应用程序。应用程序和配置文件都需要传递给测试人员 - 他们只需双击配置文件即可安装配置文件以调出配置文件管理器。

这花了我几个小时才弄清楚 - 我认为从文档中不清楚所有这些事情的关系,所以我希望这对某人有用! ;)

【讨论】:

【参考方案2】:

我建议创建 DMG 文件并将应用程序放在 Application 文件夹中:

这是干净的并构建项目:

xcodebuild   -configuration Release -scheme SCHEME_NAME clean build

并创建 dmg 文件:

hdiutil create -volname PROJECT_NAME -srcfolder .../Xcode/DerivedData/Build/Products/Debug/APP_NAME.app -ov -format UDZO SRC_PATH_FORDMG_FILE/PRODUCT_NAME.dmg

【讨论】:

以上是关于开发人员 ID 签名的 OS X 应用程序在启动时因代码签名无效而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 检索开发人员信息时出错?

cloudkit:验证开发人员 ID 签名的应用程序错误:存档的应用程序具有需要 Mac 应用商店分发的权利

使用现有 CA 颁发的证书签署 OS X 应用程序并让 Gatekeeper 满意

如何在android Q os中从后台服务启动活动,而不从开发人员选项的设置中单击“允许后台活动启动”?

Swift 3 OS X 应用程序在启动时启动

从签名的 OS X 应用程序中删除 nib 文件