SMLoginItemSetEnabled 返回成功但不添加登录项

mas*_*ers 5 macos service-management

我正在尝试向 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,它实际上并没有安装登录项。或者,如果是,它无法从登录项启动和运行基本应用程序,即使我手动执行它也可以。

mas*_*ers 4

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