无效的iPhone应用程序二进制文件

我试图上传一个应用程序到iPhone App Store,但是我从iTunes Connect得到这个错误信息:

您上传的二进制文件无效。 签名无效,或没有用苹果提交证书签名。


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

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

Xcode偶尔会对使用哪个签名证书感到困惑。 在改变代码签名设置(并做一个干净的构build)来解决这个问题之后,我养成了退出并重新启动Xcode的习惯。

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

zip -y -r myapp.zip myapp.app

解决了这个问题。

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

财产证书安装在我的开发机器上,mobileprovision.embedded包含在发布档案中。 谷歌和挖掘一个小时左右后,我发现源错误。 在Xcode里面,我复制了Releaseconfiguration,并创build了一个新的Distributionconfiguration,然后将签名标识更改为我的分发证书。 但是,即使在GUI中更新了项目文件未正确更新。

如果遇到同样的错误,请在project.pbxproj文件的[ProjectName] .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; }; 

您可以在第二部分看到签名身份和configuration文件不正确。 编辑它匹配第一节,重build,你应该是好去。 最后一个看起来像这样:

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

guid改变了保护无辜者

同样的问题,不一样的解决

在我的情况下,我使用zip -r myapp.zip myapp.app压缩文件zip -r myapp.zip myapp.app原来,zip命令拧紧了这个包。 从发现者压缩它使其工作。

我有同样的问题,并尝试了几件事情后 – 我从代码签名权利(只留下空白)删除.plist权利,它build立好,并上传最后。

祝你好运:–D

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

这很可能是因为我已经将configuration文件从通配符configuration文件replace为特定于应用程序的configuration文件(用于应用内购买)。 在旧configuration文件下合格的错误应用程序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 

导致“无效的二进制”。

我也有同样的问题,build设时我注意到configuration没有被添加在构build。

对我来说,修复是将构build设置为iphone设备,我通常使用模拟器,但不包括configuration文件…

这可能是一个noob错误。 通常你不能build立到设备,但是当你做分配你可以。

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

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

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

阅读了包括上述内容在内的各种post后, 终于为我工作的是完全开始! 我删除了与我的应用相关的每个证书和configuration文件。

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

在安装了三个证书(我注意到这个发行包含私钥和公钥)和两个configuration文件(我的发行configuration文件没有被标记为没有有效的证书!)之后,一切正常。

一旦我决定撤销一切,重新开始,只花了大约5分钟来创build新的东西,然后重新安装。

看到这个链接的解决scheme:

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

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

我有一个类似的问题,但在Monotouch。 我发现我的发布configuration文件被设置为使用开发人员证书。 它应该是这样的: 在这里输入图像说明

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

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

如果使用一组凭证构build构build版本,并使用其他版本(例如adhoc / appstore分发版本)重新对其进行构build,则必须确保构build版本最初是使用属于相同iOS开发团队的凭证您正在重新签名的分发凭证属于

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

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

我有同样的问题。 我已经准备好了解这个问题,但是当我用Murky去检查我的代码时,我发现了这个问题。 我总是在检查之前浏览更改过的文件。当我这样做的时候,我注意到project.pbxproj文件已经改变了….并且在分发部分中的“PROVISIONING_PROFILE [sdk = iphoneos *] “是空白的。

退出并重新启动Xcode不适合我。 相反,我进入了我的项目和目标设置,并更改了代码签名,直接select我的分发configuration文件,而不是依靠自动selectfunction。 这样做会导致project.pbxproj文件填充正确的值,即使自动selectfunction应该select与我手动select的完全相同的configuration文件。

我需要啤酒

在尝试了这里列出的所有其他修复之后,我们用苹果电脑login了一个TSI。 按照技术说明TN2250中的所有步骤,我们的问题是由于密封资源丢失或无效造成的。 在我们的例子中是._.DS_Store

“… 被称为Apple Double文件,并且是将Xcode Project文件夹(* unzipped *)复制到不正确支持HFS +的“资源分支”(用于代码签名)的文件系统上并从其返回的结果。 这些额外的“… ” 文件结果并导致代码签名validation失败。

要从Xcode项目文件夹中清理有问题的Apple Double文件,请在您的Xcode项目文件夹上运行dot_clean命令,进行清理生成,然后重新归档并重新尝试提交。

 dot_clean /the/path/to/xcode/project 

注意:只需将项目文件夹拖入terminal即可自动填充path

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

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

对于我来说,解决scheme是在Apple Developer Provisioning Portal上创build一个分发authentication。

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

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

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

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

严重的是,苹果公司要揭露这种validation错误有多难?

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

我的两分钱:

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

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

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

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

我遇到了4.3 GM SDK的问题。 我们的一个应用程序不会让它通过上传收到。 原来是configuration文件问题。 我重新生成了应用程序商店configuration文件,它工作正常。

我的解决scheme涉及创build一个新的App ID。 我不清楚为什么修复它,但我怀疑它可能是不匹配的捆绑标识符 – 创build新的应用程序ID迫使我确保我的应用程序和iTunes期待相同的事情。

另一个scheme

对我来说,简单地在“代码签名”下设置“发布”证书就可以解决这个问题。 他们最初被设置为“不要代码签名”。

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

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

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

祝你好运,伊娃

我想指出给苹果发电子邮件的可能性,并要求他们检查他们的日志。 我在做了大量的事情之后,就这么做了。 差不多四周后才提醒他们,最后他们回答说,指出了问题的确切位置。

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

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

我尝试了所有其他解决scheme,但没有任何帮助。

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

我也可以推荐苹果的代码签名技术说明进行debugging/validation。

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