78

我正在尝试将应用程序上传到 iPhone App Store,但我从 iTunes Connect 收到此错误消息:

您上传的二进制文件无效。签名无效,或未使用 Apple 提交证书签名。


注意:原始问题的详细信息已被删除,因为此页面已变成有关该特定错误消息的可能原因的所有信息的存储库。

有关将 iPhone 应用程序提交到 App Store 的一般信息,请参阅将 iPhone 应用程序上传到 AppStore 的步骤

4

34 回答 34

35

根据我的经验,Xcode 偶尔会对使用哪个签名证书感到困惑。我养成了在更改代码签名设置(并进行干净构建)后退出并重新启动 Xcode 以解决此问题的习惯。

于 2008-09-30T22:20:05.153 回答
22

我只是想提一下,我也遇到了命令行中的 zip 问题。问题在于它默认处理符号链接的方式。使用:

zip -y -r myapp.zip myapp.app

解决了那个问题。

于 2009-10-13T01:40:49.133 回答
11

我有同样的问题并以这种方式解决:

属性证书安装在我的开发机器上,并且 mobileprovision.embedded 包含在分发存档中。经过一个小时左右的谷歌搜索和挖掘,我找到了错误的来源。在 Xcode 中,我复制了 Release 配置并创建了一个新的 Distribution 配置,然后将签名身份更改为我的分发证书。然而,即使它在 GUI 中更新,项目文件也没有正确更新。

如果您遇到同样的错误,请在您的 [ProjectName].xcodeproj 目录中查找 project.pbxproj 文件,然后在您喜欢的编辑器中打开它。查找分发部分。我破碎的看起来像这样:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Developer: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Developer: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
};
name = Distribution;
};

您可以在第二部分中看到签名身份和配置文件不正确。编辑它以匹配第一部分,重建,你应该很高兴。最后一个看起来像这样:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Distribution: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “F00D3778-32B2-4550-9FCE-1A4090344400″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
};
name = Distribution;
};

改变指南以保护无辜者

于 2009-06-05T15:28:43.587 回答
7

同样的问题,不同的解决方案。

就我而言,我正在使用zip -r myapp.zip myapp.app Turns out 压缩文件,zip 命令搞砸了捆绑包。从取景器中压缩它使其工作。

于 2009-10-09T01:48:28.347 回答
7

我遇到了同样的问题,在尝试了几件事之后-我从代码签名权利中删除了 .plist 权利(只是将其留空),它构建良好并最终上传。

祝大家好运:-D

于 2010-03-22T22:00:33.687 回答
6

另一个数据点:有一段时间,我的应用程序通过了。现在我添加了对应用内购买的支持,但它突然因“无效的二进制/无效签名”问题而失败。仔细一看,发现entitlements plist文件中application-identifier的值是off。

这很可能与我已将配置文件从通配符替换为特定于应用程序的配置文件(应用内购买所需)有关。错误的应用 ID 在旧配置文件下合格。它与 info.plist 中的应用 ID 不匹配,但显然 iTunes 原谅了这一点。

所以,回顾一下:

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.*

可以,而

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.foo

导致“无效的二进制文件”。

于 2011-03-08T01:16:10.787 回答
5

我也有同样的问题,在构建时我注意到配置没有添加到构建中。

对我来说,解决方法是将构建设置为我通常使用模拟器的 iphone 设备,但是它不会包含配置文件......

这可能是一个菜鸟错误。通常你不能构建到设备,但是当你为分发而做时,你可以。

于 2010-02-26T09:58:59.737 回答
5

请参阅此链接以获取解决方案:

http://greghaygood.com/2010/09/04/invalid-binary-message-from-itunesconnect

简短的回答是“最终我仔细检查了我的 info.plist 并发现了一些东西。我根据新指南添加了 CFBundleIconFiles,但数组列表中有一个空条目。我删除了它并重新提交,终于公认!”

于 2010-09-16T12:12:06.243 回答
4

好吧,重复了几次步骤,我终于成功上传了我的应用程序。

