70

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

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

“错误域 = NSCocoaErrorDomain 代码 = 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 开发,但它有时会让人头疼!

4

19 回答 19

88

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

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

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

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

于 2011-09-25T18:33:35.433 回答
21

我遇到了同样的“没有为应用程序找到有效的'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 自动添加到您的权利文件中,但它们肯定不会在我的项目中为我生成。

于 2011-09-12T03:38:21.520 回答
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

有一些技术说明建议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 将在下次使用正确的设置重新创建它们,您会再次感到高兴。

于 2012-04-01T22:26:10.703 回答
5

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

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

于 2011-04-29T16:39:46.797 回答
5

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

  • 从管理器中的库 + 设备面板中删除旧的配置文件
  • 从开发人员门户网站启用 APN 开发重新生成新配置文件
  • 确保将新配置文件添加到管理器中的库 + 设备面板
  • 从我的设备上手动删除我的应用程序(按住直到它摇晃并点击 X)
  • CMD+OPT+SHIFT+K(清理构建文件夹)和 CMD+SHIFT+K(清理)
  • 在 Project > Build Settings > Code Signing 下设置正确的配置文件
  • 确保未在 Targets > Summary 下选中“Use Entitlements”
于 2011-12-15T22:05:27.470 回答
3

以上都不适合我!

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

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

这就是我需要更改的所有内容才能使其正常工作。

于 2012-05-21T18:30:41.340 回答
2

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

我的意思是,如果您只为分发的推送通知启用了您的应用程序,并且您正试图通过使用 XCode 构建来使推送通知工作,那么这将不起作用。

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

于 2013-04-17T13:27:27.523 回答
1

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

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

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

于 2012-06-20T08:50:47.760 回答
1

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

如果DataProtectionClass键有值NSFileProtectionComplete,删除它!

删除这个键可以让我在设备上从 Xcode 测试应用程序(它不影响模拟)。

于 2012-06-06T12:25:33.857 回答
0

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

于 2012-03-27T17:09:33.387 回答
0

在此处输入图像描述

使配置文件正确,这对我有用。希望有所帮助。

于 2014-06-11T10:55:23.470 回答
0

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

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

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

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

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

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

于 2012-06-29T11:45:38.807 回答
0

我的解决方案是删除并再次创建Development Provisioning Profile。它被列为“无效” - 未过期并且更新失败(Xcode 4.3.2 和 iOS 5.1)

于 2012-03-28T12:00:44.033 回答
0

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

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

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

于 2012-05-28T05:54:14.143 回答
0

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

我设置了一个没有推送通知支持的应用程序 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. 测试开发和分发版本。
于 2014-04-01T18:13:42.407 回答
0

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

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

macOS Sierra 10.12 - Xcode 8.1

在此处输入图像描述

于 2016-11-07T09:13:31.307 回答
-2

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

于 2015-02-21T13:16:28.380 回答