错误ITMS-90164 / 90046:无效的代码签名权利


82

注意:我正在使用Xamarin开发。类似的问题在Xamarin论坛上发布在这里

我正在创建一个名为CompanyApp的应用程序。然后,我为它创建了一个应用程序ID com.Company.CompanyApp,以及使用相应应用程序ID的Distribution Provisioning Profile。我上传了二进制文件,并且运行良好。

然后,我继续创建该应用程序的演示版本(基本上是同一应用程序,但进行了少量修改,因此它是相同的解决方案和项目,只是捆绑签名设置不同),CompanyAppDemo和新的应用程序ID com.Company.CompanyAppDemo以及使用新的应用程序ID的新发行配置文件。我更新了iOS Bundle Signing选项,以使用新的Provisioning Profile并生成了IPA。但是,当我将其上传到Application Loader时,出现以下错误:

[2015-01-23 16:08:21 SGT]错误:ERROR ITMS-90164:“无效的代码签名权利。您的应用程序捆绑包签名中的权利与供应配置文件中包含的权利不匹配。根据供应配置文件中,捆绑包包含不允许使用的键值:“ Payload / CompanyApp.app / CompanyApp”中键“应用程序标识符”的“ TEAMID.com.Company.CompanyApp”

[2015-01-23 16:08:21 SGT]错误:ERROR ITMS-90046:“无效的代码签名权利。您的应用程序包的签名包含iOS上不支持的代码签名权利。具体来说,值'TEAMID.com.Company不支持'Payload / CompanyApp.app / CompanyApp'中键'application-identifier'的.CompanyApp'。该值应该是一个字符串,以您的TEAMID开头,后跟一个点'。',然后是包标识符。”

我已经调试了几天,以至于无济于事。

我想知道为什么当我使用新的配置文件签名时,Application Loader抛出的错误是指原始TEAMID.com.Company.CompanyApp的ID而不是TEAMID.com.Company.CompanyAppDemo?这是Xamarin中的错误,是错误的配置文件,还是我丢失了某些东西?您不需要为不同的应用使用不同的证书吗?

请注意,在更改Xamarin中的iOS Build Signing选项之前,我总是在XCode> Preference中刷新Provisioning Profile列表。

Answers:


133

如果有人通过像我这样搜索ERROR ITMS-90046来到这里,我的解决方案是清理它并删除所有预编译的框架(自定义框架),然后重新构建。

注意:错误描述说了一些关于键“ aps-environment”为“ development”的内容。

编辑:实际错误消息


你能再解释一下吗?
约翰

1
是的,在我的应用程序中,我使用的是自定义框架,它们已添加到“构建阶段”“目标依赖项”部分中,因此在我编译应用程序时,它们也会被编译并签名。另外,我在每个框架“构建阶段”中都有一个脚本,可将已编译的框架移至另一个文件夹。签名过程似乎存在一个错误,我认为关键是删除框架,迫使编译器再次对其进行编译和签名。该错误不再发生。
2015年

谢谢,这帮助我解决了问题!
DiscDev

7
我要做的就是清理...这是一个新的错误,大约有50个构建版本上传到TestFlight
Phamer

2
在Xcode上进行开发是一场无尽的噩梦。显然,为工作祈祷比编码更重要。
Eduardo

63

我遇到了同样的问题,并通过一个简单的Product-> Clean解决了。


1
感谢您为我解决ERROR ITMS-90164:“无效的代码签名权利。您的应用程序包签名中的权利与配置文件中包含的权利不匹配。根据配置文件,捆绑软件包含一个键值,不允许:对于'Payload / Palau Moja.app/Palau Moja'中的键'get-task-allow',为'true'。“错误ITMS-90164:”无效的代码签名权利。匹配包含在供应轮廓的人。
何塞普·埃斯科瓦尔

出现与Josep相同的错误,然后清理->存档->再次上传即可解决它。感谢您发布此解决方案!

您在哪里做产品->清洁?在XCode或Visual Studio中?我正在使用Xamarin,BTW开发。
James Lavery

20

如果有人通过使用get-task-allowasp-environment键搜索错误ITMS-90164和错误ITMS-90046到达此处:

1个

就像David P所说的那样,在新的Archive确实解决了我的问题之前,先执行产品->清理

我只是想补充一点,在我的案例中,我发现错误的xarchive缺少以下文件:

2

在将该.xarchive发送给客户端进行生产签名之前,您可能需要查找archived-expanded-entitlements.xcent文件,并确保该文件已经存在。


18

