SMLoginItemSetEnabled (…) GET-Gegenstück

  • Um bei Sandbox-Apps ein Startelement zu erstellen, empfiehlt Apple die Verwendung von LSRegisterURL(..) und SMLoginItemSetEnabled(..) zusammen mit einem Hilfsprogramm. Ich habe alles so eingerichtet, wie ich es möchte, aber ich möchte einen Weg (keinen Präferenzwert speichern), um den Status "Wenn es registriert ist" zu erhalten. Im Grunde eine Möglichkeit, dieselbe Aktion auszuführen wie SMLoginItemGetEnabled(...).

    BEARBEITEN: Hier ist mein endgültiger Code dank Rob Kenigers Antwort:

     - (BOOL)startAtLogin {
        NSDictionary *dict = (NSDictionary*)SMJobCopyDictionary(kSMDomainUserLaunchd, 
                                                                CFSTR("com.yourcompany.app"));
        BOOL contains = (dict!=NULL);
        [dict release];
        return contains;
    }
     
    03 October 2014
    Bryan Chen
2 answers
  • Die akzeptierte Antwort funktionierte nicht für mich. Dieses Blog sagt "// Note: Sandbox issue when using SMJobCopyDictionary()", was das Problem sein muss. Wenn Sie also Probleme mit der akzeptierten Antwort hier in der Sandbox haben, probieren Sie diese Methode aus. Für mich arbeiten.

    Alles Gute an Mike Cohen für das. Weitere Informationen finden Sie in seinem Blogeintrag:

    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;
    }
     
    06 October 2012
    cksubs
  • Ich denke, Sie könnten SMCopyAllJobDictionaries(kSMDomainUserLaunchd) verwenden, um ein Array mit Wörterbüchern für alle derzeit aktiven launchd -Jobs zu erhalten.

    Entsprechend den Dokumenten rufen Sie SMLoginItemSetEnabled() Der betreffende Job wird sofort gestartet. Wenn sich Ihre Anmeldeaufgabe nicht in der von SMCopyAllJobDictionaries() zurückgegebenen Liste befindet, können Sie vermutlich davon ausgehen, dass sie nicht beim Anmelden ausgeführt wird.

    22 November 2011
    Rob Keniger