Start beim Login - ein leidiges Thema

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Start beim Login - ein leidiges Thema

    Huhu.
    Ich habe eine Frage bezüglich dem leidigen Thema "autostart".

    So wie es aussieht, gibt es diverse Möglichkeiten dies zu realisieren, aber ich stoße bei allen auf Hindernisse bzw. Designunschönheiten und wollte mal eure Meinung dazu hören.

    Wir hätten da das derzeit offiziell empfohlene SMLoginItemSetEnabled.
    Das funktioniert zuverlässig, jedoch hat es (meines Erachtens) mehrere entscheidende Nachteile:
    1. Ich kann den Status nicht abfragen. Dh ich kann nur den aktuellen Status (an oder aus) in meinen eigenen Einstellungen überwachen, was zu Fehlern führen kann wenn die UserDefaults mal gelöscht werden
    2. Es ist nicht möglich diesen Autostart ohne große Anstrengungen (mir ist es 1x gelungen trotz mehreren Versuchen) oder ohne die eigentliche Applikation zu entfernen. Tut man dies nicht, landen für Ewigkeiten Fehler in den Logs was ich ehrlich gesagt meinen Usern nicht zumuten will.

    Dann wären da noch LaunchItems. Grundlegend schön sauber mit einer Config Datei, die ins App-Bundle auf einen Helper zeigt. Allerdings: Schiebt der Anwender die Applikation woanders hin (ja unwahrscheinlich, kommt aber häufiger vor als man denkt) ist gleich Totalausfall. Die App kann nicht erkennen, ob die App noch im gültigen Pfad liegt.

    Dann gibt es die deprecated LSSharedFileList. Hat die gleichen Probleme wie die LaunchItems mit dem Verschieben der Applikation und ist halt deprecated. (warum auch immer)

    Was habt Ihr denn für Erfahrungen gemacht bzw. was setzt ihr mit welchem Erfolg ein? Ich habe jetzt mit allen drei Methoden die letzten Monate experimentiert und irgendwie ist nie etwas "rundes" herausgekommen.
    Gibt es vielleicht eine Möglichkeit, die ich übersehen habe?

    Danke schonmal für eure Meinungen!
  • Ich war auch total überrascht, dass Apple nichts vernünftiges mehr anbietet.
    Via AppleScript kommst Du aber an alles und deshalb habe ich mich für die Scripting Bridge entschieden.

    sdef /System/Library/CoreServices/System\ Events.app | sdp -fhm --basename AESystemEvents

    Bei mir beginnen alle Klasse, die von der Scripting Bridge kommen und von Apple sind mit AE.
    Das kannst Du natürlich selbst frei wählen.

    Meinen Wrapper dazu habe ich irgendwo im Forum hochgeladen…

    Viele Grüße
  • Ich hatte das vor einigen Jahren bei einem Timer in den Einstellungen mal so gemachtt :

    Quellcode: test.txt

    1. - (IBAction)toggleLaunchAtStartup:(id)sender
    2. {
    3. LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
    4. NSArray *loginItems = (__bridge NSArray *)LSSharedFileListCopySnapshot(loginItemsRef, nil);
    5. BOOL timerStehtDrin = NO;
    6. LSSharedFileListItemRef itemRef = nil;
    7. for (id item in loginItems)
    8. {
    9. NSString *beschr = [item description];
    10. if ([beschr rangeOfString:@"com.wegmann-burscheid.Timer"].location < 1000)
    11. {
    12. itemRef = (__bridge LSSharedFileListItemRef)(item);
    13. timerStehtDrin = YES;
    14. }
    15. }
    16. if (timerStehtDrin)
    17. {
    18. // das soll geändert werden, d.h. löschen
    19. [loginStartButt setState:NSOffState];
    20. LSSharedFileListItemRemove(loginItemsRef,itemRef);
    21. }
    22. else
    23. {
    24. // das soll geändert werden, d.h. einfügen
    25. [loginStartButt setState:NSOnState];
    26. CFURLRef appUrl = (__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
    27. LSSharedFileListInsertItemURL(loginItemsRef, kLSSharedFileListItemLast, NULL, NULL, appUrl, NULL, NULL);
    28. }
    29. }
    Alles anzeigen

    test.txt

    Wenn man in den Einstellungen des Timer Programmes die IBAction auslöst wird das Programm in den Autostart genommen bzw. wieder rausgeschrieben.

    lg

    Helmut

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von NSObject ()

  • Was hast du für eine App? Wenn es ein Service ist, ergibt die Löschung der Autostart-Eigenschaft i.d.R. wenig Sinn. Wenn du die App über den App Store vertreibst, wird sie i.d.R. der Nutzer sie auch nicht verschieben. Wenn er sie doch verschiebt, selber schuld. Wenn ich mein Bett auf den Balkon stelle, wundere ich mich auch nicht, wenn es bei Regen nass wird. ;) Übrigens verlangt SMLoginItemSetEnabled zwingend, dass sich die App in /Applications oder ~/Applications befindet. Du kannst ja notfalls in der Hilfe oder im FAQ einen entsprechenden Hinweis unterbringen.

    BTW: Die deutsche Bedeutung von butt ist dir bekannt? +scnr+
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Wenn ich mein Bett auf den Balkon stelle, wundere ich mich auch nicht, wenn es bei Regen nass wird.
    Du glaubst nicht, über was sich Nutzer alles wundern können. Beispiel:
    • Benutzer spielt jeden Abend ein Backup seines Preferences-Ordner zurück. Beschwert sich dann, dass unsere Anwendung jeden Abend die Einstellungen "vergisst". Du glaubst nicht, was uns das für graue Haare bereitet hat, weil wir ja von dem Zurückspielen nichts ahnten und annahmen, wir hätten da einen ganz blöden Bug.
    • Schon einige Zeit her, aber auch nicht schlecht: Benutzer hat keine Internetverbindung. Beschwert sich dann, das der Online-Abruf bestimmter Daten nicht funktioniert. Ja, wie denn auch?
    Insofern gehört das Verschieben von Anwendungen schon zum Standardrepertoire. Ebenso das Ignorieren von FAQs, Handbüchern und Warnhinweisen in Dialogen. Ein Segen hingegen ist der Menüpunkt "Benutzte Dokumente" im Ablage-Menü. Erstaunlich wie viele Leute keine Ahnung haben, wo sie was hinspeichern. Ohne das Menü würden das viele gar nicht mehr finden.
  • gandhi schrieb:

    Du glaubst nicht, über was sich Nutzer alles wundern können. Beispiel:


    Benutzer spielt jeden Abend ein Backup seines Preferences-Ordner zurück. Beschwert sich dann, dass unsere Anwendung jeden Abend die Einstellungen "vergisst". Du glaubst nicht, was uns das für graue Haare bereitet hat, weil wir ja von dem Zurückspielen nichts ahnten und annahmen, wir hätten da einen ganz blöden Bug.

    Schon einige Zeit her, aber auch nicht schlecht: Benutzer hat keine Internetverbindung. Beschwert sich dann, das der Online-Abruf bestimmter Daten nicht funktioniert. Ja, wie denn auch?
    Stimmt auch wieder. Fängt bei den Nutzern an, deren Fehlermeldungen Geht nicht oder so lauten. Gegen Blödheit™ ist nun mal kein Kraut gewachsen.

    Wahrscheinlich ist der Start über AppleScript oder der manuelle Eintrag in die Login Items die stabilste Lösung. Ich würde dieses Feature auch deshalb nur in die App einbauen, wenn es ein Dienst ist. Dann würde ich es aber nicht abschaltbar machen.
    „Meine Komplikation hatte eine Komplikation.“
  • @macmoonshine :

    Die App ist rein privater Natur und läuft unter EL Capitan. Es ist ein Timer mit den folgenden Komponenten : Count-Down, einem frei einstellbarem Timer, einem Wecker und einer Stop-Uhr.
    Als Event sind Ausschalten des Rechners, Rechner schlafen schicken, Abspielen eines Liedes, starten einer Play-List oder Starten eines Radiosenders möglich.
    Auch ein Hochfahren des Rechners kann über den Wecker initiiert werden. Hierfür war es halt erforderlich den Timer in den Autostart zu legen.
    Das mit dem Hochfahren funktioniert bei einem Desktop prima, bei einem Notebook nur wenn der an der Stromversorgung hängt.

    Die App befindet sich im Verzeichnis : /Applications/_Eigene

    PS : das mit dem butt kannte ich noch nicht , mußte doch schmunzeln
  • gritsch schrieb:

    wusste auch nicht so recht was er meint, habs dann aber im test.txt gefunden
    Ja, schau mal ins Attachment.

    torquato schrieb:


    macmoonshine schrieb:

    BTW: Die deutsche Bedeutung von butt ist dir bekannt? +scnr+
    Mmmhh... Irgendwie verstehe ich nicht, warum Du das hier im Thread erwähnst. Hab' ich irgendwas übersehen? ?(
    butt ist übrigens eine Abkürzung von buttocks...
    Butt ist aber auch durchaus ein eigenständiges Wort mit einer ähnlichen Bedeutung. Warum Helmut den Status (s)eines Popos ändert, war mir wiederum nicht klar. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    gritsch schrieb:

    wusste auch nicht so recht was er meint, habs dann aber im test.txt gefunden
    Ja, schau mal ins Attachment.

    Ja, ja. Dank @gritsch habe ich es inzwischen auch gesehen und kapiert.

    macmoonshine schrieb:

    torquato schrieb:

    macmoonshine schrieb:

    BTW: Die deutsche Bedeutung von butt ist dir bekannt? +scnr+
    Mmmhh... Irgendwie verstehe ich nicht, warum Du das hier im Thread erwähnst. Hab' ich irgendwas übersehen? ?( butt ist übrigens eine Abkürzung von buttocks...
    Butt ist aber auch durchaus ein eigenständiges Wort mit einer ähnlichen Bedeutung. Warum Helmut den Status (s)eines Popos ändert, war mir wiederum nicht klar. ;)

    Natürlich ist butt ein eigenständiges Wort. Ist halt verkürzend abgeleitet von buttocks, wie z.B. etwa vergleichbar Abi von Abitur, oder eventuell besser Auto von Automobil.

    Ich frage mich eher, warum der Allerwerteste geshared wird. :)
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?