我不知道究竟是什么修复了它,但在成功尝试之前,我关闭了 Xcode 和 Firefox 并重新启动它们。我猜其中一个应用程序有一些糟糕的juju。

于 2008-09-07T01:13:50.480 回答
4

这是我遇到的一个问题:我在上传之前将二进制文件添加到了 Subversion。比较/压缩二进制文件然后包含隐藏的 .svn 目录,这会弄乱代码签名。

于 2009-07-22T05:36:30.873 回答
4

在阅读了包括上述内容在内的各种帖子后,我尝试了各种事情。最终对我有用的是完全重新开始!我删除了与我的应用程序关联的每个证书和配置文件。

我重新创建了一个新的开发证书和一个新的分发证书。我再次下载了中间证书。然后我重新创建了开发配置文件和分发配置文件。

在安装了三个证书(这次我注意到发行版同时具有私钥和公共密钥)和两个配置文件(我的发行版配置文件没有被标记为没有有效证书!)之后,一切正常。

一旦我决定撤销所有内容并重新开始,创建新内容并重新安装只需要大约 5 分钟。

于 2009-10-26T17:12:36.553 回答
4

我有类似的问题,但在 Monotouch 中。我发现我的发布配置文件设置为使用开发人员证书。它应该如下所示: 在此处输入图像描述

于 2011-02-04T12:25:29.323 回答
3

看来这个问题有很多原因。这是我的解决方案:

这适用于属于多个开发团队的任何人(例如您自己的应用程序和您的公司)。

如果您使用一组凭据构建构建并使用不同的凭据重新签名(例如,用于 adhoc/appstore 分发),您必须确保构建最初是使用属于同一 iOS 开发团队的凭据构建和签名的。您重新签名的分发凭证属于.

因此,不要使用“Indy Dev Inc”凭据构建,然后尝试使用“Company Inc”凭据进行部署。确保设置“Company Inc”开发和分发凭据,并使用它们。

我在我的博客上发布了更多信息:http: //omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/

于 2011-06-09T09:20:01.170 回答
2

我有同样的问题。我准备在这个问题上认输,但是当我使用 Murky 签入我的代码时我想通了。我总是在签入之前浏览更改的文件的差异。这次这样做时,我注意到 project.pbxproj 文件已更改......并且在分发部分中的条目“PROVISIONING_PROFILE[sdk=iphoneos*] ”是空白的。

退出并重新启动 Xcode 对我不起作用。相反,我进入了我的项目和目标设置并更改了代码签名以直接选择我的分发配置文件,而不是依赖于自动选择功能。这样做会导致 project.pbxproj 文件填充正确的值,即使自动选择功能应该选择了与我手动选择的完全相同的配置文件。

我需要一杯啤酒...

于 2010-08-22T22:53:53.357 回答
2

在尝试了此处列出的所有其他修复后,我们向 Apple 记录了 TSI。遵循技术说明 TN2250中的所有步骤后,我们的问题是由于密封资源丢失或无效而引起的。在我们的例子中,它是._.DS_Store.

“…… ” 被称为 Apple Double 文件,是从不正确支持 HFS+ 的“资源分支”(用于代码签名)的文件系统中复制 Xcode 项目文件夹 *unzipped* 的结果。这些多余的“ ..” 文件结果并导致代码签名验证失败。

要从 Xcode 项目文件夹中清除有问题的 Apple Double 文件,请在 Xcode 项目文件夹中运行 dot_clean 命令,执行干净构建,然后重新归档并重新尝试提交。

dot_clean /the/path/to/xcode/project

注意:您可以将项目文件夹拖到终端中以自动填充路径

运行命令时没有消息,但项目构建可能会在您下次构建时显示有关该文件的警告。您可以忽略这一点,应用程序将验证并成功提交。

于 2012-01-20T01:01:08.277 回答
1

我遇到了类似的问题,但我不使用 entitlements.plist。然而,在十几次上传失败后,我检查了我的 info.plist 并发现了一些东西。我的 CFBundleIconFiles 数组有一个空条目。我删除了,重新提交,终于被接受了!

