ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Xcode 4.3 中修复“没有为应用程序找到有效的 'aps-environment' 权利字符串”?

我一直在非常努力地创建一个可以接收推送通知的简单简单的 iOS 应用程序。我这样做的唯一原因是建立一个程序供其他团队成员使用,但无法在网络上的其他地方找到此类说明的最新工作版本。我们的商店对 iOS 开发者来说相当新,我个人对 iOS 开发者和 Xcode 完全没有经验。我偶然发现了来自 Apple 和其他地方的数十篇教程、文章和问题帖子,我觉得我可能快到了……

这是我要去的地方(请注意,我正在使用 Xcode 4.3 并最初尝试仅部署到 iOS 5.1,我收集到与早期版本的 Xcode 相比,最近有些事情可能发生了变化,但我还是新手这 - 并发现它完全令人困惑和令人费解):

1) 我的 iPhone 上有一个启用了推送的配置文件

2)在我的测试 Xcode 项目中,我将该配置文件选为签名身份(在 Build Settings > Code Signing 中)

https://i.stack.imgur.com/17sRO.png

3)我在 Summary and Info > Custom iOS Target Properties 下正确设置了我的包标识符*(我认为??)

4) 我在委托的 didFinishLaunchingWithOptions 中调用了 registerForRemoteNotificationTypes

5) 我的委托中有 didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegisterForRemoteNotificationsWithError,分别设置为记录设备令牌或错误

6) 我在摘要下选中了启用权利。

7) 选择的权利文件正下方是 Tinker6(我的测试项目的名称),它是在我选中 Enable Entitlements 时自动生成的

8)在 Tinker6.entitlements 文件中,我有以下内容(根据网络上的几个不同帖子,我收集到的内容是正确的,但我无法从 Apple 本身找到任何确定的内容):

https://i.stack.imgur.com/S8Pgo.png

更新

9)另外,我在没有权利文件的情况下尝试了整个事情,并得到了基本相同的结果。

10) 我的 mobileprovision 文件内容包括正确的权利(我打乱了数字和域,但结构相同):

<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>12355456A7.*</string>
</array>

/结束更新

当我尝试在我的设备上运行它时,我在 Xcode 输出中收到以下错误:

2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: 
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' 
entitlement string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

我尝试将 get-task-allow 设置为 NO,将 aps-environment 设置为生产,所有四种可能的组合,同样的事情。

我怎样才能克服这个?这方面的权威文件在哪里?

-- 更多背景信息 --

至于捆绑包 id,我仍然不清楚应该如何设置与供应配置文件中的应用程序 ID 和配置文件 ID 相关的设置。在 App Ids 下的 Provisioning 门户中,我有这个(再次打乱了数字和域):

https://i.stack.imgur.com/la74y.png

并且设置了捆绑ID的两个地方我有这个:

https://i.stack.imgur.com/9Q9jd.png

我完全不确定这些是否正确,或者是否应该将其中一个或两者都设置为 12355456A7.com.whatever.tinker,尽管我在此过程的早期尝试了这些但没有成功......

请注意,我意识到有许多具有相似标题的帖子,但是根据给出的文件名等,它们似乎都已过时,而且事实上没有一个解决方案似乎有用。我希望我提供的更详细的信息将保证高质量的响应。我可能会尽快分配赏金,如果你给出一个高质量的答案,我会奖励你赏金,并通过 twitter 和我的博客宣传你的答案。特别是如果您在您的博客或其他内容上交叉发布一篇非常好的“这里是让一个简单的推送通知应用程序正常工作所需的确切 500 个步骤,包括配置和其他任何内容”文章。

重复的帖子,我在这里找到了我的解决方案:stackoverflow.com/questions/27324020/…

e
elp

如果您在为推送配置 app ID 之前创建了配置文件,请尝试重新生成配置文件。

iOS Provisioning Portal -> Provisioning -> Your cert -> EDIT -> Make an edit -> Download new provisioning

为我工作。现在我可以使用推送了。


