7

我正在尝试将登录项添加到 macOS 应用程序。该应用程序在其 plist 中设置为代理,因此它没有停靠图标,在启动时隐藏其主窗口,并在状态栏中放置一个图标以提供其 UI。

要添加登录项,我有:

  • 在项目中创建了一个新的 macOS 应用程序(启动助手)
  • Strip Debug Symbols During Copy在基本应用程序中禁用
  • 向基础应用程序添加了一个Copy Files阶段,目标设置为Wrapper,子路径设置为Contents/Library/LoginItems,并将帮助应用程序添加到要复制的文件列表中
  • 仅将助手应用程序设置为后台
  • Skip Install为助手应用启用
  • 从帮助应用程序中删除了窗口
  • 将代码添加到帮助应用程序applicationDidFinishLaunching以启动基本应用程序
  • 向基本应用程序添加了一个选项以调用SMLoginItemSetEnabled((__bridge CFStringRef)@"com.mydomain.MyApp-Helper", enabled)以允许切换登录项
  • 为基础应用和辅助应用启用沙箱和代码设计
  • 构建项目并将应用程序复制到 /Applications
  • 从 /Applications 启动应用程序并启用在登录时启动的选项

问题是,虽然我从SMLoginItemSetEnabled成功的应用程序中获得了反馈,但帮助应用程序在登录时没有运行,或者如果它运行,它不会启动基本应用程序。

我查看了基本应用程序包,助手应用程序就在那里。我可以手动运行它,它会启动基本应用程序。我什至可以通过系统偏好设置手动将其添加为登录项,它仍然会启动基本应用程序。所以看起来即使SMLoginItemSetEnabled正在返回true,它实际上并没有安装登录项。或者,如果是,它无法从登录项启动和运行基本应用程序,即使我手动执行它也可以。

4

1 回答 1

4

解决方案是删除基本应用程序和帮助程序应用程序的 DerivedData 文件夹。登录项似乎对要打开哪个应用程序副本感到困惑,并且可能试图从 DerivedData 打开一个。删除这些文件夹并仅将应用程序保留在 /Applications 中允许帮助程序应用程序从登录项启动基本应用程序。

于 2018-08-04T06:40:17.463 回答