objective-c - SMLoginItemSetEnabled(...) GET 对应项

标签 objective-c cocoa

对于沙盒应用,要创建启动项,Apple 建议您使用 LSRegisterURL(..)SMLoginItemSetEnabled(..) 以及辅助工具。我已经按照我想要的方式设置了所有内容,但我想要一种方法(不存储首选项值)来获取“如果已注册”的状态。基本上是一种执行与 SMLoginItemGetEnabled(...) 相同操作的方法。

编辑:感谢 Rob Keniger 的回答,这是我的最终代码:

- (BOOL)startAtLogin {
    NSDictionary *dict = (NSDictionary*)SMJobCopyDictionary(kSMDomainUserLaunchd, 
                                                            CFSTR("com.yourcompany.app"));
    BOOL contains = (dict!=NULL);
    [dict release];
    return contains;
}

最佳答案

接受的答案对我不起作用。此博客说“//注意:使用 SMJobCopyDictionary() 时的沙箱问题”,这一定是问题所在。因此,如果您在沙盒中使用此处接受的答案时遇到问题,请尝试使用此方法。为我工作。

这一切都归功于 Mike Cohen。有关更多信息,请参阅他的博客文章:

http://blog.mcohen.me/2012/01/12/login-items-in-the-sandbox/

-(BOOL)appIsPresentInLoginItems
{
    NSString *bundleID = @"com.madebynotion.myLoginHelper";
    NSArray * jobDicts = nil;
    jobDicts = (NSArray *)SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
    // Note: Sandbox issue when using SMJobCopyDictionary()

    if ( (jobDicts != nil) && [jobDicts count] > 0 ) {

        BOOL bOnDemand = NO;

        for ( NSDictionary * job in jobDicts ) {

            if ( [bundleID isEqualToString:[job objectForKey:@"Label"]] ) {
                bOnDemand = [[job objectForKey:@"OnDemand"] boolValue];
                break;
            } 
        }

        CFRelease((CFDictionaryRef)jobDicts); jobDicts = nil;
        return bOnDemand;

    } 
    return NO;
}

关于objective-c - SMLoginItemSetEnabled(...) GET 对应项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219920/

相关文章:

ios - AVAudioEngine 分离 channel

objective-c - XCode 调试器中数组的奇怪描述

iphone - @property(nonatomic)ivar @property(nonatomic,assign)ivar 相同还是不同?

objective-c - 使用 [NSDate date] 获取当前日期和时间

ios - 如何通过添加小时来更改 NSDate 的日期?

objective-c - ARC如何判断是使用retain还是copy呢?

ios - 选择日历以添加 iOS 事件

iphone - 检测用户是否仍保持触摸且未松开

cocoa - 按顺序呈现多个 View - OS X

objective-c - Cocoa 绑定(bind)和宏