您能否更明确地说明“重新生成配置文件”的确切含义?这是 XCode 中的一个步骤,在 Provisioning Portal 中,在哪里?谢谢!
在门户中。只需添加或删除设备,您的配置就会生成。之后,双击并安装在您的钥匙串中。
对不起,如果我很密集,但在设备下添加/删除它?或者在有问题的实际供应配置文件下方的某个地方,如果是这样,具体在哪里?
添加或删除设备是重新生成配置的技巧。您需要重新生成一个以使用推送通知,因为它链接到应用程序 ID 和推送证书..
M
Mike Weller

首先,您不需要权利文件,除非您要添加配置文件中不存在的自定义键/值对。构建应用程序后,配置文件中的任何权利都将复制到应用程序。

鉴于您仍然看到有关缺少权利的错误消息,我只能假设代码签名选项在构建设置中不正确。

您需要确保为“调试”配置选择了正确的配置文件,并且为了安全起见,您已经为“调试”和标记为“任何 iOS SDK”的子节点选择了正确的配置文件:

https://i.stack.imgur.com/fRuVz.png

尽管此屏幕截图显示选择了“自动开发人员”配置文件,但请从下拉列表中选择您想要的确切配置文件,仅用于测试目的。可能是 Xcode 会自动选择与您想要的配置文件不同的配置文件。

还要确保进行干净的构建,从您的设备中完全删除应用程序等。这只是为了确保您没有一些旧的绒毛。


根据我帖子中的#2,我认为它设置正确,尽管我添加了一个澄清的屏幕截图来验证。我还尝试完全删除该应用程序并将其关闭 2 天,根据我在某处看到的某个建议需要一天才能重置某些信息(是的,我正在抓住稻草!?)。但是,当您说“您需要确保为“调试”配置选择了正确的配置文件”时,您到底是什么意思——我在哪里选择呢?
如果您单击“iPhone Developer”部分,或者任何设置为当前值的内容,您将看到 Xcode 知道的所有配置文件的下拉列表。确保选择了正确的一项,或者“自动开发人员”项选择了正确的一项。下拉列表应该向您显示所有内容。
你确定你有最新的配置文件吗?是不是你有一个旧版本,在启用推送之前?
嗯,是的,我相信是的。我为获取新的配置文件所做的是,在 Xcode Organizer 中,从库和设备中删除配置文件,然后返回库屏幕单击刷新。这将其从供应门户中拉回。然后我将它添加到设备中。如上所示,mobileprovision 文件 XML ish 内容显示了正确的实体
啊,对不起。路径前需要有一个 -codesign -d --entitlements - /path/to/my.app。此时仔细检查您是否在 Debug-iphoneos 目录中也是值得的,因为“在 Finder 中显示”有时会将您带到错误的位置。
D
DipakSonara

我在 Xcode 8 中遇到过这个问题。您必须启用 Target-> capabilities-> push notification。检查屏幕截图。

https://i.stack.imgur.com/vImZc.png


这帮帮我!!!!只需单击一个按钮...解决我调试了几个小时的问题... Xcode8 也是如此。
天哪,谢谢!加油苹果,给我们一个更合理的错误信息!
Xcode 8 为我的应用关闭了推送通知,所以这个解决方案有效。
谢谢,在我找到这个之前,我必须完成其他设置步骤 3 次。我觉得自己像个白痴,但工具也不好让这成为问题。
你救了我的一天,伙计!
o
ooxio

最简单的方法是使用 Xcode 从您的帐户中执行此操作:

前往 Xcode -> 首选项 -> 选择帐户选项卡 -> 查看详细信息 -> 点击左下角的刷新按钮 -> 完成。

再次构建,它应该可以工作。


M
Max

好的,我之前遇到过这个问题。由于推送通知需要服务器端实现,因此对我来说重新创建配置文件不是一种选择。所以我在没有创建新的配置文件的情况下找到了这个解决方案。

尽管我们选择正确,Xcode 没有正确选择正确的配置文件。

首先去组织者。在设备选项卡上,从库列表中配置配置文件,选择我们尝试使用的预期配置文件。右键单击它,然后“在 Finder 中显示配置文件”。

https://i.stack.imgur.com/Wo5Xm.png

将在打开的 Finder 窗口中选择正确的配置文件。注意名称。

https://i.stack.imgur.com/38fv1.png

https://i.stack.imgur.com/pNgJR.png

