Mac OS X: Beim Start im App Store starten?

8

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?

    
pAK-76 18.07.2012, 07:38
quelle

3 Antworten

16

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

Notizen

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.

>

Projekteinstellungen

Dies sind die Einstellungen meines Projekts, die mit dieser Implementierung perfekt funktionierten.

  1. Erstellen Sie ein neues Projekt mit aktivierter ARC
  2. Sandbox sowohl Ihre Hauptanwendung als auch Ihre Hilfsanwendung (wenn Sie noch keine Hilfsfunktion erstellt haben, werden wir in Kürze darauf zugreifen) Ich habe auch die Codesignierung aktiviert
  3. Da dies nur eine Testanwendung war, hatte ich keine aktiven Berechtigungen für die Hauptanwendung oder den Helfer
  4. Wenn Sie dies noch nicht getan haben, erstellen Sie eine Hilfsanwendung. Gehen Sie zu Ihren Projekteinstellungen und klicken Sie auf "Ziel hinzufügen", wählen Sie eine Cocoa-Anwendung. Benennen Sie etwas wie MyAwesomeProjectHelper auch mit aktivierter ARC. (Ich habe die "App Store Category" leer gelassen)
  5. Wählen Sie nun das Ziel Ihrer Hauptanwendung aus. Gehe zu Build-Phasen - & gt; Bauphase hinzufügen - & gt; Kopiere Dateien hinzufügen.
  6. Ändern Sie das Ziel in Wrapper. Machen Sie den Unterpfad Contents/Library/LoginItems lassen Sie Kopie nur bei der Installation deaktiviert. Ziehen Sie Ihre Hilfsanwendung von Products links in die Tabellenansicht.

Hauptanwendungscode einrichten

  1. Importieren Sie ServiceManagement.framework in Ihre Hauptanwendung (nicht in Ihren Helfer) und fügen Sie #import <ServiceManagement/ServiceManagement.h> in Ihre .h-Datei
  2. ein
  3. Schnapp dir StartAtLoginController von Github. Dies ist eine einfach zu bedienende Klasse von Alex Zielenski, um die Komplikationen beim Hinzufügen, Entfernen und Abfragen von Login-Elementen zu lösen. Importieren Sie StartAtLoginController.h in Ihre h-Datei.
  4. Erstellen Sie die gewünschte Schnittstelle, um diese Einstellung zu steuern. Wenn Ihre Anwendung dies automatisch aktiviert, wird sie im Mac App Store abgelehnt (gemäß Richtlinie 2.26)
  5. Implementieren Sie eine Methode wie - (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.
  6. Implementieren Sie ähnlichen Code in Ihrer .m-Datei.

    %Vor%
  7. 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.

Hilfsprogramm-Anwendungscode einrichten

Stellen Sie sicher, dass Sie diesen Code mit Ihrer Implementierung gründlich testen.

  1. Machen Sie Ihre Hilfsanwendung zu einem UIElement, indem Sie standardmäßig zu HelperApp.plist in der Gruppe "Unterstützende Dateien" navigieren. Fügen Sie unten eine Zeile mit dem Schlüssel 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
  2. Löschen Sie die Standardmethode - (void)applicationDidFinishLaunching:(NSNotification *)aNotification und ersetzen Sie sie durch - (void)applicationWillFinishLaunching:(NSNotification *)aNotification
  3. 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

  4. Das ist es.

Bereitstellen

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)

    
Keith Smiley 19.07.2012, 12:43
quelle
4

Ich habe gerade ein LoginItem für meine eigene App implementiert und Informationen unter diesen Links nützlich gefunden:

Wie erstelle ich eine Hilfsanwendung für die Mac App, um sie bei der Benutzeranmeldung zu starten?

Ссылка

Ссылка

Ссылка

    
MattR 18.07.2012 13:32
quelle
2

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.

    
ivira 18.07.2012 13:23
quelle

Tags und Links