Ich muss meine App beim Systemstart starten, aber das Problem ist: Es ist bereits im App Store, also muss ich einige Regeln wie Sandboxing befolgen. Dies führt zum Ausfall der gewünschten Funktionen wie LSSharedFileListInsertItemURL und SMLoginItemSetEnabled . Wie soll ich in diesem Fall handeln?
Ich habe kürzlich denselben Prozess durchlaufen, leider ist es beim Sandboxing nicht annähernd so einfach wie früher. Ich habe eine Testanwendung mit sehr detaillierten Anweisungen erstellt, die jetzt auf Github
ist Diese Demo-Anwendung und Ihre Anwendung funktionieren nur, wenn sie bereitgestellt werden vorzugsweise in /Applications/MyGreat.app
und nicht funktionieren zuverlässig aus dem Xcode-Debug-Ordner.
Dies sind die Einstellungen meines Projekts, die mit dieser Implementierung perfekt funktionierten.
Contents/Library/LoginItems
lassen Sie Kopie nur bei der Installation deaktiviert. Ziehen Sie Ihre Hilfsanwendung von Products links in die Tabellenansicht. #import <ServiceManagement/ServiceManagement.h>
in Ihre .h-Datei StartAtLoginController.h
in Ihre h-Datei. - (IBAction)checkChanged:(id)sender
Ich habe ein einfaches Kontrollkästchen erstellt, das an die StandardUserDefaults gebunden ist. (Wenn Sie sich für etwas anderes entschieden haben, kann Ihre Implementierung davon abweichen.) Ich habe das Kontrollkästchen auch an IBOutlet NSButton *loginCheck;
gebunden, um dessen Status zu bestimmen. Dies könnte auch durch [[NSUserDefaults standardUserDefaults] boolForKey:YourKey]
erfolgen.
Implementieren Sie ähnlichen Code in Ihrer .m-Datei.
%Vor%Das ist es. Wie Sie in diesem Projekt sehen können, gibt es einige andere Methoden, die Sie verwenden möchten, wie:
%Vor%Zum Überprüfen, nachdem Sie die Einstellung aktiviert oder deaktiviert haben, um sicherzustellen, dass sie korrekt funktioniert hat. Oder das:
%Vor%Etwas tun, wenn der Login-Helfer aktiviert ist.
Stellen Sie sicher, dass Sie diesen Code mit Ihrer Implementierung gründlich testen.
Application is agent (UIElement)
und YES
als Wert hinzu (dadurch wird verhindert, dass die Anwendung jedes Mal ein Dock-Icon blinkt, wenn der Benutzer den Start bei der Anmeldung aktiviert) Ich habe auch alles außer der App gelöscht Delegieren Sie im Interface Builder
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
und ersetzen Sie sie durch - (void)applicationWillFinishLaunching:(NSNotification *)aNotification
Implementieren Sie in dieser Methode einen ähnlichen Code.
%Vor%Dieser Code findet Ihre Hauptanwendung, bestimmt seine binäre ausführbare Datei (erforderlich, um die Anwendung innerhalb der Sandbox zu starten) öffnet Ihre Anwendung und beendet dann
Das letzte, was Sie tun sollten, wenn Sie Ihre Anwendung für sich selbst oder den Mac App Store bereitstellen, ist das Entfernen Ihrer Helper-App von den archivierten Elementen. Navigieren Sie dazu zum Ziel Ihrer HelperApp - & gt; Buildeinstellungen - & gt; Überspringen Sie Installieren und setzen Sie Ja für Freigabe. Apple bietet weitere Informationen unter (http://developer.apple.com/library/ios/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/000-About_Xcode/about.html)
Für Sandbox-Anwendungen müssen Sie eine spezielle Login-Objekt-Hilfsanwendung (in Contents / Library / LoginItems) erstellen. Weitere Informationen finden Sie unter hier . Beachten Sie auch, dass Ihre App aus dem Ordner / Applications gestartet werden muss, damit das Login-Element ordnungsgemäß funktioniert.
Tags und Links objective-c macos cocoa