首页 > 解决方案 > 无法启动内置于 Xcode 的 macOS 应用程序

问题描述

我在 Xcode 中以发布模式构建了一个应用程序。使用有效的 Developer ID 证书签名。该应用程序在某些 MacBook 上运行良好。但在另一次启动失败并出现错误

无法打开应用程序 %name%。

然后我尝试使用open它说的命令从终端启动它

LSOpenURLsWithRole() 失败,文件 /Applications/Gaetano Lunches.app 出现错误 -54。

然后我尝试从它说的包内容中直接启动二进制文件

-bash:/Applications/Gaetano Lunches.app/Contents/MacOS/Gaetano 午餐:不允许操作

允许在所有 MacBook 上从 Anywhere 安装应用程序。spctl-master 被禁用。文件的权限是正确的。但该应用程序无法启动。

标签: xcodemacosmacos-high-sierra

解决方案


我不知道您是如何构建应用程序的,但如果LSOpenURLsWithRole正在返回permError = -54,这意味着您在打开文件时出现权限错误。这可能意味着很多事情,但在发布模式下构建应用程序不再是 Apple 建议您做的事情。Apple 更喜欢您使用存档,然后您将应用程序导出到管理器中以供您的用户使用。通过使用此工作流程,通常您可以使用 Xcode 默认设置来构建应用程序。如果您不这样做,那么您需要更加小心选择在发布模式下构建的设置。

对于一种快速而肮脏的方法,我会尝试以下方法:

1)打开终端

2) 类型:chmod +x "/Applications/Gaetano Lunches.app/Contents/MacOS/Gaetano Lunches"

3)尝试启动您的应用程序,看看它是否有帮助。如果它有帮助,那么您的构建设置就会出现问题,即无法在某处更改文件权限以使您的可执行文件具有正确的启动权限。

您可以尝试的另一件事是查看您的应用程序是否被 Gatekeeper 列入黑名单,因为它以某种方式确定您的应用程序在您自己的系统上做可疑的事情。如果是这种情况,那么您可以尝试这个来查看看门人正在评估什么:

spctl -a "/Applications/Gaetano Lunches.app"

如果由于某些奇怪的原因您的应用程序被 Gatekeeper 列入黑名单,您可以随时手动添加您的应用程序并将其列入 Gatekeeper 的白名单:

spctl --add "/Applications/Gaetano Lunches.app"

如果一切都失败了,您可以尝试重置整个数据库,但您需要超级用户访问权限:

sudo spctl --reset-default

但是,我认为这些只是快速修复,如果您仍然需要这样做,是因为您必须调整 Xcode 中的构建设置。更多信息,如果这些解决方案中的任何一个有效。让我知道。


推荐阅读