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).
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).