设定:
Mac OS X 10.8 + Xcode 4.4
我的简单解决方案:
- 在为您的应用程序ID设置推送通知并将其导入到Xcode后,请重新发布临时配置文件。
- 查看您的.xcodeproj文件夹(右键单击->显示软件包内容),然后删除
xcuserdata
文件夹。
- 而已 ;)
关于该问题的一些提示:
在为我的应用程序激活推送通知后,我突然无法再创建临时文件。尝试安装我的应用程序时,我在iPhone的控制台日志中遇到了以下错误:
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
有一些技术说明建议使用codesign -d --entitlements - <YourAppName>.app
用于检查您的应用是否针对Apple Push Notifications正确签名。如果codesign命令的输出没有将aps环境设置为生产或开发,则有些麻烦!
据我所知,使用临时配置文件签名的应用程序始终embedded.mobileprovision
在<YourAppName>.app
文件夹内部,其中包含特定部分,例如:
<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>
使用codesign之后,我意识到其中的实际二进制文件<YourAppName>.app
也包含一些XML,这与我的embedded.mobileprovision
文件说的有些不同:
<!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>
我认为这是导致我们都遇到错误消息的原因。(尽管此错误可能具有一些不同的根源,以及stackoverflow上的其他帖子建议)
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).
我的猜测是Xcode中存在一些错误,这些错误会阻止plist中的设置在您的方案中被更新,从而最终导致您的应用使用错误的配置文件进行签名。因此,通过删除xcuserdata文件夹,您将删除所有方案。因此,Xcode下次将使用正确的设置来重新创建它们,您再次感到高兴。