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


78

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

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


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

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


Answers:


35

根据我的经验,Xcode有时会对使用哪个签名证书感到困惑。对代码签名设置进行任何更改(并执行干净的构建)后,我习惯于退出并重新启动Xcode来解决此问题。


1
试过这个,仍然有麻烦。我正在使用Xcode的Build&Archive-> Upload to iTunes。此后是否还有其他步骤?
Quantumpotato 2010年

如果使用独立的应用程序上载程序,则可能会获得更好的诊断信息。
Mark Bessey,2010年

22

我只想提一下,我也从命令行获得了zip的问题。问题出在默认情况下它处理符号链接的方式。使用:

zip -y -r myapp.zip myapp.app

解决了这个问题。


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

改变指导以保护无辜者


7

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

在我的情况下,我使用zip -r myapp.zip myapp.app Turns out压缩文件,zip命令将捆绑包拧紧。从取景器压缩它使其正常工作。


大约一个月前,我发生了完全相同的事情。真气
jbrennan

刚刚有同样的解决方案。我在下面尝试了@shirikodama的解决方案,但没有成功-您是否找到了一种在命令行中进行压缩的方法?
杰西·贝德

3
没关系,我先压缩了一个cp -r然后压缩了,正是cp那个把应用程序中的符号链接搞砸了。应该cp -R保留符号链接。
杰西·贝德

7

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

祝大家好运:-D


我不敢相信这已解决。这是特别荒谬的,因为它们在Provisioning Portal文档中对权利文件如此明确。
devlord

6

另一个数据点:有一段时间,我的应用程序通过了。现在,我增加了对应用程序内购买的支持,突然,它由于“无效的二进制/无效签名”问题而失败。仔细查看后,我发现授权plist文件中的application-identifier值已关闭。

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

导致“无效的二进制”。



5

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

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

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


4

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

我不知道到底是什么解决了问题,但是在成功尝试之前,我关闭了Xcode和Firefox并重新启动了它们。我猜这些应用程序之一有一些不好的味道。


我发现除了Safari之外,其他任何问题都可能是导致大多数问题的原因,因此我想为什么将它们替换为App Uploader。当我不使用Safari时,我经常遇到从配置门户下载证书/配置文件的问题
Anthony Main 2010年

4

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


4

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

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

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

一旦决定撤消所有内容并重新开始,创建新内容并重新安装仅用了5分钟。



3

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

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

如果您使用一组凭据构建该版本,然后使用其他凭据重新签名(例如,用于即席/应用商店分发),则必须 确保该构建最初是使用与iOS属于同一iOS开发团队的凭据构建和签名的。与您重新签名的发行凭证属于

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

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


我已经与Apple工程师确认(上周在WWDC上),可以重新签署由完全不同的开发人员使用不同的配置文件构建的二进制文件。不幸的是,我在执行此任务时也遇到了问题... :(
livingtech

2

我有同样的问题。我已经准备好解决这个问题,但是当我使用Murky来检查代码时,我就想出了办法。我总是在签入之前略过已更改文件的差异。这时,我注意到project.pbxproj文件已更改....并且在“分发”部分中输入了“ PROVISIONING_PROFILE [sdk = iphoneos *]”条目”是空白。

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

我要啤酒...


2

在尝试了此处列出的所有其他修复程序之后,我们与Apple记录了TSI。遵循技术说明TN2250中的所有步骤之后,由于缺少密封资源或无效资源,导致了我们的问题。就我们而言._.DS_Store

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

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

dot_clean /the/path/to/xcode/project

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

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


1

通过清理myProject.xcodeproj文件(右键单击,打开软件包)来解决此问题,该软件包包含来自联合开发人员的文件,删除这些文件后,问题得到解决



1

为了它的价值,我想补充一下为我解决此问题的内容。我曾有一个 ?(问号)出现在导致错误的应用标题中。


1

如果该应用程序不使用远程推送通知,我会收到一个无效的二进制文件,但是即使未使用该代码,我也没有评论用于注册推送的代码和用于注册/接收远程通知的回调委托。

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


1

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

认真地说,Apple暴露这类验证错误有多难?

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


0

我的两分钱:

下载最新版本的Application Loader。我刚刚更新,现在收到其他错误消息。


0

我只是再次经历了这一麻烦,但是这次我发现我的分发配置文件的状态为“无效”。如果您认为其他所有方法都正确,请再次检查门户中的状态,然后更新/重新下载未处于“活动”状态的所有内容。


0

上传应用程序后,我收到了无效的二进制文件,但没有收到有关失败原因的电子邮件跟踪。我尝试一次做几件事,但不确定以下哪项真正解决了问题:

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

0

我对此和4.3 GM SDK有问题。我们的其中一个应用无法将其上传过去。原来是供应配置文件问题。我重新生成了应用商店的配置文件,它运行良好。


0

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


0

另一个解决方案:

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


0

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

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

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

祝你好运,伊娃


0

我想指出有可能通过电子邮件向Apple发送电子邮件,并要求他们检查其日志。我只是在尝试了很多东西之后才这样做的。在将近四个星期后,有必要提醒他们,但最后他们回答并指出了问题的确切地点。

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

要查看错误的参考,必须展开箭头以查看plist文件中的每个子元素。技巧之一是右键单击文件,然后选择用于查看原始内容的选项。这样,您将不需要扩展任何内容。


0

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

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

我还可以推荐有关代码签名的Apple技术注释,以进行调试/验证。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.