终于在拉扯头发2周后..

由于某些原因,如果Entitlements.plist中没有设置为TEAMID.com.Company.CompanyAppDemo的关键“应用程序标识符”,则Xamarin将使用原始的应用程序标识符,即TEAMID.com.Company.CompanyApp

因此,解决方案是在Entitlements.plist中添加应用程序标识符,以指定正确的应用程序捆绑包ID。然后在构建选项> iOS捆绑签名中包含plist。


13
xamarin可以大大提高生产力!
安东·特罗帕什科


8

在Entitlements.plist中进行以下更改:

<key>aps-environment</key>
<string>development</string>

对此:

<key>aps-environment</key>
<string>production</string>

5

这也可能是因为您必须同意iTunes Connect中的新合同。登录到iTunes connect,您应该在顶部看到一个横幅,提示您同意最新的合同更改。


1
Your'e a life saver :)爱苹果的无关错误消息
Yoav Schwartz

4

对我来说,问题在于Entitlements.plist是自动添加的并且为空。从“自定义权利”字段中将其删除,并解决了该问题。

Visual Studio 2015上的iOS捆绑签名视图


3

如果在打包之前未选择相应的发行证书,则将报告ERROR ITMS-90164

构建设置->代码签名身份->版本->任何IOS SDK



2

其他答案都没有为我解决此错误,但这确实做到了:

  1. 创建一个新的XCode应用程序,然后检查它的代码签名设置。

  2. 尝试将您的应用设置为默认的XCode 7或Xcode 8签名和配置设置,此处显示XCode 7,在XCode 8中再次对其进行了更改。

设置和签名

  1. 如果以上操作还不够,那么您可能需要再次执行此操作,但这一次,在此之前,请从Apple Keyring中删除所有旧的过期配置文件,或者在XCode中删除并重新登录到Apple开发人员(itunes)帐户优先。进行任何更改后,请确保退出XCODE并重新启动。然后再次添加您的帐户,并让XCode提取新的签名和团队信息。


1

一个包含2个目标(具有2个Developer id,2个权利)的项目可能会导致此。(不要问我怎么回事...)

归档时,请暂时删除另一个授权文件。


1

执行适当的Xcode'Quit',然后重新启动是使它对我有用的最后一步。

我更改了捆绑包标识符(用于演示版),并在验证存档的版本时遇到了相同的错误(如问题中所述)。我正在使用Xcode。仅关闭Xcode并重新打开我的项目是不够的,但是完整的“ Quit”就足够了。我可能在某个地方缓存了某些内容。


这为我做到了。XCode有时可能是如此挑剔。
亚伦·克劳斯

1

我尝试了此处列出的所有内容,结果问题出在我的.entitlement文件上,其中的行我从来没有放在第一位,只是以某种方式添加了它们。
删除这些行,然后重试,即可。


1

我刚刚在entitlements.plist中将Access域的值从applinks:htts://domain.app.link重命名为applinks:domain.app.link,它的工作原理就像是一种魅力。干杯!



0

对我来说,我可以通过再次打开/关闭自动代码签名功能来解决此问题:

在此处输入图片说明



0

经过数小时的调查,我找到了一个简单的解决方案。

我没有使用应用程序加载器来上传应用程序,而是使用了XCode中的管理器,并且在进行上传时它没有任何警告!



0

我遇到了完全相同的问题,这是一个非常愚蠢的错误。我不希望任何人花时间在此上,因此对于这个:

错误

因此,这里发生的事情是我在部署目标中输入了“ 10”。那应该是10.0。那就是产生臭名昭著的错误ITMS-90164 / 90046:我的无效代码签名权利!



0

我的两分钱在这里。

刚才我陷入了这个问题,因为当我从Apple开发人员门户网站复制我的TeamID /应用程序ID时,这为entitlement.plist带来了许多无关的价值。我没有注意到这一点,因为我正在使用Xcode编辑entitlement.plist,并且输入框在第一个换行符之后不会显示所有内容。

对于这种情况,我建议对entitlement.plist使用纯文本编辑器。

谢谢,塞缪尔


0

尝试了在Stackoverflow上阅读的所有技巧后,我删除了文件“ xxxxxx.entitlements”并重新生成它。我单击“功能”,在“关联域”中选择“开”,然后添加“域”。然后在功能>推送通知中单击修复“将推送通知权利添加到您的权利文件”。

让我做档案成功


0

我有这样的链接webcredentials:https://************.link,这导致我的上传失败。我将其删除,问题已解决。

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.