以编程方式在启动时启动Mac应用程序

问题描述 投票:3回答:3

我已经开发了一个Mac应用程序,我想在Mac启动后立即启动。如何以编程方式实现此功能?

我知道launchd,但是找不到有效的示例。

macos launchd
3个回答
2
投票

下面的代码是蒂姆·施罗德(Tim Schroeder)撰写的出色博客文章:The Launch At Login Sandbox Project实际上或多或少都是从那里完全借来的-好像我只需要更改那里的日志消息和字符串,所以如果我从不拧紧它的话,它会坚如磐石。

我与那篇文章的不同之处在于,应该没有“帮助”应用程序

,即使您希望该应用程序在登录时没有GUI的情况下启动。没必要如果您希望您的应用程序具有登录时或关闭用户界面时运行的后台模式,则应将应用程序切换为附件模式,例如detailed in my answer here.。您无需处理子项目并编译单独的可执行文件。只要一个。

无论如何,Tim非常有用的代码。它在首选项面板上使用分段控件来打开/关闭应用程序。 segmentedControl值使用可可绑定将控件值绑定到NSUserDefaults,因此,在这里所看到的就是将应用程序注册/注销为登录项,并进行错误检查/警告。

- (IBAction)toggleRunAtLogin:(NSSegmentedControl*)sender {
    NSLog(@"toggling run at login");
    NSUInteger clickedSegment = [sender selectedSegment];
    if (clickedSegment == 0) { // ON
        // Turn on launch at login
        NSLog(@"... to ON");
        if (!SMLoginItemSetEnabled ((__bridge CFStringRef)@"com.yourCo.yourApp", YES)) {
            NSAlert *alert = [NSAlert alertWithMessageText:@"An error ocurred"
                                             defaultButton:@"OK"
                                           alternateButton:nil
                                               otherButton:nil
                                 informativeTextWithFormat:@"Couldn't add App to launch at login item list."];
            [alert runModal];
        }
    }
    if (clickedSegment == 1) { // OFF
        // Turn off launch at login
        NSLog(@"... to OFF");
        if (!SMLoginItemSetEnabled ((__bridge CFStringRef)@"com.yourCo.yourApp", NO)) {
            NSAlert *alert = [NSAlert alertWithMessageText:@"An error ocurred"
                                             defaultButton:@"OK"
                                           alternateButton:nil
                                               otherButton:nil
                                 informativeTextWithFormat:@"Couldn't remove App from launch at login item list."];
            [alert runModal];
        }
    }
}

1
投票

此示例的一个很好的例子可以在https://github.com/nfarina/feeds/blob/master/Feeds/LoginItems.m中找到


0
投票

我找到了解决方案谢谢

© www.soinside.com 2019 - 2024. All rights reserved.