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

nsit 发布于 2018-04-27 ios 最后更新 2018-04-27 09:35 844 浏览

我试图将应用程序上传到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的一般信息,请参阅Steps to upload an iPhone application to the AppStore
已邀请:

nsit

赞同来自:

好吧,在重复了几次这些步骤之后,我终于成功地上传了我的应用程序。 我不知道究竟是什么修复了它,但在成功尝试之前,我关闭了Xcode和Firefox并重新启动了它们。我想其中一个应用程序有一些不好的juju。

xsit

赞同来自:

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

eet

赞同来自:

我有同样的问题,并通过这种方式解决它: 财产证书安装在我的开发机器上,mobileprovision.embedded包含在发布档案中。谷歌和挖掘一个小时左右后,我发现错误来源。在Xcode里面,我复制了Release配置并创建了一个新的Distribution配置,然后将签名标识更改为我的分发证书。但是,即使在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;
};
您可以在第二部分看到签名身份和配置文件不正确。编辑它以匹配第一部分,重建,你应该很好去。最后一个看起来像这样:
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改为保护无辜者

nodio

赞同来自:

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

mnam

赞同来自:

同样的问题,不同的方案 在我的情况下,我使用zip -r myapp.zip myapp.app来压缩文件 原来,zip命令拧紧了捆绑包。从取景器压缩它使其工作。

funde

赞同来自:

我只是想提一下,我也有从命令拉链的问题 线也是如此。问题在于它默认处理符号链接的方式。使用: zip -y -r myapp.zip myapp.app 解决了这个问题。

fdolor

赞同来自:

在阅读包括上述内容在内的各种帖子后,终于为我工作的是完全开始!我删除了与我的应用相关的每个证书和配置文件。 我重新创建了一个新的开发证书和一个新的分发证书。我再次下载了中间证书。然后我重新创建了开发配置文件和分发配置文件。 在安装了三个证书(我注意到这个发行包含私钥和公钥)和两个配置文件(我的发行配置文件没有被标记为没有有效证书!)之后,一切都奏效了。 一旦我决定撤销一切并重新开始,只需花费大约5分钟来创建新的内容并重新安装。

uin

赞同来自:

我也遇到了同样的问题,在构建时我发现配置没有添加到构建中。 对我来说,修复是将构建设置为iphone设备,因为我通常使用模拟器,但不包括配置文件... 这可能是一个noob错误。通常情况下,你不能建立到设备,但是当你做分配时你可以。

uid

赞同来自:

我有同样的问题,并尝试了几件事后 - 我从代码签名权利删除.plist权利(只留下它空白),它建立罚款和上传最后。 祝你好运:--D

kesse

赞同来自:

今天刚刚有这个问题,但这里的答案没有帮助。我终于找到了问题。 确保使用下拉菜单:项目>编辑活动目标“ProjectName”,将代码签名更改为分布 - 我在组和项目中选择项目。文件窗格,并使用显示项目信息而不是目标信息的信息按钮 - 非常混乱!只有当我在项目中将代码签出并构建并且仍然想要代码签名时才意识到! 我想这就是为什么在Eddie的帖子中,他不得不在project.pbxproj级别改变它 也在第一步的原始帖子中: 1.在Xcode中,选择设备|释放目标 当然,它应该是设备|分配目标? (假设此复制版本在供应门户中按照Apples指令进行分发并重新命名)

znihil

赞同来自:

我的两分钱: 下载最新版本的Application Loader。我刚刚更新,现在得到一个不同的错误信息。

aad

赞同来自:

我有同样的问题。我准备好了解这个问题,但是当我用Murky去检查我的代码时,我发现了它。我总是在检查之前浏览发生变化的文件。当我这样做时,我注意到project.pbxproj文件已经更改....并且在分发部分中输入了“PROVISIONING_PROFILE [sdk = iphoneos *] “是空白的。 退出并重新启动Xcode不适用于我。相反,我进入了我的项目和目标设置,并更改了代码签名以直接选择我的分发配置文件,而不是依靠自动选择功能。这样做会导致project.pbxproj文件填充正确的值,即使自动选择功能应该选择与我手动选择的完全相同的配置文件。 我需要一杯啤酒......

onon

赞同来自:

我遇到了类似的问题,但我没有使用entitlements.plist。然而,在十几次失败的上传之后,我检查了我的info.plist并发现了一些东西。我的CFBundleIconFiles数组有一个空条目。我删除了这个并重新提交,并且最终被接受了! 认真的说,苹果有多难揭露这种验证错误? 编辑:它不是立即显示CFBundleIconFiles,因为它们使用不同的名称。在项目信息视图中,Ctl单击并选择“显示原始键/值”,然后您将看到对CFBundleWhatever的引用。在这位编辑的情况下,他试图使用一个不存在的icon=72-@2x.png文件。

