Growl XPC-Service Sandboxing Problem

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

  • Growl XPC-Service Sandboxing Problem

    Hallo Forum,

    nach 30-tägiger Wartezeit wurde meine Mac OS X App von Apple abgelehnt. Als Grund für die Rejection wurde angegeben, dass das Sandboxing nicht korrekt implementiert wurde. Anfangs habe ich überhaupt nicht verstanden, womit Apple eigentlich ein Problem hat, da meine App nämlich in der Sandbox läuft (Dateien im Sandbox-Container, Aktivitätsanzeige mit Flag Sandbox Yes, und und und). Nach intensiver Analyse ist mir aber aufgefallen, dass ich ein Problem mit dem Growl-XPC Service habe. Ich habe den XPC-Service von Growl eigentlich extra eingesetzt, da man dabei kein eigenes Networking-Entitlement beantragen muss (und Apple ist momentan ziemlich pingelig was unnötige Entitlements angeht, das kann ich aus eigener Erfahrung berichten). Den Growl XPC-Service habe ich in Xcode aufgenommen wie auf der Growl-Seite beschrieben growl.info/documentation/developer/implementing-growl.php. Der XPC Service wird dabei in einer eigenen Script Build-Phase in Xcode mit meinen Entwickler-Zertifikat per codesign Befehl signiert (Growl stellt dafür ein Ruby Skript zur Verfügung).
    Das Problem ist nun anscheinend folgendes:
    Wenn ich meine App in Xcode per Build-Befehl baue ist alles okay, sowohl meine App als auch der Growl XPC-Service laufen in der Sandbox (überprüft mit der Aktivitätsanzeige Flag Sandbox YES). In diesem Fall zeigt mir das Tool "RB App Checker" (itunes.apple.com/de/app/rb-app…er-lite/id519421117?mt=12) auch an, dass sowohl meine App als auch der XPC-Service korrekt signiert sind und die richtigen Sandbox-Entitlements haben. Aber, wenn ich meine App über den Archive-Befehl baue sieht die Sache leider anders aus. Exportiere ich die archivierte App anschliessend im Archiver als Installer-Package, dann verliert der XPC-Service die korrekten Sandbox-Entitlements. Der XPC-Service ist dann nur noch signiert, besitzt aber keine Sandbox-Entitlements mehr und wird von OS X auch nicht mehr in der Sandbox ausgeführt. Ich glaube, dass das mit dem Resigning im Archiver zusammenhängt. Beim Exportieren (Distribute->Export->Mac Installer Package) kann ich das Resigning ja noch verhindern, aber beim Submit zum Mac App Store anscheinend nicht.
    Hat irgendjemand von Euch eine Idee, wie ich beim Submit zum Mac App Store verhindern kann, dass der XPC-Service seine Sandbox-Entitlements verliert? Ich habe schon mit Code-Signing Rules experimentiert, allerdings leider erfolglos. Irgendwie komm ich da momentan nicht weiter. Überlege schon, ob ich Growl nicht ganz rausschmeissen soll, aber das würde ziemlich viele meiner User verägern (obwohl, die sind eigentlich schon verärgert, weil das versprochene Update einfach nicht durch den Review mit seinen Monster-Wartezeiten kommt).
  • Ich habe exakt das selbe Problem und das hier ist das erste Anzeichen dafür, dass dieser Fehler nicht nur bei mir auftritt.
    Das Resigning beim Submitten entfernt tatsächlich die alten Entitlements und ersetz sie durch neue, die allerdings nicht die Sandbox aktivieren. Während des Submittens kann man diese neuen Entitlements irgendwo tief im temp Verzeichnis sehen.

    Folgender Prozess läuft während des resignings:
    /usr/bin/codesign --sign (...) --force --preserve-metadata=identifier,entitlements,resource-rules --entitlements /var/folders/(...)GNTPClientService.xpc.plistILd (...)GNTPClientService.xpc --requirements (...)


    Entweder codesign funktioniert hier nicht so wie es soll (preserve-metedata=...entitlements sollte ja die entitlements erhalten) oder aber die neue Version von XCode fügt erstmals neue Entitlements hinzu was dazu führ, dass das preserve ignoriert wird. ES scheint sich also tatsächlich um einen Fehler von Apple zu handen. Doof nur, dass ein simples Bugfix Update jetzt mehrmals rejected wurde...
  • felix_planb schrieb:

    Ein Downgrade auf XCode Version 4.4.1 aus der Time Machine bestätigt den Verdacht. Das --entitlements fehlt dort im Aufruf von codesign.
    Ich werde jetzt mit dieser Version resubmitten und mal schauen, was passiert...
    Hi Felix,
    vielen Dank für Deine Antwort. Ich habe momentan keinen Zugriff auf ältere Xcode-Versionen, werde aber in den nächsten Tagen mal ausprobieren, ob das Problem bei Xcode 4.4.1 nicht auftritt.

    Gibt es denn keine Möglichkeit das Resigning in Xcode beim Submit/Distribute zu parametrieren? Warum muss denn überhaupt das Resigning beim Submitten der App ausgeführt werden? Welchen Sinn hat das, die App wird doch schon durch den Archive-Build signiert? Doppelt hält besser?

    Eigentlich könnte ich die App doch über den Application Loader zu Apple hochladen!? Das Installer-Package kann ich ja ohne Resign im Organizer->Archive->Distribute exportieren und anschließend über den Application-Loader submitten. Oder führt der Application Loader auch einen Resign aus?
  • Zur Info:
    Ich habe gerade eben meine App mit dem Application Loader zu iTC hochgeladen.

    Das Installer Package habe ich zuvor mit folgendem Befehl erzeugt:

    Quellcode

    1. productbuild --component MeineApp.app "/Applications" --sign "3rd Party Mac Developer Installer: Genervter Mac Entwickler" MeineApp.pkg



    Das mit productbuild erzeugte Package habe ich vor dem Upload noch mit dem Tool "RB App Checker Lite" auf korrekte Signierung überprüft. Alle Helper-Apps (also auch der Growl XPC-Service) sind korrekt signiert und haben alle nötigen Sandbox Entitlements.
    Wenn der Application Loader daran jetzt wieder nicht rumgefummelt hat, sollte das Sandboxing diesmal korrekt implementiert sein.


    Das Einzige was mir jetzt noch aufgefallen ist, ist dass die Growl Library in meinem neuen manuell erzeugten Package weiterhin von Growl signiert ist. Wenn ich das Installer Package von Xcode erzeugen lasse, ist das anschließend auch von mir signiert und nicht mehr von Growl. Aber eigentlich ist es doch richtig, wenn die Growl Library weiterhin die Growl Signatur trägt, schließlich haben die das auch entwickelt und nicht ich?!


    Bin sauer und schon gespannt auf meine nächste Rejection X(
  • Die mit dem Application Loader hochgeladene Version wurde mittlerweile von Apple gereviewed. An der Implementierung von Sandboxing wurde nichts mehr bemängelt, der XPC-Service ist nun also anscheinend korrekt signiert. Echt ärgerlich, dass Mac Apps nun auch schon aufgrund von Xcode-Bugs rejected werden.


    Allerdings weigert sich Apple nun ein temporäres Entitlement zu gewähren, die App wurde also erneut rejected. Toll, das Problem hätten sie mir auch schon bei der letzten Rejection mitteilen können. Diese aktuelle Salami-Taktik bei den Mac App Reviews nervt echt extrem.