说真的,Apple 暴露这些验证错误有多难?

编辑: CFBundleIconFiles 所在的位置不会立即显现出来,因为它们使用不同的名称。在项目信息视图中,Ctl 单击并选择“显示原始键/值”,然后您将看到对 CFBundleWhatever 的引用。在这个编辑的例子中,他试图使用一个不存在的 icon=72-@2x.png 文件。

于 2010-09-04T22:22:29.307 回答
1

通过清理myProject.xcodeproj文件解决了这个问题(右键单击,打开包),包中包含来自共同开发者的文件,删除这些后问题解决了

于 2011-01-05T23:24:53.783 回答
1

对我来说,解决方案是在Apple Developer Provisioning Portal创建分发认证 。

于 2011-02-10T14:20:25.337 回答
1

如果应用程序不使用远程推送通知,我收到了无效的二进制文件,但我留下了用于注册推送的代码和用于注册/接收远程通知的回调委托未注释,即使该代码没有被使用。

这是最近的。我上周的最后一次提交很好。本周,它返回无效的二进制文件。幸运的是,有一封电子邮件解释了该错误。

于 2011-04-19T14:17:31.303 回答
1

对于它的价值,我想添加为我解决此问题的内容。我曾有一个 ?(问号)在我的应用程序标题中导致错误。

于 2011-06-13T04:49:28.613 回答
1

我尝试了所有其他建议的解决方案,但没有任何帮助。

我最终创建了一个新的 Xcode 项目并将我所有的代码和资源复制到其中。这样就成功了,我的应用程序被放入了审核队列。

我还可以推荐Apple关于调试/验证代码签名的技术说明。

于 2013-02-13T15:58:00.943 回答
0

今天刚遇到这个问题,但这里的答案没有帮助。我终于找到了问题所在。

确保使用下拉菜单:项目>编辑活动目标项目名称”将代码签名更改为分发 - 我在组和文件窗格中选择项目并使用显示项目信息而不是目标信息的信息按钮 - 非常令人困惑!只有当我在项目中关闭代码签名并构建它仍然想要代码签名时才意识到!

我认为这就是为什么在 Eddie 的帖子中他必须在 project.pbxproj 级别更改它的原因

同样在第一步的原始帖子中: 1. 在 Xcode 中,选择 Device|Release target 当然它应该是 Device|Distribution target?(假设此复制版本并根据供应门户中的 Apple 说明将其重命名为分发)

于 2010-06-02T11:53:34.613 回答
0

我的两分钱:

下载最新版本的应用程序加载器。我刚刚更新,现在收到不同的错误消息。

于 2010-08-09T16:50:41.437 回答
0

我刚刚经历了这个麻烦(再次),但这次我发现我的分发配置文件的状态为“无效”。如果您认为其他一切都正确,请仔细检查门户中的状态并更新/重新下载任何不处于活动状态的内容。

于 2010-09-23T18:57:59.963 回答
0

我在应用程序上传后收到了无效的二进制文件,没有电子邮件跟进说明失败的原因。我尝试一次做几件事,但我不确定以下哪一项实际上修复了它:

  1. 重新启动 Macbook Pro
  2. 将我的项目的源代码从 NTFS 驱动器移动到 HFS+ 驱动器并重新编译。
于 2011-01-28T05:18:11.133 回答
0

我对这个和 4.3 GM SDK 有疑问。我们的其中一款应用程序无法通过收到上传。原来是配置文件问题。我重新生成了应用商店配置文件,它运行良好。

于 2011-03-07T19:23:37.843 回答
0

我的解决方案涉及创建一个新的 App ID。我不确定为什么要修复它,但我怀疑它可能与 Bundle Identifiers 不匹配——创建新的 App ID 迫使我确保我的应用程序和 iTunes 期待同样的事情。

于 2011-10-07T15:40:59.680 回答
0

另一种解决方案:

对我来说,只需在“代码签名”下设置“发布”证书即可修复它。它们最初被设置为“不编码符号”。

