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

时间:2008-09-06 23:18:22

标签: iphone ios app-store code-signing itunesconnect

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

  

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


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

有关将iPhone应用程序提交到App Store的一般信息,请参阅Steps to upload an iPhone application to the AppStore

34 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:21)

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

zip -y -r myapp.zip myapp.app

解决了这个问题。

答案 2 :(得分:10)

我遇到了同样的问题并以这种方式解决了这个问题:

属性证书安装在我的开发计算机上,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;
};

guids改为保护无辜者

答案 3 :(得分:7)

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

在我的情况下,我使用zip -r myapp.zip myapp.app压缩文件 事实证明,zip命令拧紧了捆绑。从取景器中压缩它使它工作。

答案 4 :(得分:7)

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

祝你好运:-D

答案 5 :(得分:5)

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

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

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

答案 6 :(得分:5)

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

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

答案 7 :(得分:4)

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

答案 8 :(得分:4)

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

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

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

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

答案 9 :(得分:4)

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

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

答案 10 :(得分:4)

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

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

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

答案 11 :(得分:3)

我有一个类似的问题,但在Monotouch。我发现我的发布配置文件已设置为使用开发人员证书。它应该如下所示: enter image description here

答案 12 :(得分:3)

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

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

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

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

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

答案 13 :(得分:2)

我遇到了同样的问题。我已准备好解决这个问题,但当我使用Murky检查我的代码时,我想出来了。我总是在我签入之前浏览更改的文件上的差异。这次我这样做时注意到project.pbxproj文件已经改变了....在分发部分中,“PROVISIONING_PROFILE [sdk = iphoneos *]的条目“空白。

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

我需要一杯啤酒......

答案 14 :(得分:2)

在尝试了此处列出的所有其他修补程序后,我们使用Apple记录了TSI。在完成Technical Note TN2250中的所有步骤之后,我们的问题就是由于密封资源丢失或无效而导致的。在我们的例子中,它是._.DS_Store

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

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

dot_clean /the/path/to/xcode/project

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

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

答案 15 :(得分:1)

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

说真的,Apple公布这类验证错误有多难?

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

答案 16 :(得分:1)

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

答案 17 :(得分:1)

对我而言,解决方案是在以下位置创建分发认证: Apple Developer Provisioning Portal

答案 18 :(得分:1)

如果应用程序不使用远程推送通知,我收到了无效的二进制文件,但是我留下了用于注册push的代码,并且用于注册/接收远程通知的回调代理未注释,即使代码未被使用。

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

答案 19 :(得分:1)

对于它的价值,我想补充一下解决这个问题的原因。我曾有一个 ? (问号)在我的应用标题中导致错误。

答案 20 :(得分:0)

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

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

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

答案 21 :(得分:0)

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

  

亲爱的开发人员,

     

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

     

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

     

一旦这些问题得到纠正,您就可以重新发送   纠正二进制。

     

此致

     

App Store团队

答案 22 :(得分:0)

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

来自苹果:

  

亲爱的开发人员,

     

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

     

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

     

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

     

此致

     

App Store团队

答案 23 :(得分:0)

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

来修复它

答案 24 :(得分:0)

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

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

我还建议Apples technical notes on code signing进行调试/验证。

答案 25 :(得分:0)

我想指出向Apple发送电子邮件并要求他们检查日志的可能性。在做了大量的事情之后,我做到了这一点。在将近四周之后,有必要提醒他们,但最后他们回答并指出问题的确切位置。

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

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

答案 26 :(得分:0)

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

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

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

祝你好运,   EVA

答案 27 :(得分:0)

另一种解决方案:

对我来说,只需在“代码签名”下设置“发布”证书即可。他们最初被设置为“不要编码标志”。

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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

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

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

同样在第一步的原帖: 1.在Xcode中,选择Device | Release目标 当然它应该是设备|分发目标? (假设此复制的版本并根据Provisioning Portal中的Apples说明重命名为Distribution)

答案 30 :(得分:0)

我的两分钱:

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

答案 31 :(得分:0)

我遇到了这个以及4.3 GM SDK的问题。我们的其中一个应用程序无法通过上传收到它。它原来是一个配置文件问题。我重新生成了应用程序商店配置文件,它工作正常。

答案 32 :(得分:0)

我在应用上传后收到了无效二进制文件,没有关于失败原因的电子邮件跟进。我试着一次做几件事,我不确定以下哪一个实际修好了它:

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

答案 33 :(得分:0)

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