Wie kann ich verhindern, dass eine App bei der Anmeldung gestartet wird?

Ich habe eine App erstellt, die sich selbst so einstellt, dass sie bei der Anmeldung mit gestartet wird SMLoginItemSetEnabled. Hier ist der verwendete Code. Meine Frage ist, wie kann ich diese App manuell vom Start bei der Anmeldung entfernen ?

Die App wird nicht unter „Anmeldeobjekte“, oder /Library/LaunchAgents, oder /Library/LaunchDaemonsoder in den Ordnern /Users/username/Library/LaunchAgents, oder angezeigt. /Users/username/Library/LaunchDaemonsIch habe mich in /Library/Preferencesund umgesehen PreferecePanes, aber nichts gefunden. Die App lädt beim Login.

Wenn Sie die App (von der Festplatte) entfernen, was sagt die Konsole?
Wenn ich die App entferne (auch wenn sie nicht ausgeführt wird), kann ich sie in den Papierkorb verschieben, aber wenn ich versuche, den Papierkorb zu leeren, wird die App nicht gelöscht.
Hast du dafür jemals eine Lösung gefunden? Fragt sich genauso.
Scheint, als wären einige hier aufgelistet: /var/db/com.apple.xpc.launchd/disabled.$UID.plist

Antworten (5)

Sie können das Starten des Elements mit stoppen .launchctl disable gui/$UID/bundle-id

Wenn Sie die Paket-ID nicht kennen, können Sie sie finden, indem Sie eingeben launchctl list. Dadurch werden alle Prozesse aufgelistet, die unter Ihrem Benutzer ausgeführt werden, mit ihren PIDs in der ersten Spalte. Also, wenn Sie das gesehen haben:

$ launchctl list
-   0   com.apple.SafariHistoryServiceAgent
277 0   com.apple.Finder
-   0   com.apple.quicklook
-   0   com.apple.parentalcontrols.check
[…]
189 0   com.example.ExampleDaemon
-   0   com.apple.java.InstallOnDemand

…können Sie Activity Monitor verwenden, um zu bestätigen, dass die PID der unerwünschten App 189 ist, was ihre Bundle-ID ergibt com.example.ExampleDaemon. Dann:

launchctl disable gui/$UID/com.example.ExampleDaemon

Das ist es. Es gibt immer noch eine Aufzeichnung des Anmeldeobjekts auf der Festplatte, nur deaktiviert. Wenn Sie es löschen oder einfach nur mehr erfahren möchten, lesen Sie weiter.


Entgegen der Intuition (aber amüsant?) wird die Liste hier gespeichert:

/var/db/com.apple.xpc.launchd/disabled.$UID.plist

Diese Datei sieht in etwa so aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.example.ExampleDaemon</key>
    <false/>
</dict>
</plist>

Ja, das falsebedeutet, dass eine App mit dieser Bundle-ID beim Start gestartet werden sollte . Nach dem Ausführen launchctl disableändert falsesich das in ein true. (Soweit ich das beurteilen kann, schreibt launchd diese Dateien nicht sofort, sodass Sie dies möglicherweise erst nach einem Neustart sehen.) Sie können die deaktivierten Elemente mit diesem Befehl anzeigen:

launchctl print-disabled gui/$UID

Es gibt auch einige zusätzliche Informationen zu jedem Anmeldeobjekt, das hier gespeichert ist, aber das Entfernen wird das Starten des Objekts nicht verhindern:

/var/db/com.apple.xpc.launchd/loginitems.$UID.plist

Alle Änderungen, die Sie während des Betriebs des Systems vornehmen, werden beim Herunterfahren/Neustart überschrieben. Soweit ich das beurteilen kann, besteht die einzige Möglichkeit zum vollständigen Entfernen eines Elements disabled.$UID.plistdarin, im Einzelbenutzermodus neu zu starten und dort die Änderungen vorzunehmen. Auch ohne ausgeführt zu haben launchctl disable, verhindert das Entfernen eines key/ false-Paars aus dieser Datei, dass die App bei der Anmeldung gestartet wird. Ich werde in dieser Antwort keine Anweisungen zum Bearbeiten dieser Dateien im Einzelbenutzermodus enthalten.

Sie sollten in der Lage sein, den Helfer von launchdder Befehlszeile aus zu stoppen und zu entfernen. Öffnen Sie Terminal.app und tun Sie es

launchctl list | grep -i com.your.helper

Sehen Sie, sobald Sie das job_label in der dritten Spalte gefunden haben, können Sie es ausführen

sudo launchctl stop com.your.helper
sudo launchctl remove com.your.helper

Die Anleitung launchctldazu finden Sie hier

Und wenn Sie es mit einem Helfer hinzugefügt haben, wie Sie sagten, sollten Sie es in der Plist sehen können (glaube ich).

Schau dir das an:

-(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;
}

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

Danke für die Antwort Martin. Aber ich suche nach einer Möglichkeit, es manuell zu entfernen (ohne die Verwendung eines Programms). Wo wird diese PList-Datei auf dem System gespeichert?
Oh kein Problem. Der Grund, warum ich den Code hinzugefügt habe, ist, um zu sehen, was er tut. Es muss vielleicht im Sanbox-Verzeichnis Ihrer App sein … aber ich habe nie darüber nachgedacht. Ich werde es mir ansehen

Anmeldeobjekte werden in ~/Library/Preferences/com.apple.loginitems.plist gespeichert und können manuell in den Systemeinstellungen -> Benutzer & Gruppen -> Ihr Benutzerkonto in der Seitenleiste -> Registerkarte Anmeldeobjekte verwaltet werden.

Das ist das Problem. Die App wird nicht unter der Registerkarte Anmeldeobjekte angezeigt und ist dort auch nicht aufgeführt ~/Library/Preferences/com.apple.loginitems.plist!

Wenn ich die App entferne (auch wenn sie nicht ausgeführt wird), kann ich sie in den Papierkorb verschieben, aber wenn ich versuche, den Papierkorb zu leeren, wird die App nicht gelöscht.

Wenn es sich im Papierkorb befindet, starten Sie den Mac im Einzelbenutzermodus neu (starten Sie, während Sie cmd+ gedrückt halten s): Dies wird in einem Terminalfenster geöffnet, führen Sie es aus

sudo rm -Rf ~/.Trash/*

und drücken enterSie , dann normal neu starten.