现在在 Opened Finder 窗口中删除 Xcode 正在使用的恶意配置文件。现在重新构建。错误应该得到解决。如果不重复该过程以找到另一个流氓配置文件以将其删除。

希望这可以帮助。


这是我的错,但使用这种方法修复了它。我不小心在信息框中输入了一个与我生成证书时使用的标识符不同的标识符。
j
jwl

答案是:重新开始,做同样的事情,但创建一个新的配置文件,然后安装它。那行得通。检查所有细节(移动设备中的权利)看起来与我在这里的问题中的所有内容完全相同。但现在它起作用了。苹果:WAT?

当然,如果可以删除配置文件,这样做是显而易见的。但由于那是不可能的,我不想用一堆测试配置文件让我们的团队混乱。尽管如此,最终还是失去了耐心并尝试了它,它最终起作用了。什么。


创建一个新的配置文件并像在另一个 SO 问题中所说的那样“弄脏”旧的配置文件对我有用:stackoverflow.com/questions/5681172/…
我所要做的就是从门户中删除现有的配置文件并重新创建它。您现在可以在更新后删除配置文件,因此无需创建新的应用程序 ID。
具有相同应用 ID 和分发证书的新配置文件为我解决了这个问题。 +1 :)
u
user229044

在 Organizer 中从 XCode 中删除旧的配置文件。

然后,在 iOS 配置门户中为相同的包 ID 生成一个新的配置文件(在您启用推送之后)。

在 XCode 中导入新的配置文件,在您的应用构建设置中进行设置。

构建,运行,它工作。

我刚刚做完。

我从错误到成功花了 10 分钟。


这也是为我工作的那个。编辑旧的配置文件和下载对我不起作用。谢谢!
作为一个有用的附录,而不是获得一个新的配置文件,我只是能够删除旧的
我强烈建议不要手动操作。使用 github.com/fastlane/PEM
C
Community

XCode 6.1.1,以及多个苹果开发者账号

这个已经相当全面的组合的另一个答案:我今天再次遇到这个问题,这次是因为我有多个苹果帐户。我需要先在 XCode > Preferences > Accounts > + 中添加第二个开发者帐户

确保推送通知功能开启

接下来我需要在应用程序中明确启用应用内购买(我以前不需要这样做)。 XCode >(应用程序窗口)> Targets > Capabilities > In-App Purchase ON(在这个阶段我可以选择正确的证书)

请注意,我已经通过在 Finder 中双击它来添加启用推送的证书。

https://i.stack.imgur.com/j3QI0.png


对此我很头疼,我想当我切换到 Xcode 8 测试版时,它关闭了我的推送通知开关或其他东西。谢谢
谢谢,这就是我遇到这个问题的原因。我的应用 ID 已为应用内购买、游戏中心等启用,但在 Xcode/capabilities 中它们之前都已关闭,没问题。自从更新到 Xcode 8 后,我就遇到了这个问题。在 Xcode 中启用 IAP 和游戏中心后,问题就消失了!
Ö
Ömer Faruk Almalı

(Xcode 5)好吧,花了一个小时后我解决了我的问题。即使您在 Xcode 5 中重新生成配置文件,您也应该手动更新您的帐户。我只更改了管理器选项卡中不起作用的配置文件,Xcode 使用旧配置文件进行构建。

所以去

Xcode > 首选项 > 帐户 > 查看详细信息(选择您的帐户)

然后刷新您的配置文件。


G
Graham Perks

我的问题只是我使用 Xcode 管理的通配符配置文件进行签名。

在我创建了一个特定于应用程序的配置文件(并下载它、双击它并确保我的构建设置引用它)后,我成功地收到了一个 APNS 设备令牌。


我也有这个问题。 Xcode 5 非常擅长更新任何配置文件。我在开发后期添加了 APNS 服务。您必须确保正如上面的海报所指出的那样,您的配置文件实际上是您正在使用的应用程序所独有的配置文件,而不是通配符。
@Michael,您如何确保这一点?我尝试在我的构建设置中更改它(在代码签名下),目前设置为无。当我选择正确的配置文件并构建时,它会出现错误,然后返回到通配符配置文件。
@ian 你遇到了什么错误?您确定这是一个有效的个人资料吗?
啊,我已经整理好了,我需要重新下载正确的证书到我的Mac。这似乎成功了。谢谢。
很高兴听到。当设置似乎正确时,我通常会这样做。重做所有证书。似乎问题不止一次。
T
Taryn

