Bundle Identifier and push certificate… aps-environment entitlement error
我已经阅读了xcode从哪里获取应用程序标识符? ,来自{PRODUCT_NAME}的XCode包标识符格式,并加载更多但......
我正在尝试推送推送通知并让人感到害怕
"Error Domain=NSCocoaErrorDomain Code=3000"no valid 'aps-environment'
entitlement string found for application" UserInfo=0x15b200
{NSLocalizedDescription=no valid 'aps-environment' entitlement string
found for application}" error.
我很确定我已经正确地遵循了所有步骤,包括:
- 在提供证书之前完成推送证书
- 制作了'Entitlements.plist'
- 添加了一个get-task-allow布尔值并将其设置为true(ad-hoc release)
唯一认为我无法理解的是Bundle Identifier
推送证书适用于
1 | XXXXXXXXXX.com.julianbaker.pwcnewsuk |
PwCNewUK-Info.plist中的Bundle Indentifier用于
1 | com.julianbaker.${PRODUCT_NAME:rfc1034identifier} |
如果我手动将其更改为
1 | com.julianbaker.pwcnewsuk |
我得到一个UDID不匹配错误,因为该应用程序被视为PwCNewsUK
当我用谷歌搜索这个问题似乎有些混乱,但它似乎必须匹配?
题:
Bundle Indentifer应该与推送证书相匹配
XXXXXXXXXX.com.julianbaker.pwcnewsuk?
题:
我是否需要为配置文件添加"aps-environment"权利,如果是,在何处以及如何添加? (参见http://www.airplaysdk.com/node/3174等)
喜欢iPhone开发,但有时它可能是一个headbanger!
当我从一个开发环境转移到我正在处理的应用程序上的生产环境时,我发现了这个问题。此过程涉及创建新配置文件,新应用程序ID等。我创建了应用程序ID和配置文件,但团队代理必须配置推送通知。当我尝试使用新配置文件恢复测试时(在为推送通知配置应用程序之后),我遇到了"找不到应用程序的无效'aps-environment'权利字符串"的问题。然后我记得在文档中读到一点警告:
"您必须以某种方式修改配置文件(例如,切换选项)以便门户网站生成新的配置文件。如果配置文件不那么"脏",您将获得没有推送权限的配置文件。"
来源:本地和推送通知编程指南
对我来说,"弄脏"供应配置文件并重新安装它是解决问题所需的全部内容。根据文档,这是必需的,因为配置文件是在为推送通知配置应用程序之前创建的。这可能会或可能不会帮助任何人,但这可能解释(并消除)手动向配置文件添加任何内容的需要。
我遇到了相同的"无效'aps-environment'权利字符串找到应用程序"问题,但上述解决方案对我不起作用。
我找不到关于这个错误甚至只是关键"aps-environment"的非常好的文档。
经过一些修修补补,这就解决了我的问题:
使用文本编辑器打开开发配置证书"Appname.mobileprovision",查找密钥"Entitlements",然后将此处找到的所有值添加到Code Signing Entitlements设置引用的Entitlements文件中。
以下是您可以在其中找到的键/值的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <key>application-identifier</key> <string>xyz.com.xyz.xyz</string> <key>aps-environment</key> <string>development</string> <key>com.apple.developer.ubiquity-container-identifiers</key> <string>xyz.*</string> </array> <key>com.apple.developer.ubiquity-kvstore-identifier</key> <string>xyz.*</string> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <string>xyz.*</string> </array> |
将所有这些值添加到我的Entitlements文件后,我的应用程序成功构建,我终于可以回到Push Notifications上。
我不确定这些值是否应该由XCode自动添加到您的权利文件中,但它们肯定不会在我的项目中为我生成。
设定:
Mac OS X 10.8 + Xcode 4.4
我的简单方案:
关于该问题的一些提示:
激活我的应用程序的推送通知后,我突然无法再创建临时文件。我尝试安装我的应用程序时,在我的iPhone上的控制台日志中遇到错误:
1 2 3 4 5 6 7 8 9 10 | 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 |
有一些技术说明建议使用
据我所知,到目前为止,我使用adhoc配置文件签名的应用程序在
1 2 3 4 5 6 7 8 9 10 11 12 13 | <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> <string>ABCDEFGH.*</string> </array> </dict> |
在使用了codesign之后,我意识到
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!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> <string>ABCDEFGH.com.myappname.tester</string> </array> </dict> </plist> |
我认为这是我们遇到的错误消息的原因。 (虽然这个错误可能有一些不同的根源以及stackoverflow上的其他帖子建议)
1 2 3 | 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将在下次使用适当的设置重新创建它们,您会再次感到高兴。
使用XCode4并接收为应用程序找到的相同"无效'aps-environment'权利字符串"我必须执行以下操作:
- 从管理器中的"库+设备"面板中删除旧的配置文件
- 通过开发人员门户网站启用APN dev重新生成新配置文件
- 确保将新配置文件添加到管理器中的"库+设备"面板
- 从我的设备上手动删除我的应用程序(直到它摇晃并击中X)
- CMD + OPT + SHIFT + K(清洁构建文件夹)和CMD + SHIFT + K(清洁)
- 在项目>构建设置>代码签名下设置正确的配置文件
- 确保未在"目标">"摘要"下选中"使用权利"
基本上答案是其他人都说的同样模糊的答案
- 确保添加了"Entitlements.plist"(新文件/代码签名/权利)
- 将"get-task-allow"(布尔值关闭)添加到Entitlements.plist
-
将"aps-environment""production"对添加到Entitlements.plist
- 这最后一步可能是不必要的,但这是我在它工作之前所做的步骤之一 - 从iPhone / iPod删除旧的mobileprovision文件(在"设置"/"常规"中),
- 从XCode Organizer中删除旧的mobileprovision文件
- 从iPhone / iPod删除应用程序
- 退出XCode
- 下载供应证书的新副本
- 使用文本编辑器检查证书中的"aps-environment""production"对
- 启动XCode
- 通过拖动到XCode Doc图标添加新的mobileprovision文件
- 确保在目标信息:代码签名:代码签名标识中重新分配/分配了正确的证书
- 仔细检查Build Results是否正确使用正确的配置文件并正确签名
平静地重复这些步骤直到它起作用,带走了我的五种各种组合。我也从开发转为Ad-hoc,这显然不是必要的,但确实保证了新的mobileprovision文件。
在"项目" - >"构建设置" - >"代码签名"下,
确保选择了正确的Provisioning配置文件(启用了push的配置文件)。
这就是我需要改变才能使其发挥作用。
以上都不适合我!
确保您使用配置文件以正确的方式使用该应用程序。
我的意思是,如果您已启用应用程序仅用于分发推送通知,并且您尝试通过使用XCode构建推送通知,则这将无效。
我遇到了这个问题,并通过为App ID启用推送通知,然后使用开发配置文件我不再收到错误,并且询问是否我想获得推送通知的正确警报视图。
10.8 Xcode 4.4的解决方案是
打开
如果
删除它!
删除此密钥允许我在设备上测试来自Xcode的应用程序(它不会影响模拟)。
我有同样的问题。对我来说,修复是这样的:
当您尝试运行启用APN的应用程序时,通配符配置文件([prefix]。*)将不会执行,您需要指定启用APN的配置文件。
在我的情况下,这个错误的解决方案在经过数小时修补证书后变得简单......
在项目配置的
macOS Sierra 10.12 - Xcode 8.1
我的问题是这个。
我创建了已配置推送通知的应用程序,在应用程序委托中,我正在注册推送通知:
1 | [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; |
但在发布应用程序之前,我必须在其他开发人员门户上创建新的配置文件。我创建了新的App Id,用于开发和分发的新配置,下载了新的配置,在应用程序目标中我设置了正确的配置。我也更改了包标识符。
但我得到了那个错误。
问题是新的AppId没有配置推送通知,而是调用
1 | [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; |
正在创造错误。
当我配置推送通知错误没有再次显示。
我的解决方案是删除并再次创建Development Provisioning Profile。它被列为"无效" - 未过期且续订失败(Xcode 4.3.2和iOS 5.1)
对我来说,在将包标识符更改为随机的后,它可以工作。确保签名错误确实显示(从组织者和设备中删除所有配置文件并执行干净构建
我有这个问题,场景是:
我在没有推送通知支持的情况下设置了应用ID。我正在使用Xcode 5.1 + iOS 7.1
稍后,编辑应用程序ID以在开发和生产中添加推送通知。
为两者创建了APNs证书。
当您使用连接到Xcode的设备测试PN时,一切正常。当您将应用程序发布到生产环境时,会出现问题:
1 2 3 | "Error Domain=NSCocoaErrorDomain Code=3000"no valid 'aps-environment' entitlement string found for application" UserInfo=0x15b200 {NSLocalizedDescription=no valid 'apsenvironment' entitlement string found for application}" error. |
对我有用的解决方案是:
使配置文件正确,这对我有用。希望得到这个帮助。
几个小时后我才知道这个,所以除了JulianB说的话,
- 确保你有一个应用程序图标。你可能有一个,但我碰巧在图标版本之间添加推送。我尝试了很多不同的东西,最后这就是所有这些,所以它甚至可能不是证书或签名设置问题。
- 我也读过一个损坏的图像文件也可能是原因
- 我没有在我的entitlements.plist中添加/查看aps-environment密钥
- 在建造之前清理所有目标
确保选择正确。供应资料。我发现我正在尝试使用Team Provisioning配置文件。(对于应用程序标识符:*)在列表的下方,应用程序中有一个正确的。
实际上你的临时个人资料已经从苹果开发者网站上删除了。你得到的错误