无效的 iPhone 应用程序二进制

我正试图将一个应用程序上传到 iPhone 应用程序商店,但是我从 iTunes Connect 得到了这个错误消息:

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


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

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

51005 次浏览

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

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

根据我的经验,Xcode 有时会对使用哪个签名证书感到困惑。为了解决这个问题,我养成了在代码签名设置发生任何变化后退出并重新启动 Xcode 的习惯(并且进行了干净的构建)。

我也遇到了同样的问题,就这样解决了:

属性证书已经安装在我的开发计算机上,并且 mobile eprovision。经过一个小时左右的谷歌和挖掘,我发现了错误的来源。在 Xcode 内部,我复制了发布配置并创建了一个新的发布配置,然后将签名标识更改为我的发布证书。但是,即使在 GUI 中更新了项目文件,也没有正确地更新。

如果遇到同样的错误,请查看[ ProjectName ]。Pbxproj 文件的 xcodeproj 目录,并在您喜欢的编辑器中打开它。寻找分发部分。我那个坏掉的看起来像这样:

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;
};

为了保护无辜的人,警卫都换了

我遇到了一个问题: 我在上传之前将二进制文件添加到 Subversion。对二进制文件进行压缩,然后包含隐藏的。Svn 目录,搞乱了代码签名。

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

在我的例子中,我使用 zip -r myapp.zip myapp.app压缩文件 事实证明,zip 命令完成了捆绑包的操作,从查找程序压缩捆绑包可以使捆绑包工作。

我只是想提一下,我也有从命令压缩的问题 问题在于它默认处理符号链接的方式。使用:

Zip-y-r myapp.zip myapp.app

问题解决了。

在阅读了包括上面的帖子在内的各种帖子后,我尝试了各种各样的事情。对我来说最终奏效的是完全重新开始!我删除了所有与我的应用程序相关的证书和供应配置文件。

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

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

一旦我决定撤销一切并重新开始,只需要5分钟就可以创建新的东西并重新安装。

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

对我来说,解决方法是将构建设置为 iphone 设备,就像我通常使用模拟器的地方一样,但是它不包括供应配置文件..。

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

我也有同样的问题,在尝试了几种方法之后,我删除了。Plist 权限从代码签名权限(只是留下空白) ,它构建了罚款和上传最终。

祝你们好运

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

确保使用下拉菜单: 工程 > 编辑主动目标项目名称”改变代码签名到分发-我选择了在组和文件面板的项目,并使用信息按钮,显示 项目信息,而不是 目标信息-非常混乱!只有当我在项目中关闭代码并构建时才意识到它仍然需要代码签名!

我想这就是为什么在 Eddie 的帖子中,他不得不在 project. pbxproj 级别进行修改

第一步: 在 Xcode,选择设备 | 发布目标 当然它应该是设备 | 分发目标?(假设这个复制的版本并按照供应门户中的苹果指令将其重命名为“分发”)

我的建议是:

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

我也有同样的问题。在这个问题上,我已经准备放弃了,但是当我使用 Murky 检入代码时,我发现了这个问题。在我签入之前,我总是浏览已经更改的文件的差异。这次执行时,我注意到 project.pbxproj 文件已经发生了变化... ... 在分发部分,“ PROVISIONING _ PROFILE [ sdk = iphoneos * ]”的条目是空白的。

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

我需要啤酒。

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

说真的,对苹果来说揭露这些验证错误有多难呢?

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

查看下面的链接找到解决方案:

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

简短的回答是: “最后,我再次检查了 info.plist,发现了一些东西。我根据新的指导方针添加了 CFBundleIconFiles,但是在数组列表中有一个空项。我删除了它,重新提交,它终于被接受了!”

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

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

我收到一个无效二进制后,应用程序上传,没有电子邮件后续为什么它失败。我试着同时做几件事情,但是我不确定下面哪件事情能够真正解决它:

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

我在 Monotouch 也遇到过类似的问题。我发现我的发布配置文件被设置为使用开发人员证书。它应该是这样的: enter image description here

对我来说,解决方案是在下列地方创建一个分发证书: 苹果开发者供应门户

我对这个和4.3 GM SDK 有意见。我们的一个应用程序无法通过上传。结果证明这是一个供应配置文件问题。我重建了应用商店的档案,效果很好。

另一个数据点: 有一段时间,我的应用程序通过了。现在我已经添加了对应用程序内购买的支持,但是突然出现了“无效的二进制/无效签名”问题。仔细查看之后,我发现权利列表文件中的应用程序标识符的值是关闭的。