我有同样的问题是其他人并尝试了上述所有技巧,但没有任何效果。我什至删除并使用不同的开发者帐户重新开始。

最终对我有用的是

按照上面的建议进行操作并创建 APP ID 然后创建配置文件 不要在配置的开发部分使用团队通配符配置文件(由 xcode one 管理)。您需要使用已激活推送通知的应用 ID 单独创建一个。这样,当你开发它时,它就会内置推送通知功能。

我不知道你是否可以为通配符应用启用它,但在尝试了至少 12 种不同的建议并失去了几天之后,我希望这对某人有所帮助


但这对现有的答案没有任何帮助,现有的答案已经给出了这个建议。显然,推送应用程序需要自己的配置文件;文档非常清楚通配符配置文件不能用于任何需要特殊权利的应用程序。
我已经这样做了,但是我的应用程序只会选择通配符配置文件,我不能强制它选择启用了推送通知的那个。
G
Gruntcakes

您提到了配置文件,但我没有看到任何提及 Apple 推送配置文件。

要使用 Push,您必须有一个推送配置文件(有两个,一个用于开发,一个用于发布)。创建它后,您需要确保它包含相关证书(请参阅下面的编辑部分)。

这是一个出色的教程,将引导您完成所有步骤:

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

我或其他任何人都需要花费数小时和数小时来编写像本教程这样的详尽详细的答案,所以当本教程已经存在时,我不会尝试,也不会声称获得赏金。

PS我相信你不再需要权利,这是一个遗留问题。

编辑:您还应该检查设备上是否有必要的配置文件 - 转到设置,然后是一般配置文件,检查您的配置文件是否列出,尤其是推送配置文件。您也可以从 XCode 的 Organizer 部分检查这一点。在 Organizer 中有两个部分表示 Provisioning Profiles - 一个在 Library 的左上角(这是 XCode 中用于签名的配置文件等)。此外,您还会看到一个部分,称为 Provisioning Profiles 用于连接的设备,这个是安装在手机上的配置文件。如果您没有在手机上安装它们,您可以从供应门户网站下载它们,然后单击管理器窗口底部的添加按钮。

在配置门户中,您还应该检查 Apple 推送配置文件是否包含证书: - 单击左侧菜单上的配置 - 您将看到您的配置文件列表,选择编辑 Apple 推送配置文件 - 您将看到证书部分,其中包含您项目中的开发人员或测试人员等列表,请确保选中他们的复选框。 - 您还会看到一个设备部分,请确保您正在测试的设备已添加。

如果您在 XCode 或设备上有任何旧配置文件,请删除它们并从配置门户下载/刷新/安装所有新配置文件


如果权利是遗留的东西,那么为什么我会收到一条抱怨没有权利的消息?我已经按照链接的教程进行了这封信,但没有运气......不过还是谢谢。
另外,我添加了一些关于实际 mobileprovision 文件的信息,这些信息可能很有用。
没错,我什至没有设置任何 .entitlements 来成功推送通知。当我这样做时让我绊倒的一件事是我需要手动下载mobileprovision,然后去构建设置并更改签名身份以匹配刚刚下载的那个,在我的情况下,显然Xcode正在选择通配符mobileprovision。
不久前我也收到了一条关于权利的错误消息,这是一条红鲱鱼,请参阅 Mike Wellers 的回复,这就是我在我的案例中所做的。
我已经用更多内容更新了答案供您检查。
D
David Carrico

我自己也遇到了同样的问题。对我来说,问题是我的产品名称 ($TARGET_NAME) 的大写方式与苹果提供的证书中显示的方式不同。例如,我有 com.companyid.APNDemo,而 Apple 证书使用的是 com.companyid.apndemo。

我将目标更改为小写,并且有效。注意:对我来说,线索是 Build Settings 中的 codesigning 设置被设置为我的默认开发人员证书;不是 APNTest 配置文件。


m
matrinox

