Helfer-app für den mac (Login-Element), nicht in der Lage zu kommunizieren, mit
Ich getan habe, genau so, wie der Sandbox-Helfer-App-Beispiel von Apple und alles scheint zu laufen gut. Ich bin in der Lage, erfolgreich ein NSXPCConnection
Objekt-und auch wieder mein remote-Objekt (über remoteObjectProxyWithErrorHandler
).
Aber wenn ich rufe eine Methode auf dem proxy-Objekt (definiert in der Protokoll-definition), bekomme ich wieder diesen Fehler:
Failed to connect to launch agent: Error Domain=NSCocoaErrorDomain Code=4099 "Couldn’t communicate with a helper application.
Im wesentlichen egal, was ich Tue, ich bin nicht in der Lage zu kommunizieren, mit meinem Helfer-app. Ich mache nichts besonderes, nur der Versuch zu machen eine einfache Aufforderung an die Helfer-app, um NSLog() etwas. Aber es funktioniert nicht. Seltsam ich sehe auch nicht ein, jede Ausgabe von inside:
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
Was könnte ich möglicherweise falsch gemacht?
UPDATE:
Scheinbar, wenn ich das Häkchen bei "Aktivieren" App Sandboxing " auf meinem Haupt-app, es funktioniert! So gibt es etwas falsch mit der Aktivierung der Sandbox nach, die Sie nicht wollen, zu kommunizieren, mit meinem Helfer-app. Brauche ich weitere Ansprüche? Ich habe versucht, Sie alle unter xcode!
- Wenn Sie die Konsole öffnen, erhalten Sie eine sandbox-mach-lookup-Verletzung ?
- Nein, aber ich habe eine Lösung gefunden, die unten erklärt werden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Helfer-Anwendung in der Sandbox. Daher kann es nicht registrieren, ein mach-service-dynamisch, obwohl Xcode ermöglicht es für debug-Zwecke.
Jedoch, wenn Sie Ihre Helfer-Anwendung login items (mit SMLoginItemSetEnabled() ), launchd automatisch registrieren Sie sich ein mach-service für Sie mit dem Namen, mit seinem bundle-Bezeichner.
Nun Ihre wichtigste Anwendung in der Sandbox. Daher random-mach-Kommunikation ist nicht gestattet. Der einzige Weg, um es Arbeit war es, fügen Sie einen temporären mach-lookup-Berechtigung.
Seit 10.7.4. Apple hat die Anwendung-Gruppen-Berechtigungen als Lösung für diesen Fall, wo eine Anwendung benötigt, um die Kommunikation mit einem Helfer-app.
Beide Programme teilen sich die gleiche Anwendung-Gruppen-Berechtigung. Es kann ein beliebiger Wert sein, aber Apple verlangt, dass dieser Wert darf starten mit Ihrem Team-ID (e.g: Team-id.myApp). Dann, Ihr Helfer-Programm-bundle-identifier muss beginnen mit dem gleichen Anspruch (e.g-Team-id.myApp.myHelperApp). Danach ist Ihre wichtigste Anwendung kann frei kommunizieren mit Ihren Helfer-Anwendung mit einem XPC Kommunikation mit dem Dienst mit der Hilfsanwendung bundle-Bezeichner (d.h. die Team-id.myApp.myHelperApp). Auch die zwei Anwendungen teilen sich den Zugang zu einem group-container Ordner mit der Anwendung, Gruppe Berechtigung (z.B. ~/Library/Gruppe Container/Team-id.myApp), dass Sie müssen manuell erstellen, wenn Sie es brauchen.
Okay, so habe ich gelernt die harte Art und Weise - es gibt jede Menge Probleme mit dem Sandboxing und XPC, nicht zu erwähnen, Helfer-apps und sharing-Datenbanken über das sogenannte 'shared directory-Gruppe", die weder bekommt automatisch erstellt (wie in der Dokumentation fälschlicherweise sagt) noch nicht
NSURL
bieten die Methode, die Sie angeblich in der Dokumentation.Obwohl die Dokumentation besagt, dass in den Berechtigungen können Sie eine beliebige Zeichenfolge festlegen, wie das 'shared-app-id" im format
<TEAM_ID>.whatever
, anscheinend wird es NUR funktionieren, wenn Sie verwenden Sie das format:<TEAM_ID>.com.yourcompany
Etwas anderes und es wird nicht funktionieren. Er werde kompilieren, er werde archivieren, es wird ausgeführt aber es wird nicht lassen Sie Sie sprechen Sie mit Ihrem Helfer-app. Nachdem wir rund 30 Stunden, die ich dachte, was solls, ich werde versuchen, dass eine Letzte änderung und anscheinend war es! Die Einreichung einer radar-auf die schrecklich geschrieben sandboxing-Dokumentation (die eine Menge auf der Apple Developer-forum beschweren sich über) nächste...