【问题标题】:Bundle Identifier and push certificate... aps-environment entitlement error捆绑标识符和推送证书... aps-environment entitlement error
【发布时间】:2011-08-06 13:46:25
【问题描述】:

我已经阅读了 Where does xcode take application's Identifier from?XCode bundle identifier formatting from {PRODUCT_NAME} 并加载了更多内容,但是...

我正在尝试让推送通知继续运行并得到可怕的

"错误域=NSCocoaErrorDomain Code=3000"没有有效的'aps-environment' 找到应用程序的授权字符串” UserInfo=0x15b200 {NSLocalizedDescription=没有有效的“aps-environment”授权字符串 发现应用程序}”错误。

我相当肯定我已正确执行所有步骤,包括:

  • 在供应证书之前做好推送证书
  • 制作了一个“Entitlements.plist”
  • 添加了一个 get-task-allow 布尔值并将其设置为 true(临时发布)

我唯一想不通的是捆绑标识符

推送证书用于

XXXXXXXXXX.com.julianbaker.pwcnewsuk

PwCNewUK-Info.plist 中的捆绑标识符用于

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

如果我手动将其更改为

com.julianbaker.pwcnewsuk

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

当我用谷歌搜索时,似乎对此事有些困惑,但似乎它们必须匹配?

问题:

Bundle Indentifer应该是什么来匹配
的推送证书 XXXXXXXXXX.com.julianbaker.pwcnewsuk ?

问题:

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

热爱 iPhone 开发,但它有时会让人头疼!

【问题讨论】:

  • 再深入一点,我发现了第二个问题的答案......苹果应该在 mobileprovision 文件中包含“aps-environment”对,值应该是“开发”或“分发”。显然存在一个错误,在生成证书时有时会忽略这对。通过在文本编辑器中打开文件进行检查
  • 并且应用程序包标识符似乎区分大小写(目标信息窗口的属性窗格中的标识符字段)
  • 这个问题让我想哭

标签: xcode push ios-provisioning settings.bundle


【解决方案1】:

在我的情况下,经过数小时修补证书后,这个错误的解决方案变得很简单......

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

macOS Sierra 10.12 - Xcode 8.1

