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

时间:2018-08-03 20:08:15

标签: 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,它实际上并没有安装登录项。否则,即使我手动执行该操作,也无法从登录项启动和运行基本应用。

1 个答案:

答案 0 :(得分:2)

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