【问题标题】:Failed to launch macOS app built in Xcode无法启动内置于 Xcode 的 macOS 应用程序
【发布时间】:2019-11-18 22:01:53
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 嗯。听起来该应用程序试图打开一些文件。 LSOpenURLsWithRole 实际上已被弃用。您是否使用过一些已弃用的 API,例如旧的“登录时启动”的东西?
  • 不确定我是否使用了任何已弃用的 API。这是一个非常小的应用程序,显示从某个 URL 接收到的字符串列表。源码可以在我的github上找到github.com/obukhow/OggettoLunchMac
  • 哦,我明白了。不,我也没有什么明显的……
  • @JulianF.Weinert,哪个 Mac 操作系统?有什么特定于版本的吗?这些 Mac 上是否有任何安全软件?
  • 您是否也可以尝试运行sudo launchctl stop com.apple.security.syspolicy && sudo launchctl start com.apple.security.syspolicy 看看是否有帮助?

标签: xcode macos macos-high-sierra


【解决方案1】:

我不知道您是如何构建您的应用程序的,但如果 LSOpenURLsWithRole 返回 permError = -54,这意味着您在打开文件时遇到权限错误。这可能意味着很多事情,但在发布模式下构建应用程序不再是 Apple 建议您做的事情。 Apple 更喜欢您使用 Archive,然后在 Organizer 中导出应用程序以供用户使用。通过使用此工作流程,通常您可以使用 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 中的构建设置。更多信息,如果这些解决方案中的任何一个有效。让我知道。

【讨论】:

  • 好的。谢谢你的回复。我尝试使用存档功能重建应用程序,并且我对应用程序进行了公证,但它没有效果。正如我在问题中提到的,在无法启动应用程序的所有机器上都禁用了 spctl。
  • 我检查了无法启动应用程序的机器的 system.log 文件,它显示以下文本 > 7 月 12 日 15:34:18 com.apple.xpc.launchd[1 ](com.apple.xpc.launchd.oneshot.0x10000aa1.Gaetano 午餐 [55855]):服务无法初始化:18E226:xpcproxy + 11291 [1534][1571C9B2-C489-3268-9D6B-73137AC77303]:0x1 > 7 月 12 日15:34:18 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.oneshot.0x10000aa1.Gaetano Lunches[55855]):服务退出异常代码:78
  • launchctl 也被禁用了吗?您的应用是否已被沙盒化,或者您是否尝试写入或打开不允许您的应用写入或打开的文件?
  • 我的 APP 使用 URLsession 从远程 URL 获取 JSON 数据。勾选“传出连接”即可启用应用沙箱
  • 因为错误 -54 和现在 launchd 中的错误 78 都指向权限错误。似乎您正在尝试读取或写入您的应用程序无权访问的目录。你在哪里写你正在下载的东西?
猜你喜欢
  • 2021-03-26
  • 2015-01-04
  • 1970-01-01
  • 2018-03-17
  • 2016-03-31
  • 2015-05-05
  • 2014-07-29
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多