【讨论】:

    【解决方案2】:

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

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

    来源:Local and Push Notification Programming Guide

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

    【讨论】:

    • 完全为我工作,谢谢!绝对不能接受 Apple 开发网站的工作如此粗制滥造。
    • 是的,它对我有用。每当您更新 App-id 时,请更新您的配置文件。你不会从苹果那里得到任何暗示这样做。但你必须这样做。无需编辑任何 XML 或权利
    • 当我从我的 iPad 上删除我的开发应用程序然后尝试再次运行它时,我遇到了这个问题。我按照说明“弄脏”配置文件,通过管理器重新下载,关闭并打开 xcode,重建和部署,然后它工作了。这是一个蹩脚的解决方法。
    • 这个问题仍然存在,给我带来了几个小时的 CloudKit 问题。检查配置文件显示“aps-environment”密钥丢失我多次重新生成配置文件尝试删除它们无济于事。最终,我设法通过更改应用程序可以访问的 iCloud 容器来弄脏配置文件。虽然有效的配置文件仍然没有 aps-environment 密钥。
    【解决方案3】:

    实际上,您的临时配置文件已从苹果开发者网站中删除。您收到错误

    【讨论】:

      【解决方案4】:

      正确设置个人资料,这对我有用。希望能有所帮助。

      【讨论】:

        【解决方案5】:

        我遇到了这个问题,场景是:

        我设置了一个不支持推送通知的应用程序 ID。我正在使用 Xcode 5.1 + iOS 7.1

        后来,编辑了 app 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 和开发人员门户)。
        2. 删除您的应用 ID(开发者门户)。
        3. 为开发和生产创建具有推送通知支持的新 App ID。
        4. 使用NEW App ID创建新的配置文件。
        5. 在 Xcode 上安装它们。
        6. 测试开发和分发版本。

        【讨论】:

          【解决方案6】:

          确保您通过配置文件以正确的方式使用应用程序。

          我的意思是,如果您已为您的应用启用推送通知仅用于分发,并且您试图通过使用 XCode 构建推送通知来工作,这将不起作用。

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

          【讨论】:

            【解决方案7】:

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

            • 从管理器中的库 + 设备面板中删除旧的配置文件
            • 从开发者门户网站启用 APN 开发并重新生成新配置文件
            • 确保将新配置文件添加到管理器中的库 + 设备面板中
            • 从我的设备上手动删除我的应用(按住直到它晃动并点击 X)
            • CMD+OPT+SHIFT+K(清理构建文件夹)和 CMD+SHIFT+K(清理)
            • 在项目 > 构建设置 > 代码签名下设置正确的配置文件
            • 确保未在 Targets > Summary 下选中“Use Entitlements”

            【讨论】:

              【解决方案8】:

              以上都不适合我!

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

              【讨论】:

                【解决方案9】:

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

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

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

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

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

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

                【讨论】:

                  【解决方案10】:

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

                  1. 从管理器中删除并重新加载了配置文件。
                  2. 在项目设置->代码签名下选择了我命名的配置文件。不知何故,它想使用 blabla.* 身份。

                  当您尝试运行启用 APN 的应用程序时,通配符配置文件 ([prefix].*) 不起作用,您需要指定启用 APN 的配置文件。

                  【讨论】:

                    【解决方案11】:

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

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

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

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        【解决方案13】:

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

                        这就是我需要进行更改才能使其正常工作的全部内容。

                        【讨论】:

                          【解决方案14】:

                          设置:

                          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
                          

                          有一些technical note 建议使用codesign -d --entitlements - &lt;YourAppName&gt;.app 来检查您的应用程序是否为Apple Push Notifications 正确签名。如果 codesign 命令的输出没有将 aps-environment 设置为生产或开发,那就有问题了!

                          据我目前所知,使用临时配置文件签名的应用程序始终在 &lt;YourAppName&gt;.app 文件夹内有一个 embedded.mobileprovision,其中包含特定部分,例如:

                          <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 后,我意识到 &lt;YourAppName&gt;.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 将在下次使用正确的设置重新创建它们,您会再次感到高兴。

                          【讨论】:

                          • 删除 xcuserdata 文件夹为我解决了这个问题!谢谢!
                          • xcuserdata 为我们修复了它,非常感谢!我只需要删除链接到以前控制该项目的用户的地图。
                          【解决方案15】:

                          我的解决方案是删除并重新创建开发配置文件。它被列为“无效” - 未过期且更新失败(Xcode 4.3.2 和 iOS 5.1)

                          【讨论】:

                            【解决方案16】:

                            对我来说,将捆绑标识符更改为随机值后它就起作用了。确保确实显示了签名错误(从管理器和设备中删除所有配置文件并进行干净的构建CMD + OPT + SHFT + K 然后CMS + SHFT + K 然后CMD + R),然后将捆绑标识符更改回适当的标识符。

                            【讨论】:

                              【解决方案17】:

                              我遇到了同样的“没有为应用程序找到有效的'aps-environment'权利字符串”问题,但上述解决方案对我不起作用。

                              我找不到关于这个错误的很好的文档,甚至找不到关键的“aps-environment”。

                              经过一番修补,这就是为我解决问题的方法:

                              使用文本编辑器打开您的开发配置证书“Appname.mobileprovision”,查找密钥“权利”,然后将此处找到的所有值添加到代码签名权利设置所引用的权利文件中。

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

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

                              将所有这些值添加到我的权利文件后,我的应用程序构建成功,我终于可以重新开始处理推送通知了。

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

                              【讨论】:

                              • 这是正确答案。解决方案是将 .mobileprovision 文件中的值复制到您的权利文件中。我希望 Apple 在某处记录这一点。如果执行此操作后仍然出现错误,请重新启动 XCode。这为我解决了问题。
                              • 它也帮助了我。我确信我有相同的值,并尝试了它们的不同组合,但有些不同,复制粘贴解决了它。也许只是键的顺序是相关的。
                              【解决方案18】:

                              几个小时后我才弄明白,所以除了 JulianB 说的,

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

                              【讨论】:

                                【解决方案19】:

                                基本上答案与其他人所说的一样模糊

                                • 确保添加了“Entitlements.plist”(新文件/代码签名/权利)
                                • 将“get-task-allow”(布尔值关闭)添加到 Entitlements.plist
                                • 将“aps-environment”“生产”对添加到 Entitlements.plist -- 最后一步可能是不必要的,但这是我在它起作用之前所做的步骤之一
                                • 从 iPhone/iPod 中删除旧的 mobileprovision 文件(在设置/常规中),
                                • 从 XCode Organizer 中删除旧的 mobileprovision 文件
                                • 从 iPhone/iPod 中删除应用程序
                                • 退出 XCode
                                • 下载供应证书的新副本
                                • 使用文本编辑器检查证书中的“aps-environment”“生产”对
                                • 启动 XCode
                                • 通过拖动到 XCode Doc 图标添加新的 mobileprovision 文件
                                • 确保您已在目标信息中重新分配/分配了正确的证书:代码签名:代码签名身份
                                • 仔细检查构建结果以查看它使用正确的配置文件并正确签名

                                平静地重复这些步骤直到它起作用,我花了大约五次各种组合。我还从 Development 切换到 Ad-hoc,这显然不是必需的,但确实保证了新的 mobileprovision 文件。

                                【讨论】:

                                • 所以我不需要 Entitlements.plist 来让它工作......但我确实不得不重做几次。主要是因为旧的配置文件不断弹出。确保在所有地方(项目和目标)都删除它并继续检查以确保它消失了!!。
                                • 就像你说的,不确定是什么组合使它起作用,但经过几天的搜索,你的帖子是唯一为我解决的。谢谢你一百万倍!
                                猜你喜欢
                                • 2015-02-12
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多