于 2012-01-23T00:01:53.580 回答
0

对我来说,问题是通过使用非隔行选项重新保存 PNG 图像来解决的。在以前的版本中,允许使用隔行扫描 png,但知道此图像可能会导致无效的二进制文件。

我的苹果消息:损坏的图标文件 - 图标文件 iconGQ@2x.png 似乎已损坏。您的图标不能是隔行扫描的 PNG 文件。

您可以使用终端中的命令“file”查看 PNG 是否交错: Eva-Madrazos-MacBook-Pro-2:GQ 7 integracion ads Eva$ file *.png Default.png:PNG 图像数据,320 x 480, 8 位/彩色 RGB,非隔行扫描

祝你好运,伊娃

于 2012-08-28T11:54:59.520 回答
0

我想指出可以给 Apple 发送电子邮件并要求他们检查日志的可能性。在先尝试了很多事情之后,我就这样做了。差不多四个星期后有必要提醒他们,但最终他们回复并指出了问题的确切位置。

我的问题是我之前尝试过其他应用程序图标,并且对旧图像的引用仍然保留在“CFBundleIcons”中。我使用拖放功能设置图标,但我没有注意到在添加新引用之前旧内容没有完全清除。

要查看错误引用,有必要展开箭头以查看 plist 文件中的每个子元素。一个提示是右键单击文件并选择查看原始内容的选项。这样你就不需要扩展任何东西。

于 2012-10-18T05:49:58.563 回答
0

uuid 是不允许的。我通过删除所有 [[UIDevice currentDevice] uniqueIdentifier] 来修复它;

于 2013-05-14T07:21:09.603 回答
0

自 2013 年 5 月 1 日起,Apple 更新了他们的 iOS 人机界面指南,因此如果您想上传新的应用程序或更新,它必须是 iphone 5 (4inch) 友好的 - 这意味着它不应该是在更大的设备上运行的 3.5 英寸应用程序屏幕。

来自苹果:

亲爱的开发者,

我们发现您最近交付的“-------------”存在一个或多个问题。要处理您的交付,必须更正以下问题:

iPhone 5 优化要求 - 您的二进制文件未针对 iPhone 5 进行优化。截至 5 月 1 日,提交的所有新 iPhone 应用程序和应用程序更新必须支持 iPhone 5 上的 4 英寸显示屏。所有应用程序必须包含适当大小的启动图像。查看 iOS 人机界面指南,了解有关 iPhone 5 支持的更多信息。

更正这些问题后,请转到“版本详细信息”页面并单击“准备上传二进制文件”。继续完成提交过程,直到应用状态为“等待上传”。然后,您可以提供更正后的二进制文件。

问候,

应用商店团队

于 2013-05-17T16:35:34.993 回答
0

还有一个二进制文件将被视为无效的实例。从 2015 年 2 月 1 日开始,新的 iOS 应用程序需要支持 64 位架构。这是来自苹果的电子邮件:

亲爱的开发者,

我们发现您最近交付的“家庭 - 招聘”存在一个或多个问题。要处理您的交付,必须更正以下问题:

缺少 64 位支持 - 从 2015 年 2 月 1 日开始,提交到 App Store 的新 iOS 应用程序必须包含 64 位支持并使用 iOS 8 SDK 构建。从 2015 年 6 月 1 日开始,应用程序更新也需要遵循相同的要求。要在您的项目中启用 64 位,我们建议使用“标准架构”的默认 Xcode 构建设置来构建具有 32 位和 64 位代码的单个二进制文件。

更正这些问题后,您可以重新交付更正后的二进制文件。

问候,

应用商店团队

于 2015-03-16T05:08:12.523 回答
0

就我而言,它是项目二进制文件中包含的 TestFlight SDK。

我从不同的旧项目源(包括 testflight)创建了一个新项目,但由于该项目是具有新 ID 的新项目,因此此处不再允许使用 TestFlight SDK。

我删除了它,然后存档并再次上传。这次没有“无效的二进制”错误。

于 2015-08-03T09:00:12.800 回答