捆绑包标识符和推送证书…aps环境授权错误


68

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

我正在尝试发送推送通知并让他们感到恐惧

“错误域= NSCocoaErrorDomain代码= 3000”找不到适用于应用程序的有效'aps-环境'权利字符串“ UserInfo = 0x15b200 {NSLocalizedDescription =找不到适用于应用程序的有效'aps-环境'权利字符串}”错误。

我可以肯定我正确地遵循了所有步骤,包括:

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

我唯一无法完全理解的是Bundle Identifier

推送证书用于

XXXXXXXXXX.com.julianbaker.pwcnewsuk

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

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

如果我手动将其更改为

com.julianbaker.pwcnewsuk

由于该应用被视为PwCNewsUK,因此我收到UDID不匹配错误

当我用Google搜索这个东西时,似乎对此事有些困惑,但是似乎他们必须匹配?

题:

捆绑标识是否应与
XXXXXXXXXX.com.julianbaker.pwcnewsuk的推送证书匹配?

题:

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

热爱iPhone的开发,但有时可能会让人望而却步!


4
深入研究,我发现了第二个问题的答案...苹果应该在mobileprovision文件中包含“ aps-environment”对,值应该是“ development”或“ distribution”。显然存在一个错误,即在生成证书时有时会省略该对。通过在文本编辑器中打开文件进行检查
JulianB 2011年

而且看来,应用程序捆绑包标识符区分大小写(“目标信息”窗口“属性”窗格中的“标识符”字段)
JulianB 2011年

67
这个问题让我想哭
凯尔·克莱格

Answers:


88

当我从正在开发的应用程序的开发环境转移到生产环境时,我发现了这个问题。此过程涉及创建新的配置文件,新的应用程序ID等。我创建了应用程序ID和配置文件,但Team Agent必须配置推送通知。当我尝试使用新的配置文件继续测试时(在为推送通知配置了应用程序之后),我遇到了“找不到适用于应用程序的有效'aps-environment'授权字符串”的问题。然后,我想起了阅读文档中的一些警告:

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

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

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


16
完全为我工作,谢谢!苹果开发站点如此简陋地工作绝对是不可接受的。
diatrevolo 2011年

1
是的,它对我有用。每当您更新App-id时,请更新您的配置文件。您不会从Apple得到任何暗示。但是您必须这样做。无需任何编辑XML的或权利
Dhilip

当我从iPad删除开发应用程序,然后尝试再次运行它时,我遇到了这个问题。我遵循了“使”配置文件“变脏”的说明,通过管理器重新下载了该配置文件,关闭并打开了xcode,对其进行了重建和部署,然后它开始工作了。这是一个la脚的解决方法。
保罗·弗赖尔

这个问题仍然存在,并给我带来了数小时的CloudKit问题。检查配置文件后发现缺少“ aps-environment”密钥我多次重新生成了配置文件,试图删除它们无济于事。最终我通过更改应用程序可以访问的iCloud容器设法弄脏了配置文件配置文件。
user2002649

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自动添加到您的权利文件中,但是肯定不是在我的项目中为我生成的。


2
这是正确的答案。解决方案只是将.mobileprovision文件中的值复制到Entitlements文件中。我希望苹果在某处记录下来。如果执行此操作后仍然出现错误,请重新启动XCode。这为我解决了。
Aneil Mallavarapu'2

它也对我有帮助。我确定我具有相同的值,并尝试了它们的不同组合,但是有些不同,复制粘贴解决了它。也许只是按键顺序是相关的。
JaakL 2012年

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 Push Notifications正确签名。如果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>

使用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下次将使用正确的设置来重新创建它们,您再次感到高兴。


删除xcuserdata文件夹为我解决了这个问题!谢谢!
Gilimanjaro'7年

xcuserdata为我们修复了它,非常感谢!我只需要删除链接到以前控制项目的用户的地图。
新泽西

5

基本上答案是每个人都说的一样模糊

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

冷静地重复这些步骤,直到它起作用为止,花了我大约五遍各种组合。我也从“开发”切换到“临时”,这显然不是必需的,但确实保证了新的mobileprovision文件。


1
因此,我不需要Entitlements.plist来使它工作……但是我确实不得不重做几次。主要是因为旧的配置文件不断弹出。确保在所有地方(项目和目标)都将其删除,并继续检查以确保它不存在!
pho0 2011年

就像您说的那样,不确定是什么组合使它起作用,但是经过几天的搜索,您的帖子才是唯一为我解决的帖子。谢谢你百万折!
AngeloS 2011年

5

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

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

3

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

这就是我要做的所有更改才能使其工作。


3

以上都不对我有用!

  1. 删除所有部署配置文件Xcode的组织者
  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. 万岁:)

2

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

我的意思是,如果您为应用程序启用了仅用于分发的推送通知,并且您试图通过使用XCode进行构建来使推送通知正常工作,则此操作将无效。

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


1

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

如果DataProtectionClass键具有值NSFileProtectionComplete,请将其删除!

删除此键使我可以在设备上的Xcode中测试应用程序(这不会影响模拟)。


1

我有同样的问题。对我来说,解决方法是这样的:

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

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


0

几个小时后,我才知道了这一点,所以,除了朱利安(JulianB)所说的,

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

0

对我来说,它在将包标识符更改为随机值后起作用。确保确实出现签名错误(从组织者和设备中删除所有配置文件,CMD + OPT + SHFT + K然后CMS + SHFT + K再进行干净的构建CMD + R),然后将捆绑包标识符改回适当的标识符。


0

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


0

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


0

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

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

但是在发布应用程序之前,我必须在其他开发人员门户上创建新的配置文件。我创建了新的应用程序ID,用于开发和分发的新资源调配,下载了新的资源调配,在已设置正确资源调配的应用程序目标中。我也改变了包标识符。但是我遇到了这个错误。

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

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

正在创建错误。配置推送通知时,错误不再出现。


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门户)。
  2. 删除您的应用程序ID(开发者门户)。
  3. 创建带有用于开发和生产的推送通知支持的新应用ID。
  4. 使用NEW App ID创建新的配置文件。
  5. 将它们安装在Xcode上。
  6. 测试开发和发行版本。

0

在此处输入图片说明

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


0

以我为例,经过数小时的证书修改后,解决此错误的方法很简单...

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

macOS Sierra 10.12-Xcode 8.1

在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.