这很可能与我已经将配置配置文件从通配符替换为特定于应用程序的配置文件(应用程序内购买所需)有关。错误的应用程序 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

导致“无效二进制”。

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

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

看来这个问题有很多原因,我的解决办法是:

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

如果使用一组凭据构建构建,并使用另一组凭据重新签名(例如,对于 adhoc/appstore 发行版) ,则必须使用 确保构建最初构建并使用您重新签名的分发凭据所属的同一个 iOS 开发团队的凭据进行签名

所以不要使用“ Indy Dev Inc”凭证构建,然后尝试使用“ Company Inc”凭证进行部署。确保同时安装“ Company Inc”dev 和发行凭证,并使用它们。

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

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

我的解决方案包括创建一个新的 App ID。我不确定这到底是为什么,但我怀疑它可能是不匹配的捆绑标识符ーー创建新的应用程序 ID 迫使我确保我的应用程序和 iTunes 的预期是一样的。

在尝试了这里列出的所有其他修复程序之后,我们记录了苹果的 TSI。在遵循了 技术说明 TN2250中的所有步骤之后,我们的问题是由于缺少密封资源或资源无效而引起的。在我们的案例中是 ._.DS_Store

“ . ."它被称为 Apple Double 文件,是将 Xcode Project 文件夹 * unzip * 复制到一个不能正确支持 HFS + 的“资源分叉”(用于代码签名)的文件系统上并从该文件系统返回的结果。这些额外的”。.”文件会导致代码签名验证失败。

要清理 Xcode 项目文件夹中的有问题的 Apple Double 文件,请在 Xcode 项目文件夹中运行 dot _ clean 命令,进行一次清理构建,然后重新归档并重新尝试提交。

dot_clean /the/path/to/xcode/project

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

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

另一个解决办法:

对我来说,简单地设置“发布”证书下的“代码签名”修复它。他们最初被设置为“不代码签名”。

对我来说,这个问题是通过保存一个 PNG 图像与非隔行选项解决的。在以前的版本中,交错的 png 是允许的,但是要知道这个图像会导致无效的二进制文件。

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

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

祝你好运, 伊娃

我想指出给苹果发电子邮件并要求他们检查日志的可能性。在尝试了很多事情之后,我做到了。差不多四个星期之后,有必要提醒他们,但最后他们还是回答了,并指出了问题的确切位置。

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

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

我尝试了所有其他提议的解决方案,但都没有用。

我最终创建了一个 新的 Xcode 项目,并将我所有的代码和资源复制到其中。这招奏效了,我的应用程序进入了审查队列。

我还可以推荐使用 苹果代码签名技术说明进行调试/验证。

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

截至2013年5月1日,苹果公司更新了他们的 iOS 人机界面指南,如果你想上传一个新的应用程序或更新,它必须是 iphone 5(4英寸)友好-这意味着它不应该是一个3.5英寸的应用程序运行在更大的屏幕上。

来自苹果:

亲爱的开发商:

我们发现你方最近交付的货物有一个或多个问题 “————”。要处理您的交付,以下问题必须 更正:

IPhone5优化需求-您的二进制文件没有优化 截至5月1日,所有新的 iPhone 应用程序和应用程序更新都已提交 所有应用程序都必须包括一个4英寸的显示屏 启动适当大小的图像。了解更多关于 iPhone5的信息 通过审查 iOS 人机界面指南提供支持。

一旦这些问题得到了纠正,转到版本详细信息页面 然后点击“准备上传二进制文件”,继续提交 过程,直到应用程序状态为“等待上传。” 发送修正后的二进制文件。

问候,

应用程序商店团队

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

亲爱的开发商:

我们发现你方最近交付的货物有一个或多个问题 “家庭-招聘”。为了处理您的交付,以下问题 必须纠正:

缺少64位支持——从2015年2月1日开始新的 iOS 应用程序 提交到应用程序商店必须包括64位的支持和建立 从6月1日开始,2015年的应用程序更新也将需要 为了在您的项目中支持64位,我们 建议使用“ Standard”的默认 Xcode 生成设置 构建一个同时具有32位和64位的单一二进制文件 密码。

一旦纠正了这些问题,您就可以重新交付 修正后的二进制。

问候,

应用程序商店团队

在我的案例中,是包含在项目二进制文件中的 TestFlight SDK。

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

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