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

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


笔记:原始问题的详细信息已被删除,因为此页面已变成一个存储库,其中包含有关该特定错误消息的可能原因的所有信息。

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

有帮助吗?

解决方案

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

其他提示

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

zip -y -r myapp.zip myapp.app

解决了这个问题。

我有同样的问题并通过以下方式解决:

属性证书安装在我的开发计算机上,并且 mobileprovision.embedded 包含在分发存档中。经过一个小时左右的谷歌搜索和挖掘,我找到了错误的根源。在 Xcode 中,我复制了发布配置并创建了新的分发配置,然后将签名身份更改为我的分发证书。但是,即使在 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;
};

改变指南以保护无辜者

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

就我而言,我使用压缩文件 zip -r myapp.zip myapp.app事实证明,zip 命令搞砸了捆绑包。从取景器中压缩它就可以了。

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

祝大家好运:-D

另一个数据点:有一段时间,我的应用程序通过了。现在我添加了对应用内购买的支持,突然它因“无效二进制/无效签名”问题而失败。仔细查看,发现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

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

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

对我来说,修复方法是将构建设置为 iphone 设备,就像我通常使用模拟器一样,但它不会包含配置文件...

这可能是一个菜鸟错误。通常,您无法构建到设备,但当您进行分发时,您可以。

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

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

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

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

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

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

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

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

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

简短的回答是“最终我仔细检查了我的 info.plist 并发现了一些东西。我按照新准则添加了 CFBundleIconFiles,但数组列表中有一个空条目。我把它删除并重新提交,终于被接受了!”

我有一个类似的问题,但在 Monotouch 中。我发现我的发布配置文件设置为使用开发人员证书。它应该看起来像这样:enter image description here

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

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

如果您使用一组凭据构建构建并使用另一组凭据重新签名(例如对于临时/应用程序商店分发),您必须 确保构建最初是使用属于您重新签名的分发凭据所属的同一 iOS 开发团队的凭据构建和签名的.

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

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

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

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

我需要一杯啤酒...

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

这 ”。." 称为 Apple Double 文件,是将 Xcode 项目文件夹(*解压缩*)复制到不正确支持 HFS+ 的“资源分支”(用于代码签名)的文件系统并从该文件系统复制回来的结果。这些额外的“..” 文件结果并导致代码签名验证失败。

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

dot_clean /the/path/to/xcode/project

笔记:您只需将项目文件夹拖到终端即可自动填充路径

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

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

对我来说,解决方案是在以下位置创建分发认证:Apple 开发者配置门户.

不管怎样,我想补充一下为我解决这个问题的内容。我曾有一个 ?(问号)在我的应用程序标题中导致了错误。

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

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

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

说真的,苹果要揭露这类验证错误有多难?

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

我的两分钱:

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

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

应用程序上传后,我收到了无效的二进制文件,但没有电子邮件跟进说明失败的原因。我尝试同时做几件事,但我不确定以下哪一项实际上解决了这个问题:

  1. 重新启动 Macbook Pro
  2. 将我的项目的源代码从 NTFS 驱动器移至 HFS+ 驱动器并重新编译。

我对此和 4.3 GM SDK 都存在问题。我们的一款应用程序无法通过收到的上传。事实证明这是一个配置文件问题。我重新生成了应用程序商店配置文件,效果很好。

我的解决方案涉及创建一个新的应用程序 ID。我不确定为什么会修复它,但我怀疑它可能与捆绑标识符不匹配 - 创建新的应用程序 ID 迫使我确保我的应用程序和 iTunes 期望相同的事情。

另一个解决方案:

对我来说,只需在“代码签名”下设置“发布”证书即可解决此问题。它们最初被设置为“不编码签名”。

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

我的苹果留言:图标文件损坏 - 图标文件 iconGQ@2x.png 似乎已损坏。您的图标不得是交错的 PNG 文件。

您可以使用终端中的“file”命令查看 PNG 是否是交错的:EVA-MADRAZOS-MACBOOK-PRO-2:GQ 7 Integracion ADS EVA $文件 *.png default.png:PNG 图像数据,320 x 480,8 位/彩色 RGB,逐行扫描

祝你好运,伊娃

我想指出可以向 Apple 发送电子邮件并要求他们检查日志。在先尝试了很多事情之后,我就这么做了。近四个星期后才需要提醒他们,但最后他们回复并指出了问题的具体位置。

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

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

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

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

我也可以推荐 苹果关于代码签名的技术说明 用于调试/验证。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top