为 OSX 编写和公证可执行文件

Posted

技术标签:

【中文标题】为 OSX 编写和公证可执行文件【英文标题】:Codesigning and notarizing executable file for OSX 【发布时间】:2021-09-05 19:07:55 【问题描述】:

我正在尝试从命令行对一个从 javascript 文件生成的小型可执行文件进行代码签名 + 公证,但没有成功。该文件是一个非常简单的 CLI 工具,旨在通过 mac 的终端使用。

下载文件并尝试运行它会导致错误:

"testBinaryFile 无法打开,因为开发者的身份 无法确认。”

(并且应该从终端运行它会导致进程处于“已终止”状态)。

这些是我执行的步骤: 0. 将代码打包成可执行文件(命名为testBinaryFile

    使用以下代码对可执行文件进行代码设计:
codesign -s CERTIFICATE_UUID --timestamp -o runtime -v testBinaryFile --force
    压缩可执行文件(以便上传公证):
ditto -c -k testBinaryFile testBinaryFile.zip  
    发送 zip 进行公证:
xcrun altool --notarize-app \
    --primary-bundle-id io.test.bundled \
    --username <OUR_APPLE_ID> \
    --password <OUR_APPLE_APP_SPECIFIC_PASS> \
    --file testBinaryFile.zip
    轮询服务,直到我们返回成功的公证消息:
xcrun altool --notarization-info REQUEST_ID -u <OUR_APPLE_ID> -p <OUR_APPLE_APP_SPECIFIC_PASS>

    将 zip 文件上传到我们在 Github 中的托管(也在 Google 的托管服务上尝试过)

    下载 zip 文件,将其解压缩并尝试运行它 -> 会导致上面附加的错误。

其他说明: *我有一个“Apple Developer ID 证书”,允许在 AppStore 之外分发捆绑的可执行文件。

*我在一个经过公证的 .dmg 安装程序中使用相同的捆绑可执行文件,该安装程序包含“.app”应用程序(以及它的 /resources 中的捆绑包),并且我设法在没有任何问题的情况下使用它

关于如何使它也适用于捆绑包的任何线索?

【问题讨论】:

这里不是bundle这个词,是compile。捆绑就是将编译好的可执行文件放在 my.app/Contents/MacOS/binaryexecutive 【参考方案1】:

无法使用来自第三方提供商(例如 Comodo、DigiCert)的证书,因为此类证书无法通过需要 Apple 开发人员颁发的证书的 Gatekeeper。

【讨论】:

我的意思是“第 3 方”作为允许将产品运送到应用商店之外的证书(如第 3 方 :)) 你的意思是“开发者ID申请”证书。【参考方案2】:

您的网守安全设置不允许这样做,因为它甚至不是应用程序。结果它可能已被隔离,这意味着您必须运行 xattr -d com.apple.quarantine /path/to/file 才能使其运行。 不太受欢迎的方法是降低您的安全设置。

另请注意,由于公证票无法装订到二进制可执行文件,用户需要通过互联网访问票证才能执行代码。

【讨论】:

以上是关于为 OSX 编写和公证可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Cocoa 应用程序项目中导出 XCode 中的 OSX 可执行文件

Tools系列Mac OSX查看可执行文件引用的动态链接库

如何在 Mac OSX 下使用 gcc 设置可执行文件的运行时路径(-rpath)?

OSX 修复 Selenium Chromedriver 启动错误产生未知系统错误 -86 可执行文件中的错误 CPU 类型?

在 OSX 上加载/执行 ELF 文件的可能性

编写编译规则文件Makefile,并通过make生成可执行文件