ios – ERROR ITMS-90164/90046:无效的代码签名权利

问题:

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

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

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

[2015-01-23 16:08:21 SGT]错误:错误ITMS-90164:“无效的代码签名权利。您的应用程序包签名中的权利与供应配置文件中包含的权利不匹配。根据配置配置文件,捆绑包含一个不允许的密钥值:’TEAMID.com.Company.CompanyApp’,用于’Payload / CompanyApp.app / CompanyApp’中的密钥’application-identifier’

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

我已经调试了好几天才弄明白无济于事。

我想知道为什么当我使用新配置文件签名时,Application Loader抛出的错误引用了原始TEAMID.com.Company.CompanyApp的ID而不是TEAMID.com.Company.CompanyAppDemo ? 这是Xamarin中的一个错误,它找错了配置文件或者我错过了什么? 对于不同的应用程序,您不需要不同的证书吗?

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

Note: I’m developing using Xamarin.Similar question posted in Xamarin Forum hereI’m creating an app called, say CompanyApp .Then I created an App ID for it com.Company.CompanyApp , along with Distribution Provisioning Profile that uses the corresponding App ID.I uploaded the binary and it worked perfectly fine.Then I went on create a demo version of the app (basically the same app with small modification, so it’s the same solution & project, just different bundle signing setting), CompanyAppDemo with a new App ID com.Company.CompanyAppDemo , along with a new Distribution Provisioning Profile that uses the new App ID.I updated the iOS Bundle Signing options to use the new Provisioning Profile and generated the IPA.But when I uploaded this to Application Loader, I got the following error:[2015-01-23 16:08:21 SGT] ERROR: ERROR ITMS-90164: “Invalid Code Signing Entitlements. The entitlements in your app bundle signature do not match the ones that are contained in the provisioning profile. According to the provisioning profile, the bundle contains a key value that is not allowed: ‘TEAMID.com.Company.CompanyApp’ for the key ‘application-identifier’ in ‘Payload/CompanyApp.app/CompanyApp'”[2015-01-23 16:08:21 SGT] ERROR: ERROR ITMS-90046: “Invalid Code Signing Entitlements. Your application bundle’s signature contains code signing entitlements that are not supported on iOS. Specifically, value ‘TEAMID.com.Company.CompanyApp’ for key ‘application-identifier’ in ‘Payload/CompanyApp.app/CompanyApp’ is not supported. This value should be a string starting with your TEAMID, followed by a dot ‘.’, followed by the bundle identifier.”I have been debugging for days to figure out to no avail.I am wondering why when I signed with the new profile, the error that Application Loader threw refer to the ID of the original TEAMID.com.Company.CompanyApp instead of TEAMID.com.Company.CompanyAppDemo ?Is this a bug in Xamarin that pick up a wrong provisioning profile or am I missing something?You don’t need different certificate for different app right?Note that I have always refreshed the Provisioning Profile list in XCode > Preference before changing the iOS Build Signing option in Xamarin.

解决方案:

方案1:

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

注意:错误描述说明了关键的“aps-environment”作为“开发”。

编辑:实际的错误消息

方案2:

我遇到了同样的问题,用一个简单的产品 – >清洁解决了。

方案3:

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

1

就像David P说的那样, 产品 – >清新之前,新的存档确实解决了我的问题。

我只想补充说,在我的情况下,我发现有缺陷的xarchive缺少以下文件:

2

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

方案4:

最后在拔毛2周后..

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

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

方案5:

同样的问题,用简单的产品 – >清洁解决

方案6:

在Entitlements.plist中更改此内容:

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

对此:

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

方案7:

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

方案8:

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

在Visual Studio 2015上签署的iOS捆绑包的视图

方案9:

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

构建设置 – >代码签名标识 – >发布 – >任何IOS SDK

方案10:

确保在归档时选择了App目标而不是WatchKit App。

方案11:

没有其他答案为我解决了这个错误,但是这样做了:

  1. 创建新的XCode应用程序并检查它的代码签名设置。

  2. 尝试使您的应用程序设置类似于默认的XCode 7或Xcode 8签名和配置设置,此处显示XCode 7,它在XCode 8中再次更改。

供应和签署

  1. 如果上述内容不够,您可能需要再次执行此操作,但这一次,在您执行之前,从Apple密钥环中删除任何旧的过期配置文件或删除并重新登录XCode中的Apple开发人员(itunes)帐户喜好。 确保在任何更改后退出XCODE和RESTART。 然后再次添加您的帐户,让XCode获取您的新签名和团队信息。

方案12:

我曾尝试从不是主人的git分支上传一个构建版本。 为解决此问题,我将分支合并到主服务器并再次构建。 然后我就能成功上传构建版本。

方案13:

包含2个目标(具有2个开发者ID,2个权利)的项目可能会导致此问题。 (不要问我这是怎么发生的……)

归档时,请暂时删除其他授权文件。

方案14:

做一个正确的Xcode’退出’,然后重新启动是让它为我工作的最后一个动作。

在验证我的归档版本时,我更改了捆绑标识符(对于演示版本)并得到了相同的错误(在问题中详述)。 我正在使用Xcode。 刚关闭Xcode并重新打开我的项目是不够的,但完全’退出’是。 有些东西可能是在我猜的地方缓存的。

方案15:

我尝试了这里列出的所有内容,结果问题是我的.entitlement文件,它首先放入了我从未输入的行,它们只是以某种方式添加了。
删除了这些行并再次尝试,工作。

方案16:

我刚刚在entitlements.plist中重命名了来自applinks的访问域的价值:htts://domain.app.link到applinks:domain.app.link它就像一个魅力。 干杯!

方案17:

  1. 转到Xcode中的Build Phase
  2. 删除所有框架
  3. 添加它们
  4. 现在build-> Archieve->上传到App Store

华友世纪,你完成了它。 问题解决了

方案18:

对我来说,我能够通过再次关闭/打开自动代码签名功能来解决它​​:

在此输入图像描述

方案19:

对我来说,我在iOS Bundle Signing下的Custom Entitlements设置中输入了错误的文件。 删除它,它的工作!

方案20:

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

我没有使用应用程序加载器上传应用程序,而是使用了XCode中的Organizer,在上传时它没有任何警告!

方案21:

我的问题是我使用了错误的包来创建IPA文件

方案22:

我有完全相同的问题,这是一个非常愚蠢的错误。 我不希望任何人花时间在这上面,所以对于这个:

错误

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

方案23:

你应该检查你的权利。 它就像plist文件。 将其编辑为开发并删除额外的字段。

在此输入图像描述

方案24:

我的两分钱在这里。

刚才我遇到了这个问题,因为当我从apple开发人员门户复制我的TeamID / Application ID时,会给予entitlement.plist很多不相关的值。 我没有注意到这一点,因为我使用Xcode编辑entitlement.plist,输入框不会显示第一个新行字符后的所有内容。

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

谢谢,塞缪尔

方案25:

Stackoverflow上最后几天尝试了所有技巧之后,我删除文件“xxxxxx.entitlements”并再次重新生成它。 我单击Capabilities ,在Associated Domains上选择ON并添加“Domains”。 然后在Capabilities> Push Notifications中单击Fix“将推送通知权利添加到您的权利文件”。

让我做ARCHIVE成功

参考连接:

https://stackoverflow.com/questions/28106791/28106791