设置:
Mac OS X 10.8 + Xcode 4.4
我的简单解决方案:
- 在为您的应用 ID 设置推送通知并将其导入 Xcode 后,重新发布您的临时配置文件。
- 查看您的 .xcodeproj 文件夹(右键单击 -> 显示包内容)并删除该
xcuserdata
文件夹。
- 而已 ;)
关于这个问题的一些提示:
为我的应用程序激活推送通知后,我突然无法再创建临时文件。在尝试安装我的应用程序时,我在 iPhone 上的控制台日志中遇到了错误,例如:
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'keychain-access-groups' has value not permitted by a provisioning profile
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'get-task-allow' has value not permitted by a provisioning profile
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'application-identifier' has value not permitted by a provisioning profile
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 推送通知正确签名。如果 codesign 命令的输出没有将 aps-environment 设置为生产或开发,那就有问题了!
据我目前所知,使用临时配置文件签名的应用程序始终在文件夹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 将在下次使用正确的设置重新创建它们,您会再次感到高兴。