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

时间:2011-04-15 18:59:14

标签: xcode push ios-provisioning settings.bundle

我看过Where does xcode take application's Identifier from?XCode bundle identifier formatting from {PRODUCT_NAME},并加载了更多内容......

我正在尝试推送推送通知并获得可怕的

  

“错误域= NSCocoaErrorDomain代码= 3000”无有效'aps-environment'   为应用程序“UserInfo = 0x15b200找到的权利字符串   {NSLocalizedDescription =没有有效的'aps-environment'权利字符串   找到申请}“错误。

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

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

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

推送证书适用于

XXXXXXXXXX.com.julianbaker.pwcnewsuk

PwCNewUK-Info.plist中的Bundle Indentifier用于

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

如果我手动将其更改为

com.julianbaker.pwcnewsuk

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

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

问题:

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

问题:

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

热爱iPhone的开发,但有时它可能会成为一个headbanger!

19 个答案:

答案 0 :(得分:88)

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

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

来源:Local and Push Notification Programming Guide

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

答案 1 :(得分: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>

将所有这些值添加到我的Entitlements文件后,我的应用程序构建成功,我终于可以回到推送通知。

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

答案 2 :(得分:6)

设置:

Mac OS X 10.8 + Xcode 4.4

我的简单解决方案:

  1. 在为应用程序ID设置推送通知并将其导入Xcode后,重新发布您的临时配置文件。
  2. 查看.xcodeproj文件夹(右键单击 - &gt;显示包内容)并删除xcuserdata文件夹。
  3. 就是这样;)
  4. 该问题的一些提示:

    在为我的应用激活推送通知后,我突然无法再创建临时文件了。我在尝试安装我的应用程序时,在我的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
    

    有一些technical note建议使用codesign -d --entitlements - <YourAppName>.app检查您的应用是否已针对Apple推送通知正确签名。如果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>
    

    使用了codeign之后,我意识到<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将在下次使用适当的设置重新创建它们,您会再次感到高兴。

答案 3 :(得分:5)

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

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

答案 4 :(得分: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文件
  • 确保您已在目标信息中重新分配/分配了正确的证书:代码签名:代码签名身份
  • 仔细检查“构建结果”以使用正确的配置文件查看它并正确签名

平静地重复这些步骤直到它起作用,带走了我的五种各种组合。我也从开发转为Ad-hoc,这显然不是必要的,但确实保证了新的mobileprovision文件。

答案 5 :(得分:3)

在“项目”下 - &gt; '构建设置' - &gt; '代码签名', 确保您选择了正确的配置文件(启用了推送的配置文件)。

这就是我需要改变才能使其发挥作用。

答案 6 :(得分:3)

以上都不适合我!

  1. 删除 Xcode管理器
  2. 中的所有配置文件
  3. 删除钥匙串
  4. 中的所有开发者证书
  5. 删除 iPhone设备
  6. 中的所有配置文件
  7. iOS配置门户中,删除由 Xcode
  8. 自动创建的开发配置文件
  9. 通过分配正确的(证书/ AppID /设备)组合来创建新的配置文件
  10. 下载新的配置文件
  11. 将新配置文件导入 Xcode管理器
  12. CMD + Option + Shift + K
  13. CMD + Shift + K
  14. CMD + R
  15. 万岁:)

答案 7 :(得分:2)

确保您使用配置文件以正确的方式使用该应用。

我的意思是,如果您的应用仅启用了针对分发的推送通知,并且您尝试通过使用XCode构建推送通知,则无法使用。

我遇到了这个问题,通过启用针对App ID的Development的推送通知,然后使用开发配置文件,我不再收到错误,并且询问是否要获取推送通知的正确警报视图。

答案 8 :(得分:1)

10.8 Xcode 4.4的解决方案是 打开appname.entitlements文件

如果DataProtectionClass键的值为NSFileProtectionComplete, 删除它!

删除此密钥允许我在设备上测试来自Xcode的应用程序(它不影响模拟)。

答案 9 :(得分:1)

我遇到了同样的问题。对我来说,修复是这样的:

  1. 从组织者中删除并重新加载配置文件。
  2. 在项目设置 - >代码签名下选择我的命名配置文件。不知怎的,它想要使用blabla。* identity。
  3. 当您尝试运行启用APN的应用程序时,通配符配置文件([prefix]。*)将不会执行,您需要指定启用APN的配置文件。

答案 10 :(得分:0)

确保选择正确。供应资料。我发现我正在尝试使用Team Provisioning配置文件。(用于应用程序标识符:* )在列表的下方,有一个正确的应用程序。

答案 11 :(得分:0)

就我而言,经过数小时修改证书后,这个错误的解决方案变得简单......

在项目配置的Capabilities选项卡中,我必须启用Push Notification标志才能生成环境文件。

macOS Sierra 10.12 - Xcode 8.1

enter image description here

答案 12 :(得分:0)

enter image description here

让个人资料正确,这对我有用。希望得到这个帮助。

答案 13 :(得分:0)

我遇到了这个问题,情节是:

我在没有推送通知支持的情况下设置了应用ID。我正在使用 Xcode 5.1 + iOS 7.1

稍后,编辑应用程序ID以在开发和生产中添加推送通知。

为两者创建了APNs证书。

使用连接到Xcode的设备测试PN时,一切正常。当您将应用程序发布到生产环境时,会出现问题:

"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.

为我工作的解决方案是

  1. 删除开发和分发的配置文件(Xcode和Developer portal)。
  2. 删除您的应用ID(开发人员门户网站)。
  3. 使用推送通知支持开发和生产创建新的App ID。
  4. 使用新应用ID 创建新的配置文件。
  5. 在Xcode上安装它们。
  6. 测试开发和发行版本。

答案 14 :(得分:0)

我的问题是这个。 我创建了已配置推送通知的应用程序,在应用程序委托中,我正在注册推送通知:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

但在发布应用程序之前,我必须在其他开发人员门户网站上创建新的配置文件。我创建了新的App Id,用于开发和分发的新配置,下载了新的配置,在应用程序目标中我设置了正确的配置。我也更改了包标识符。 但我得到了那个错误。

问题是没有为推送通知配置新的AppId,而是调用

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

正在创建错误。 当我配置推送通知时,错误没有再次显示。

答案 15 :(得分:0)

我的解决方案是删除并再次创建开发配置文件。它被列为&#34;无效&#34; - 未过期且续订失败(Xcode 4.3.2和iOS 5.1)

答案 16 :(得分:0)

对我来说,在将包标识符更改为随机内容后,它可以正常工作。确保签名错误确实显示(从组织者和设备中删除所有配置文件并执行干净构建CMD + OPT + SHFT + K然后CMS + SHFT + K然后CMD + R),然后将包标识符更改回适当的。

答案 17 :(得分:0)

我在几个小时之后才知道这一点,所以除了JulianB所说的,

  • 确保您有应用程序图标 。你可能有一个,但我碰巧在图标版本之间添加推送。我尝试了很多不同的东西,最后这就是所有这些,甚至可能都不是证书或签名设置问题。
  • 我还读过一个损坏的图片文件也可能是原因
  • 我没有在我的entitlements.plist
  • 中添加/查看aps-environment密钥
  • 在构建之前清理所有目标

答案 18 :(得分:-2)

实际上您的临时个人资料已从Apple开发者网站上删除。&amp;你得到

的错误