modit

赞同来自:

请参阅此链接以获取解决方案: http://greghaygood.com/2010/09/04/invalid-binary-message-from-itunesconnect 简单的回答是“最终我仔细检查了我的info.plist并发现了一些东西,我按照新的指导方针添加了CFBundleIconFiles,但是在数组列表中有一个空条目,我删除了它并重新提交,最后它是公认!”

prem

赞同来自:

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

zex

赞同来自:

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

ueaque

赞同来自:

在应用上传后我收到了一个无效二进制文件,没有电子邮件跟踪为什么它失败。我试着一次做了几件事,我不确定下列哪一项实际上修正了它:

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

ased

赞同来自:

我有一个类似的问题,但在Monotouch中。我发现我的发布配置文件设置为使用开发人员证书。它应该是这样的:

enter image description here

yut

赞同来自:

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

vvelit

赞同来自:

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

sest

赞同来自:

另一个数据点:有一段时间,我的应用程序经历了。现在我已经添加了对应用内购买的支持,并且突然失败并出现“无效二进制/无效签名”问题。仔细查看后,我发现权利plist文件中的应用程序标识符的值已关闭。 这很可能与我已将配置文件从通配符配置文件替换为特定于应用程序的配置文件(用于应用内购买)相关。在旧配置文件下合格的错误应用程序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
导致“无效的二进制”。

mnam

赞同来自:

我收到一个无效的二进制文件,如果应用程序没有使用远程推送通知,但是我留下了用于注册推送的代码和用于注册/接收远程通知的回调代表,即使代码没有被使用也没有注释。 这是最近的。我上星期的最后一次提交很好。本周它返回无效的二进制文件。幸运的是,有一封电子邮件解释了错误。

zearum

赞同来自:

看来这个问题有很多原因。这是我的解决方案: 这适用于属于多个开发团队的任何人(例如您自己的应用程序和您的公司)。 如果您使用一组凭据构建构建版本,并使用其他版本(例如adhoc/appstore版本)对其进行重新签名(例如,对于adhoc/appstore发行版),则必须确保构建版本最初是构建的&使用属于同一iOS开发团队的凭证进行签名,以便您重新签署的分发凭证属于。 因此,请勿使用“Indy Dev Inc”凭据进行构建,然后尝试使用“Company Inc”凭据进行部署。确保你设置了“Company Inc”开发者和发行凭证,并使用它们。 我在我的博客上发布了更多关于此的信息:http://omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/

ea_qui

赞同来自:

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

zamet

赞同来自:

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

sut

赞同来自:

在尝试了此处列出的所有其他修复程序后,我们在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
注意:您只需将项目文件夹拖入终端即可自动填充路径 运行命令时没有消息,但在下一次构建时,项目构建可能会显示关于该文件的警告。你可以忽略这个,该应用程序将验证并提交成功。

hquas

赞同来自:

另一种解决方 对我来说,简单地在'代码签名'下设置'发布'证书就可以解决它。他们最初被设置为'不要编码'。

nqui

赞同来自:

对于我来说,问题是通过使用非隔行选项重新保存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,非隔行扫描 祝你好运,   伊娃

mut

赞同来自:

我想指出给苹果发电子邮件并要求他们检查他们的日志的可能性。我是在先尝试了很多东西之后才做到的。将近四周后有必要提醒他们,但最后他们回答并指出了问题的确切位置。 在我的情况下,问题是我以前尝试过其他应用程序图标,并且对旧图像的引用仍然保留在“CFBundleIcons”中。我使用了拖放功能来设置图标,但我没有注意到在添加新参考文件之前旧内容未完全清除。 为了查看错误的参考,有必要展开箭头来查看plist文件中的每个子元素。一个提示是在文件中右键单击并选择查看原始内容的选项。这样你就不需要扩展任何东西。

menim

赞同来自:

我尝试了所有其他解决方案,但没有任何帮助。 我最终创建了一个新的Xcode项目,并将所有代码和资源复制到其中。这个窍门,我的应用程序被放入审查队列。 我还可以推荐Apples technical notes on code signing进行调试/验证。

iid

赞同来自:

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

gqui

赞同来自:

截至2013年5月1日,Apple更新了其iOS人机界面指南,以便如果您希望上传新应用程序或更新,它必须是iPhone 5(4英寸)友好的 - 这意味着它不应该是一个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

mest

赞同来自:

当二进制文件被认为是无效的时候还有一个实例。从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

rsequi

赞同来自:

就我而言,它是包含在项目二进制文件中的TestFlight SDK。 我从一个不同的旧项目源(包括testflight)创建了一个新项目,但由于这个项目是一个新项目,所以新的ID不再允许使用TestFlight SDK。 我将其删除,然后归档并再次上传。这次没有“无效二进制”错误。