捆绑标识符和推送证书... aps-environment权利错误

Jul*_*anB 68 xcode push settings.bundle ios-provisioning

我已经阅读了xcode从哪里获取应用程序的标识符?,来自{PRODUCT_NAME}的XCode包标识符格式,并加载更多但......

我正在尝试推送推送通知并让人感到害怕

"Error Domain = NSCocoaErrorDomain Code = 3000"找不到有效的'aps-environment'权利字符串,用于应用程序"UserInfo = 0x15b200 {NSLocalizedDescription = no valid'atps-environment'权利字符串找到应用程序}"错误.

我很确定我已经正确地遵循了所有步骤,包括:

  • 在提供证书之前完成推送证书
  • 制作了'Entitlements.plist'
  • 添加了一个get-task-allow布尔值并将其设置为true(ad-hoc release)

唯一认为我无法理解的是Bundle Identifier

推送证书适用于

XXXXXXXXXX.com.julianbaker.pwcnewsuk
Run Code Online (Sandbox Code Playgroud)

PwCNewUK-Info.plist中的Bundle Indentifier用于

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}
Run Code Online (Sandbox Code Playgroud)

如果我手动将其更改为

com.julianbaker.pwcnewsuk
Run Code Online (Sandbox Code Playgroud)

我得到一个UDID不匹配错误,因为该应用程序被视为PwCNewsUK

当我用谷歌搜索这个问题似乎有些混乱,但它似乎必须匹配?

题:

Bundle Indentifer应该与
XXXXXXXXXX.com.julianbaker.pwcnewsuk 的推送证书相匹配?

题:

我是否需要为配置文件添加"aps-environment"权利,如果是,在何处以及如何添加?(参见http://www.airplaysdk.com/node/3174等)

喜欢iPhone开发,但有时它可能是一个headbanger!

J.R*_*ong 88

当我从一个开发环境转移到我正在处理的应用程序上的生产环境时,我发现了这个问题.此过程涉及创建新配置文件,新应用程序ID等.我创建了应用程序ID和配置文件,但团队代理必须配置推送通知.当我尝试使用新配置文件恢复测试时(在为推送通知配置应用程序之后),我遇到了"为应用程序找不到有效'aps-environment'权利字符串"的问题.然后我记得在文档中读到一点警告:

"您必须以某种方式修改配置文件(例如,切换选项)以便门户生成新的配置文件.如果配置文件不那么"脏",您将获得没有推送权限的配置文件. "

来源:本地和推送通知编程指南

对我来说,"弄脏"供应配置文件并重新安装它是解决问题所需的全部内容.根据文档,这是必需的,因为配置文件是在为推送通知配置应用程序之前创建的.这可能会或可能不会帮助任何人,但这可能解释(并消除)手动向配置文件添加任何内容的需要.

  • 完全为我工作,谢谢!苹果开发网站工作如此糟糕,这绝对是不可接受的. (16认同)

ozz*_*ozz 20

我遇到了相同的"无效'aps-environment'权利字符串找到应用程序"问题,但上述解决方案对我不起作用.

我找不到关于这个错误甚至只是关键"aps-environment"的非常好的文档.

经过一些修修补补,这就解决了我的问题:

使用文本编辑器打开开发配置证书"Appname.mobileprovision",查找密钥"Entitlements",然后将此处找到的所有值添加到Code Signing Entitlements设置引用的Entitlements文件中.

以下是您可以在其中找到的键/值的示例:

<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>
<array>
<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>
<array>
<string>xyz.*</string>
</array>
Run Code Online (Sandbox Code Playgroud)

将所有这些值添加到我的Entitlements文件后,我的应用程序成功构建,我终于可以回到Push Notifications上.

我不确定这些值是否应该由XCode自动添加到您的权利文件中,但它们肯定不会在我的项目中为我生成.

  • 这是正确的答案.解决方案只是将.mobileprovision文件中的值复制到Entitlements文件中.我希望Apple在某处记录这一点.如果在执行此操作后继续收到错误,请重新启动XCode.这为我解决了这个问题. (2认同)

vin*_*ber 6

建立:

Mac OS X 10.8 + Xcode 4.4

我的简单方案:

  1. 在为应用程序ID设置推送通知并将其导入Xcode后,重新发布您的临时配置文件.
  2. 查看.xcodeproj文件夹(右键单击 - >显示包内容)并删除该xcuserdata文件夹.
  3. 而已 ;)

关于该问题的一些提示:

激活我的应用程序的推送通知后,我突然无法再创建临时文件.我尝试安装我的应用程序时,在我的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
Run Code Online (Sandbox Code Playgroud)

有一些技术说明建议codesign -d --entitlements - <YourAppName>.app用于检查您的应用是否已正确签署Apple推送通知.如果codesign命令的输出没有设置为生产或开发的aps环境,那就有些可疑了!

据我所知,到目前为止,我使用adhoc配置文件签名的应用程序总是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>
Run Code Online (Sandbox Code Playgroud)

在使用了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>
Run Code Online (Sandbox Code Playgroud)

我认为这是我们遇到的错误消息的原因.(虽然这个错误可能有一些不同的根源以及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).
Run Code Online (Sandbox Code Playgroud)

我的猜测是Xcode中存在一些错误,它会阻止你的plist中的设置在你的方案中更新,这会导致你的应用程序最终使用错误的配置文件进行签名.因此,通过删除xcuserdata文件夹,您可以删除所有方案.因此,Xcode将在下次使用适当的设置重新创建它们,您会再次感到高兴.


Jul*_*anB 5

基本上答案是其他人都说的同样模糊的答案

  • 确保添加了"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文件.


Max*_*den 5

使用XCode4并接收为应用程序找到的相同"无效'aps-environment'权利字符串"我必须执行以下操作:

  • 从管理器中的"库+设备"面板中删除旧的配置文件
  • 通过开发人员门户网站启用APN dev重新生成新配置文件
  • 确保将新配置文件添加到管理器中的"库+设备"面板
  • 从我的设备上手动删除我的应用程序(直到它摇晃并击中X)
  • CMD + OPT + SHIFT + K(清洁构建文件夹)和CMD + SHIFT + K(清洁)
  • 在项目>构建设置>代码签名下设置正确的配置文件
  • 确保未在"目标">"摘要"下选中"使用权利"