【问题标题】:Invalid iPhone Application Binary无效的 iPhone 应用程序二进制文件
【发布时间】:2010-09-08 01:21:47
【问题描述】:

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

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


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

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

【问题讨论】:

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


【解决方案1】:

嗯,重复了几次步骤,我终于成功上传了我的应用。

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

【讨论】:

  • 我发现除了 Safari 之外的任何东西都可能是大多数问题的原因,因此我猜为什么他们用 App Uploader 代替了它。不使用 Safari 时,我经常遇到从配置便携式设备下载证书/配置文件的问题
【解决方案2】:

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

【讨论】:

  • 试过了,还是有问题。我正在使用 Xcode 的 Build & Archive -> Upload to iTunes。在此之后还有其他人需要做另一步吗?
  • 如果您使用独立的应用上传程序,您可能会获得更好的诊断信息。
【解决方案3】:

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

我的开发机器上安装了属性证书,并且 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;
};

为了保护无辜者而改变了指南

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      就我而言,我使用zip -r myapp.zip myapp.app 压缩文件 事实证明, zip 命令搞砸了捆绑包。从查找器中压缩它使其工作。

      【讨论】:

      • 大约一个月前我也发生了同样的事情。真气。
      • 刚刚使用了同样的解决方案。我在下面尝试了@shirikodama 的解决方案,但没有成功 - 你找到在命令行中压缩的方法了吗?
      • 没关系,我正在做一个cp -r然后 zip,是cp 搞砸了应用程序中的符号链接。应该是cp -R 来保留符号链接。
      【解决方案6】:

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

      zip -y -r myapp.zip myapp.app

      解决了这个问题。

      【讨论】:

        【解决方案7】:

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

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

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

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

        【讨论】:

          【解决方案8】:

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

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

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

          【讨论】:

            【解决方案9】:

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

            祝大家好运:-D

            【讨论】:

            • 我不敢相信这解决了它。这特别荒谬,因为他们对供应门户文档中的权利文件如此明确。
            【解决方案10】:

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

            确保使用下拉菜单:Project>Edit Active Target "ProjectName" 将 Code Signing 更改为 Distribution - 我在 Groups & Files 窗格中选择了项目并使用显示 PROJECT 信息而不是 TARGET 信息的信息按钮 - 非常混乱!直到我在项目中关闭代码签名并构建它仍然想要代码签名时才意识到!

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

            也在第一步的原始帖子上: 1. 在 Xcode 中,选择 Device|Release target 当然应该是设备|分发目标? (假设这个复制的版本并根据供应门户中的 Apple 说明将其重命名为 Distribution)

            【讨论】:

              【解决方案11】:

              我的两分钱:

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

              【讨论】:

                【解决方案12】:

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

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

                我需要一杯啤酒……

                【讨论】:

                  【解决方案13】:

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

                  说真的,Apple 公开这些验证错误有多难?

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

                  【讨论】:

                    【解决方案14】:

                    解决方法见此链接:

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

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

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                        【解决方案16】:

                        通过清理myProject.xcodeproj文件(右键打开包)解决了这个问题,包中包含来自co-developer的文件,删除后问题解决了

                        【讨论】:

                          【解决方案17】:

                          我在应用上传后收到了无效的二进制文件,没有电子邮件跟进说明失败的原因。我尝试一次做几件事情,但我不确定以下哪一项实际上修复了它:

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

                          【讨论】:

                            【解决方案18】:

                            我遇到了类似的问题,但在 Monotouch 中。我发现我的发布配置文件设置为使用开发人员证书。它应该如下所示:

                            【讨论】:

                              【解决方案19】:

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

                              【讨论】:

                                【解决方案20】:

                                我对这个和 4.3 GM SDK 有疑问。我们的其中一款应用程序无法通过收到上传。原来是配置文件问题。我重新生成了应用商店配置文件,它运行良好。

                                【讨论】:

                                  【解决方案21】:

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

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

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

                                  【讨论】:

                                    【解决方案22】:

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

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

                                    【讨论】:

                                      【解决方案23】:

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

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

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

                                      所以不要使用“Indy Dev Inc”凭据构建,然后尝试使用“Company Inc”凭据进行部署。确保设置“Company Inc”开发和分发凭据,并使用它们。

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

                                      【讨论】:

                                      • 我已与 Apple 工程师确认(上周在 WWDC 上),可以重新签署由完全不同的开发人员使用不同的配置文件构建的二进制文件。不幸的是,我也遇到了该任务的问题...... :(
                                      【解决方案24】:

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

                                      【讨论】:

                                        【解决方案25】:

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

                                        【讨论】:

                                          【解决方案26】:

                                          在尝试了此处列出的所有其他修复后,我们向 Apple 记录了 TSI。遵循Technical Note TN2250 中的所有步骤后,我们的问题是由于密封资源丢失或无效而引起的。在我们的例子中是._.DS_Store

                                          “..”被称为 Apple Double 文件,它是将 Xcode 项目文件夹 *unzipped* 复制到不正确支持 HFS+ 的“资源分支”(用于代码签名)的文件系统上和从文件系统中复制回来的结果。这些额外的“..”文件结果并导致代码签名验证失败。

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

                                          dot_clean /the/path/to/xcode/project
                                          

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

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

                                          【讨论】:

                                            【解决方案27】:

                                            另一种解决方案:

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

                                            【讨论】:

                                              【解决方案28】:

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

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

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

                                              祝你好运, 伊娃

                                              【讨论】:

                                                【解决方案29】:

                                                我想指出向 Apple 发送电子邮件并要求他们检查日志的可能性。在先尝试了很多事情之后,我就这样做了。差不多四个星期后有必要提醒他们,但最终他们回复并指出了问题的确切位置。

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

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

                                                【讨论】:

                                                  【解决方案30】:

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

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

                                                  我也可以推荐Apples technical notes on code signing 进行调试/验证。

                                                  【讨论】:

                                                    猜你喜欢
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 2012-07-24
                                                    • 1970-01-01
                                                    • 2011-11-11
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    相关资源
                                                    最近更新 更多