在终端中使用 codesign 命令签名后,使用 Unity 构建的 macOS 应用程序在启动时挂起

macOS app built with Unity hangs upon launch after signing with codesign command in Terminal

我正在尝试将使用 Unity 构建的 macOS 应用程序提交到 Mac App Store。我按照 Unity 文档 Delivering your application to the Mac App Store.

中提到的说明进行操作

我能够 运行 macOS 的构建命令并为我的应用程序获取 .app 包。我也可以启动它并且 运行 没问题。但是,在 运行 执行以下 codesign 命令后(如上面链接文档中所述),应用程序在启动时冻结,必须强制退出。这是我运行ning:

codesign命令行
codesign -o runtime -f --deep -s '3rd Party Mac Developer Application: DEVELOPER NAME' --entitlements "GAMENAME.entitlements" "/AppPath/GAMENAME.app"

我拥有 Apple 的付费(个人)开发人员许可证,并且已按照文档中的说明在钥匙串中正确设置证书。我还设法检查应用程序包是否由 运行 命令行签署:

codesign -dv --verbose=4 GAMENAME.app

运行 上面的命令显示它是用我的第 3 方 Mac App Developer 证书签名的。

我已经尝试寻找一种方法来从 Unity 应用程序中 导出 Xcode 项目,因此我可以尝试使用 [=60= 构建和签名它], 但在网上搜索后,我意识到 Unity 还不支持导出 macOS 应用程序的 Xcode 项目(它可以为 iOS 做同样的事情)。

我是运行所有软件都是当前最新版本,下面也一样:

  1. macOS 卡特琳娜 10.15.1

  2. Xcode 11.2.1

  3. 统一 2019.2.13

我的问题是:

我正在寻求暂时通过 Mac App Store 独家 分发应用程序。这将是一个付费应用程序(如果相关的话)。

如果您从命令行构建 .app(使用 Unity 的命令行调用),请尝试从编辑器构建。

确认您不是在构建仅 32 位的二进制文件。

尝试从您的代码签名命令中删除 -o runtime,这是您的过程中唯一与我的不同的部分,我的工作正常。

不然上传到App Store的时候,相信Xcode会帮你签收的。虽然这与 codesign 没有什么不同,但 Xcode 可能会检查您是否意外阻止或以其他方式错误配置了您在特定计算机上签名的 运行 二进制文件。您应该在不同的机器或 macOS VM 上进行测试。

我的应用尚未面向应用商店,因此我正在使用我的 Developer ID 应用程序证书进行构建

我现在正在使用 xcode 13.2 构建一个 Unity 2021.1.28f1 在 macOS 11.6.2

上生成的 xcodeproj

生成的应用程序包在归档期间经过公证(因此隐含地使用 -o 运行时开关)并且

  • 运行 在 macOS 11.6.2 上无缝运行,即使没有使用权利例外
  • 在 macOS 10.15.7 上冻结,直到构建期间未添加“允许未签名的可执行内存”(com.apple.security.cs.allow-unsigned-executable-memory)权利

所以现在的解决方案是我将 com.apple.security.cs.allow-unsigned-executable-memory 添加到应用程序权利