Macos 无法在登录时启动我的OS X应用程序(以swift编写)

Macos 无法在登录时启动我的OS X应用程序(以swift编写),macos,cocoa,swift,osx-yosemite,Macos,Cocoa,Swift,Osx Yosemite,一些细节: 我没有加入Mac开发者计划,因此代码没有签名。 我不是在沙箱中的应用程序。 这是一个只有状态栏的应用程序,不会出现停靠或菜单。 以下是我所做的: 在我现有的主应用程序项目上为helper应用程序添加了一个新项目。 在主应用程序设置中: 将ServiceManagement.framework添加到我的主应用程序。 将复制期间的条带调试符号设置为“否” 在“生成阶段”选项卡中的“复制文件”下,添加内容/库/登录项作为子路径。并添加了我的助手App.App 有关helper应用程序设置:

一些细节:

我没有加入Mac开发者计划,因此代码没有签名。 我不是在沙箱中的应用程序。 这是一个只有状态栏的应用程序,不会出现停靠或菜单。 以下是我所做的:

在我现有的主应用程序项目上为helper应用程序添加了一个新项目。 在主应用程序设置中:

将ServiceManagement.framework添加到我的主应用程序。 将复制期间的条带调试符号设置为“否” 在“生成阶段”选项卡中的“复制文件”下,添加内容/库/登录项作为子路径。并添加了我的助手App.App 有关helper应用程序设置:

将应用程序仅后台设置为“是” 在“生成设置”下,将“跳过安装”设置为“是” Hocus Pocus.app是我的主应用程序,Hocus Pocus Helper.app是Helper应用程序

在helper app的AppDelegate中,我的代码是:

func applicationDidFinishLaunching(aNotification: NSNotification) {        
    NSWorkspace.sharedWorkspace().launchApplication("Hocus Pocus.app")
    NSApplication.sharedApplication().terminate(self)
}
在主应用程序的AppDelegate中:

...
override init() {
    self.mainBundle = NSBundle.mainBundle()
    let path = mainBundle.bundlePath.stringByAppendingPathComponent(
        "Contents/Library/LoginItems/Hocus Pocus Helper.app")
    self.helperBundle = NSBundle(path: path)!

    super.init()
}
...
...
func makeThisAppStartAtLogin(state: Int) {
    let result = SMLoginItemSetEnabled(helperBundle.bundleIdentifier!, Boolean(state))        
    if result != 0 {
        println("success")
    }
    else {
        println("failed")
    }
}
当我调用MakeThisAppStartLogin1时,它不工作,为什么

苹果的文档提到:

辅助程序应用程序的布尔启用状态。此值仅对当前登录的用户有效。如果为true,则助手应用程序将在后续登录时立即启动并保持运行。如果为false,则助手应用程序将不再保持运行

当我调用MakeThisAppStartLogin时,它应该立即启动helper应用程序。但它似乎没有这样做

if块打印成功

在Helper应用程序代码中,我还发送了launchApplication的路径:而不是App name,这没有任何区别

我已经从默认调试目录运行了这个应用程序,也在/Applications下运行

我也尝试过以下方法,但没有任何区别:

...
let launchDaemon: CFStringRef = "avi.Hocus-Pocus-Helper"
if SMLoginItemSetEnabled(launchDaemon, Boolean(state)) {
...
我已经检查了助手应用程序是否以正确的路径复制到主应用程序

当我从debug文件夹或主应用程序的内容手动启动helper应用程序时,它确实会启动主应用程序并自杀,这是应该的。 完整的存储库,如果您感兴趣的话。检查loginitems分支。
你做过这个吗?是的,我做过。但必须使用不同的方法。我会发布代码嗨,可以发布一个你所做的例子吗?我尝试了这种方法,但也不适用于我:/