Konfiguration:
Mac OS X 10.8 + Xcode 4.4
Meine einfache Lösung:
- Stellen Sie Ihr Ad-hoc-Bereitstellungsprofil erneut aus, nachdem Sie Push-Benachrichtigungen für Ihre App-ID eingerichtet und in Xcode importiert haben.
- Schauen Sie in Ihren .xcodeproj-Ordner (Rechtsklick -> Paketinhalt anzeigen) und löschen Sie den
xcuserdata
Ordner.
- Das ist es ;)
Einige Hinweise zu diesem Thema:
Nachdem ich Push-Benachrichtigungen für meine App aktiviert hatte, konnte ich plötzlich keine Ad-hoc-Dateien mehr erstellen. Beim Versuch, meine App zu installieren, sind Fehler in meinem Konsolenprotokoll auf meinem iPhone aufgetreten:
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement
Apr 1 20:56:10 unknown installd[384] <Error>: 2ff66000 verify_signer_identity: Could not copy validate signature: -402620394
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 preflight_application_install: Could not verify executable at /var/tmp/install_staging.44jV0O/foo_extracted/Payload/PersonalTrainer-Tester-iPhone.app
Apr 1 20:56:11 unknown com.apple.itunesstored[392] <Notice>: MobileInstallationInstall: failed with -1
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 install_application: Could not preflight application install
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 handle_install: API failed
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_message: failed to send mach message of 71 bytes: 10000003
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_error: Could not send error response to client
Es gibt einige technische Hinweise, in denen empfohlen wird, codesign -d --entitlements - <YourAppName>.app
zu überprüfen, ob Ihre App für Apple Push-Benachrichtigungen ordnungsgemäß signiert ist. Falls für die Ausgabe des Codesign-Befehls keine Aps-Umgebung auf Produktion oder Entwicklung eingestellt ist, ist etwas faul!
Soweit ich bisher wusste, haben meine mit einem Ad-hoc-Bereitstellungsprofil signierten Apps immer einen Ordner embedded.mobileprovision
im <YourAppName>.app
Ordner, in dem sich ein bestimmter Teil befindet, z.
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>ABCDEFGH.com.myappname.tester</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>ABCDEFGH.*</string>
</array>
</dict>
Nachdem ich Codesign verwendet hatte, stellte ich fest, dass in der eigentlichen Binärdatei <YourAppName>.app
auch XML enthalten war, das etwas ganz anderes sagte als meine embedded.mobileprovision
Datei:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>ABCDEFGH.com.myappname.tester</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>ABCDEFGH.com.myappname.tester</string>
</array>
</dict>
</plist>
Ich gehe davon aus, dass dies die Ursache für die Fehlermeldung ist, die wir alle haben. (obwohl dieser Fehler einige andere Wurzeln haben kann, wie auch andere Beiträge im Stapelüberlauf vermuten lassen)
The executable was signed with invalid entitlements.
The entitlements specified in your application's Code Signing Entitlements
file do not match those specified in your provisioning profile. (0xE8008016).
Ich vermute, dass es in Xcode einen Fehler gibt, der verhindert, dass die Einstellungen in Ihrer Liste in Ihren Schemata aktualisiert werden, was dazu führt, dass Ihre App am Ende mit dem falschen Bereitstellungsprofil signiert wird. Wenn Sie also den Ordner xcuserdata löschen, löschen Sie alle Schemata. Daher erstellt Xcode sie beim nächsten Mal mit den richtigen Einstellungen neu und Sie sind wieder glücklich.