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

Macos SMLoginItemSetEnabled返回成功,但不返回’;不添加登录项,macos,service-management,Macos,Service Management,我正在尝试向macOS应用程序添加登录项。该应用程序在其plist中设置为代理,因此它没有停靠图标,在启动时隐藏其主窗口,并在状态栏中放置一个图标以提供其UI 要添加登录项,我必须: 在项目中创建了新的macOS应用程序(启动助手) 在基本应用程序中复制期间禁用去除调试符号 将复制文件阶段添加到基本应用程序,目标设置为包装程序,子路径设置为目录/库/登录项,并将帮助程序应用程序添加到要复制的文件列表中 将助手应用程序设置为“仅背景” 为helper应用程序启用了跳过安装 已从helper应用程

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

要添加登录项,我必须:

  • 在项目中创建了新的macOS应用程序(启动助手)
  • 在基本应用程序中复制期间禁用
    去除调试符号
  • 复制文件
    阶段添加到基本应用程序,目标设置为
    包装程序
    ,子路径设置为
    目录/库/登录项
    ,并将帮助程序应用程序添加到要复制的文件列表中
  • 将助手应用程序设置为“仅背景”
  • 为helper应用程序启用了
    跳过安装
  • 已从helper应用程序中删除该窗口
  • 将代码添加到助手应用程序的
    ApplicationIDFinishLaunching
    以启动基础应用程序
  • 在基础应用程序中添加了一个选项,可调用
    SMLoginItemSetEnabled((uu-bridge-CFStringRef)@“com.mydomain.MyApp-Helper”,enabled)
    以允许切换登录项
  • 为基本应用程序和辅助应用程序启用了沙盒和代码签名
  • 生成项目并将应用程序复制到/应用程序
  • 从/应用程序启动应用程序,并启用登录时启动的选项
问题是,尽管我从应用程序得到的反馈是
SMLoginItemSetEnabled
成功,但helper应用程序不会在登录时运行,或者如果运行,则不会启动基础应用程序


我查看了基本应用程序包的内部,助手应用程序就在那里。我可以手动运行它,它会启动基本应用程序。我甚至可以通过系统首选项手动将其添加为登录项,它仍然会启动基本应用程序。因此,即使
SMLoginItemSetEnabled
返回
true
,它似乎并没有实际安装登录项。或者,如果是,则无法从登录项启动和运行基本应用程序,即使我手动启动和运行基本应用程序也是如此。

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

我遇到了同样的问题。另外请注意,在删除DerivedData文件夹和测试注销/登录之前,请退出Xcode,因为如果项目打开,它将立即重新创建空产品,这似乎足以让它感到困惑。还要确保完全删除文件夹,而不仅仅是移动到垃圾箱。我生命中只有6个小时。