上面的很多答案都是正确的。但是,在处理此问题时似乎存在不止一个可能的错误。

我遇到的问题是我的 App ID 的大小写问题。由于某种原因,我的 App ID 没有大写,但我的应用却是。一旦我用正确的大小写重新创建了 App ID,它就可以顺利进行。希望这可以帮助。虽然令人沮丧。

PS 如果它仍然不起作用,请尝试使用“编辑”手动编辑代码签名身份字段。使用正确的配置文件名称更改第二行。


d
dwery

我花了几个小时才解决它。鉴于有人使用自定义脚本进行签名和打包,而其他人则使用 xcode 本身,因此只有一种方法可以检查您的应用程序中的内容。转储你的权利

codesign --display --entitlements :- path/to/MyApp.app

并检查 aps-environmentapplication-identifier


我一直面临同样的问题。只是想问一下,应用程序的路径是否适用于安装在模拟器上的应用程序?
不,它是实际设备的已编译应用程序的路径,在 xcode 构建目录中。
v
vahotm

当您的证书过期时,可能会发生此错误。

解决方案是更新证书并用它签署应用程序。


N
Nathan B

您需要确保在您的配置文件 (https://developer.apple.com/account/ios/profile/) 中有一个 iOS 分发配置文件。

当您从 xCode 上传到 App Store 时,请确保您的权利中有 aps-environment。如果没有,请从查看帐户 -> 查看详细信息 -> 全部下载。


B
Brent Brookler

我有一个类似的问题。由于各种原因,我一直在 XCode 7 和 8 之间徘徊。一旦你使用 8 来构建,你将需要使用 8。我只是使用 Xcode 8 并应用了上面建议的一些更改并且它工作。


F
Faris Muhammed

重新创建临时文件解决了我的所有问题。


C
Community

Xcode 4.6 中的“自动”权利似乎有些古怪。

每个 SDK 都有一个 Entitlement.plist 文件,位于:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist

我想出的一个解决方案是编辑这个文件并手动添加偷偷摸摸的 aps-environment 键,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!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>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

然后,Xcode 正在生成正确的 Xcent 文件,其中包含 aps-environment 键:

/Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent

您可以使用 Xcode 的 Log Navigator 找到创建 Xcent 文件的位置,查找“ProcessProductPackaging”。

不幸的是,这是我发现解决问题的唯一方法。 (现在终于可以正确获取推送令牌了)

只是想知道是否有其他更优雅的解决方案可用。
请参阅我的 SO 问题以了解更多详细信息:
Xcode 4.6 automatic entitlement not working - "no valid aps-environment"


R
Rodin Lyasoff

在删除和重新生成 AppID/配置文件之前,请确保您的库和设备安装了相同(且正确)的配置文件。

迁移到新计算机后,我开始看到此错误。 Push 在迁移之前一直在正常工作。

问题是(duh)我没有将配置文件导入新机器上的 Xcode 库(在 Library->Provisioning Profiles 下的 Organizer/Devices 中)。

令人困惑的部分是 DEVICE 已经拥有正确的配置文件,并且它们在构建设置中按预期显示,所以那里的一切看起来都是正确的,但是 XCode LIBRARY 没有它们,所以它正在使用...签署应用程序?? ?


m
mogile_oli

这就是为我解决的问题。 (我已经尝试过打开/关闭功能,重新创建配置文件等)。

在“构建设置”选项卡的“代码签名权利”中,我的 .entitlements 文件并非所有部分的链接。一旦我将它添加到 Any SDK 部分,错误就解决了。

https://i.stack.imgur.com/UWQ86.png


a
arunjos007

我尝试了此处列出的所有答案,但没有人解决我的问题。就我而言,这个错误是由于我在创建 Appid 时犯的愚蠢错误。我使用通配符应用 ID 而不是使用显式应用 ID 导致了问题

如果您希望应用程序接收远程通知(推送通知),那么您需要使用 Explicit App ID,例如 com.tutsplus.push,而不是 com.tutsplus。*

https://i.stack.imgur.com/03pHR.jpg


P
PoojaArora

https://i.stack.imgur.com/BJVPR.png

APS 环境需要添加此密钥,并且根据您的目的,价值应该是开发或生产。

请检查上传的图片