配置文件与应用程序标识权利文件的值不匹配

115

我正在尝试将一个应用程序上传到应用商店,但在证书页面上出现了这个错误。据我所知,我已经更改了字段以使它们匹配,但是我肯定还有一些遗漏。

弹出的错误提示

非常感谢任何帮助。

info.plist


1
展示你的 entitlements.plist 文件。 - Imad Ali
也许是因为我以前从未寻找过,但我看到的唯一的 plist 是 info,但这里是第二张图片。 - Paul Raymond
它说我不能再发布链接了,如果有人想到什么,请告诉我,我即将登机前往芝加哥。 - Paul Raymond
31个回答

222

我不确定为什么这样可以解决问题,但我进入了目标的“能力”选项卡,打开了iCloud,尝试进行存档构建,失败了,然后关闭了iCloud,再次进行存档构建并成功了,之后就能自动解决证书问题了。


1
我自己在使用Xcode 9时也遇到了这个问题,通过切换一些设置解决了它。该项目唯一的“不同”之处就是它非常古老,像2010年那样古老。因此可能存在一些旧的项目文件问题...? - Echelon
14
谢谢您。在切换开/关后,它在xcodeproj旁边创建了一个空的.entitlements plist文件。看起来这是提交过程所需的文件。对于不需要任何权限/功能的现有应用程序,可能只在Xcode 9中存在此问题。 - Andrew Wood
3
我也一样。这是一个古老的项目。感谢建议切换功能,现在有一个空的.entitlements文件被接受了。正在向苹果报告错误。 - RickJansen
6
整个晚上都在这个鬼东西上折腾。我不得不来回切换,这导致了空白的授权文件,然后我不得不将我的“代码签名授权”构建设置指向那个空白文件。 - Adam Waite
2
在Xcode 10.0beta5中,这仍然会发生。对我来说,这是由于在创建授权后更改项目名称所致。打开iCloud,然后关闭它会重命名授权文件并在构建设置中更新其名称。文件的内容是相同的。似乎上传者关心授权文件的名称,而不管构建设置文件的名称。 - Troy
显示剩余22条评论

50

右击Finder->前往文件夹...

~/Library/MobileDevice/Provisioning

适用于 Xcode 11

~/Library/MobileDevice/Provisioning Profiles/

删除所有配置文件,完成。


1
在我的情况下,文件夹是“〜/Library/MobileDevice/Provisioning Profiles”。 - LightMan
同意,这是正确的答案,只是在Xcode 11中路径为~/Library/MobileDevice/Provisioning Profiles/ - Marius Kažemėkaitis
2
为什么这个修复可以解决问题?我们刚刚删除了什么?这会有任何副作用吗? - markdon
您正在删除由Xcode自动添加或手动从developer.apple.com打开的配置文件。如果您不想丢失其他配置文件,可以使用类似以下命令的内容... grep -ir YOUR_APP_ID ~/Library/MobileDevice/Provisioning\ Profiles; 来显示匹配的配置文件。只需删除它们即可完成相同的任务。 - Chris Douglass
这样修复了,但你需要先进入Xcode并取消勾选“自动管理签名”,然后执行上述操作,然后重新勾选自动签名,一切都会很好。对我来说已经修复了。在此处查看完整说明:http://www.ottorinobruni.com/how-to-fix-error-profile-doesnt-match-the-entitlements-files-values-for-the-application-identifier-and-keychain-access-groups-entitlements/ - c0d3p03t

41
您创建的应用程序具有不正确的application-identifier值,无法满足配置文件的期望。为团队2ABCDEFG的appID com.example.foo期望的是application-identifier: 2ABCDEFG.com.example.foo,而您的应用程序声明其appID为com.example.foo,但application-identifier不匹配,可能是使用了错误的团队前缀或捆绑标识符配置不正确。
在我的情况下,我使用构建方案来允许我构建生产应用程序和qa应用程序。com.example.foo用于生产环境,com.example.foo.qa用于QA。
我将Info.plist中的bundleIdentifier设置为$(PRODUCT_BUNDLE_IDENTIFIER)$(BUNDLE_SUFFIX),这可以让模拟器和设备上拥有不同的应用程序。然而,在归档阶段生成application-identifer时,它似乎没有读取由Info.plist生成的bundleIdentifier。
为了解决这个问题,我编辑了FooProject.xcodeproj/project.pbxproj(使用文本编辑器),将QA buildSettings的PRODUCT_BUNDLE_IDENTIFIER更改为com.example.foo.qa 您可以查看苹果的技术问题解答此页面,以深入了解解决此问题的方法。一旦您在导出的应用程序上运行以下操作:
codesign -d --entitlements :- ./Payload/myApp.app

