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

时间:2020-03-05 18:48:50  来源:igfitidea点击:

我正在尝试将应用程序上载到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和Firefox并重新启动了它们。我猜其中一个应用程序的枣汁不好。

回答

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

回答

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

财产证书已安装在我的开发计算机上,并且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;
};

改变指导以保护无辜者

回答

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

回答

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

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

回答

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

zip -y -r myapp.zip myapp.app

解决了这个问题。

回答

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

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

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

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

回答

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

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

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

回答

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

祝大家好运:-D

回答

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

确保使用下拉菜单: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)。

回答

我的两分钱:

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

回答

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

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

我要啤酒...

回答

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

严重地,Apple暴露这些类型的验证错误有多难?

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

回答

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

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

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

回答

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