关于ios:无效的iPhone应用程序二进制文件

Invalid iPhone Application Binary

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

The binary you uploaded was invalid. The signature was invalid, or it was not signed with an Apple submission certificate.

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

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


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


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

zip -y -r myapp.zip myapp.app

解决了这个问题。


我遇到了同样的问题,并通过以下方式解决了这个问题:

财产证书已安装在我的开发计算机上,并且mobileprovision.embedded包含在发行档案中。经过一个小时左右的谷歌搜索和挖掘,我发现了错误的来源。在Xcode内部,我复制了Release配置并创建了新的Distribution配置,然后将签名身份更改为我的发行证书。但是,即使它已在GUI中更新,该项目文件也未正确更新。

如果遇到相同的错误,请在[ProjectName] .xcodeproj目录中查找project.pbxproj文件,然后在您喜欢的编辑器中将其打开。查找分发部分。我坏掉的一个看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
};

您会在第二部分中看到签名身份和配置文件不正确。编辑它以匹配第一部分,然后进行重建,您应该一切顺利。最后一个看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
};

改变指导以保护无辜者


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

祝大家好运:-D


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

就我而言,我正在使用zip -r myapp.zip myapp.app压缩文件
原来,zip命令将捆绑包拧紧了。从取景器压缩它可以正常工作。


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

这很可能与以下事实有关:我已将配置文件从通配符替换为应用程序特定的配置文件(应用程序内购买必需)。错误的应用程序ID符合旧配置文件的条件。它与info.plist中的应用程序ID不匹配,但显然iTunes对此予以宽恕。

因此,回顾一下:

1
2
3
info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.*

还可以

1
2
3
info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.foo

导致"无效的二进制"。


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

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

简短的答案是:"最终,我再次检查了info.plist并发现了一些东西。我按照新准则添加了CFBundleIconFiles,但是数组列表中有一个空条目。我删除了该条目并重新提交,最后公认!"


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

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

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


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


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

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

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

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


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


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

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


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

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

如果您使用一组凭据构建该构建,然后使用另一组凭据重新签名(例如,用于即席/应用商店分发),则必须确保该构建最初是使用与该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 Project文件夹*" unzipped"复制到不正确支持HFS +的"资源派生"(用于代码签名)的文件系统上的结果。 )。这些额外的" .."文件将导致并导致代码签名验证失败。

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

1
dot_clean /the/path/to/xcode/project

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

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


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


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

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

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


对我来说,解决方案是在以下位置创建分发证书:
Apple Developer Provisioning门户。


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

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


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


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

确保使用下拉菜单:Project> Edit Active Target" ProjectName"以将Code Signing更改为Distribution-我在Groups&Files窗格中选择Project,并使用Info按钮显示PROJECT信息,而不是TARGET信息-非常令人困惑!仅当我在项目中关闭代码签名并构建并且仍然想要进行代码签名时才意识到!

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

同样在第一步的原始帖子中:
1.在Xcode中,选择Device | Release目标
当然应该是Device | Distribution目标吗? (假设此复制版本已发布,并按照Provisioning Portal中Apple的指示将其重命名为Distribution)。


还有另外一种情况,认为二进制文件无效。从2015年2月1日开始,新的iOS应用程序需要支持64位架构。这是来自苹果的电子邮件:

Dear developer,

We have discovered one or more issues with your recent delivery for
"Home - Recruitment". To process your delivery, the following issues
must be corrected:

Missing 64-bit support - Beginning on February 1, 2015 new iOS apps
submitted to the App Store must include 64-bit support and be built
with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need
to follow the same requirements. To enable 64-bit in your project, we
recommend using the default Xcode build setting of"Standard
architectures" to build a single binary with both 32-bit and 64-bit
code.

Once these issues have been corrected, you can then redeliver the
corrected binary.

Regards,

The App Store team


自2013年5月1日起,Apple更新了其iOS人机界面指南,因此,如果您希望上传新应用或更新,则该应用必须是iphone 5(4英寸)友好型-这意味着它不应该是在较大的iPhone上运行的3.5英寸应用屏幕。

从苹果:

Dear developer,

We have discovered one or more issues with your recent delivery for
"-------------". To process your delivery, the following issues must
be corrected:

iPhone 5 Optimization Requirement - Your binary is not optimized for
iPhone 5. As of May 1, all new iPhone apps and app updates submitted
must support the 4-inch display on iPhone 5. All apps must include a
launch image of the appropriate size. Learn more about iPhone 5
support by reviewing the iOS Human Interface Guidelines.

Once these issues have been corrected, go to the Version Details page
and click"Ready to Upload Binary." Continue through the submission
process until the app status is"Waiting for Upload." You can then
deliver the corrected binary.

Regards,

The App Store team


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


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

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

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


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

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

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


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

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

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

祝好运,
伊娃


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

  • 重新启动Macbook Pro
  • 将我的项目的源代码从NTFS驱动器移至HFS +驱动器,然后重新编译。

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


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

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

    我将其删除,然后存档并再次上传。这次没有"无效的二进制"错误。


    我的两分钱:

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


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


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


    另一个解决方案:

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


    推荐阅读