查看刚刚构建的应用程序使用了哪个application-identifier,很快就可以意识到你做错了什么。

在我的 Google 搜索中没有找到那个页面,因为他们实际上并没有使用错误信息中的短语或称呼完整名称的application-identifier,而是称其为应用程序 ID(App ID)。

此问题的解决方案也不是生成一个具有application-identifier权限的新配置文件,它确实具有该权限,但配置文件中的值和你的应用程序必须匹配。


3
谢谢!我能够通过更改我的构建设置来修复它,在打包下使用自定义变量作为产品Bundle标识符后缀,例如:*com.mycompany.myapp$(BUNDLE_ID_SUFFIX)*,这样就解决了问题。因此,我不必手动编辑项目文件,并能够轻松地维护不同的环境下的不同Bundle ID。 - n8tr
1
你可能遇到应用标识符不匹配的原因之一是你没有下载所有的预配文件。如果缺少与确切应用程序ID相对应的配置文件,则会使用通配符配置文件创建你的存档,这会导致在导出阶段中出现不匹配。 - diidu
这对我很有用。我正在构建一个Ionic应用程序,并意识到我在不同的帐户上进行了测试。我使用了com.foo.testName,当使用正确的帐户进行构建时将其改回来。似乎com.foo.testName仍然在pbxproj文件中。 - Dewald Els
非常感谢,这正是导致我的验证出现问题的原因,并且解释非常清晰! - MDH
@n8tr 在经历了将近一周的头痛和挫败后,你的评论救了我。谢谢。 - Behdad
显示剩余3条评论

11

也许{project}.entitlements文件丢失了。按照@samkass所述的操作将自动生成该文件,然后它就可以工作了。 因此,只需转到功能选项卡,启用任何选项,然后禁用它即可。


1
这很傻,但对我更新的几个旧项目有效。 - aspro

8
将iCloud切换为开启状态,构建并禁用iCloud后,错误提示消失,该错误提示为:

配置文件与应用标识和钥匙串访问组的授权文件值不匹配。


1
当然,那就是解决方案!我为什么没想到这个完全不明显的尝试呢。感谢苹果。 - Jonathan Plackett

5

我正在使用--dart-define命令为Flavors开发Flutter应用程序。

我受到了这篇绝妙的文章的启发。

但是在部署时遇到了“application-identifier”问题,我尝试了很多选项。

这个解决方案对我有用。

它与@n8tr的评论非常接近,但不同之处在于“instead”。

简而言之,在构建设置的包装下,将产品捆绑标识符设置为 your.id.here $ (DEFINEEXAMPLE_APP_SUFFIX) 而不是在Info.plist中。


4
在Xcode 11中,如果您的项目缺少一个.entitlement文件,就会出现这种情况。解决方法是,在“签名与能力”下点击“+能力”添加任何随机能力(这将导致创建一个.entitlement文件),然后再删除这个能力。这将让您自动进行证书配置。

2

对我来说,技巧是:

  1. 为目标添加/删除功能(我的情况下是一个Widget);
  2. 确保已创建的entitlements文件在构建设置中列出;
  3. 并向entitlements文件添加"APS Environment"键和值"development"。

2

我进入了我的Target的“Capabilities”选项卡,打开了钥匙串共享功能,然后它开始工作。


2
请检查您的应用程序所需的功能,例如应用内购买、推送通知、应用间音频、Siri kit等。
这是此类错误的唯一原因。
请确保在您的App id中开启上述标志。
大多数情况下,当您未在开发App ID中配置推送通知、应用内购买时,会发生此类错误。

我没有启用任何东西。这真的很令人沮丧。 - Paul Raymond
你的应用程序是否具备我上述提到的任何功能? - Sunil M.
稍后我会附上一张截图,但是这个应用程序没有推送通知或应用内购买。 - Paul Raymond
你需要截取哪个屏幕截图?在 plist 中没有提到 entitlements。 - Paul Raymond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接