我正在尝试将应用程序上载到iPhone App Store,但是我从iTunes Connect收到此错误消息:
您上传的二进制文件无效。签名无效,或者未使用Apple提交证书签名。
注意:原始问题的详细信息已删除,因为此页面已变成存储库,以存储有关该特定错误消息可能原因的所有信息。
有关将iPhone应用程序提交到App Store的常规信息,请参阅将iPhone应用程序上传到AppStore的步骤。
我正在尝试将应用程序上载到iPhone App Store,但是我从iTunes Connect收到此错误消息:
您上传的二进制文件无效。签名无效,或者未使用Apple提交证书签名。
注意:原始问题的详细信息已删除,因为此页面已变成存储库,以存储有关该特定错误消息可能原因的所有信息。
有关将iPhone应用程序提交到App Store的常规信息,请参阅将iPhone应用程序上传到AppStore的步骤。
Answers:
根据我的经验,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;
};
改变指导以保护无辜者
另一个数据点:有一段时间,我的应用程序通过了。现在,我增加了对应用程序内购买的支持,突然,它由于“无效的二进制/无效签名”问题而失败。仔细查看后,我发现授权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
导致“无效的二进制”。
请参阅此链接以获取解决方案:
http://greghaygood.com/2010/09/04/invalid-binary-message-from-itunesconnect
简短的回答是:“最终,我再次检查了info.plist并发现了一些东西。我按照新指南添加了CFBundleIconFiles,但是数组列表中有一个空条目。我删除了该条目并重新提交,最后公认!”
好吧,在重复了几次步骤之后,我终于成功上传了我的应用程序。
我不知道到底是什么解决了问题,但是在成功尝试之前,我关闭了Xcode和Firefox并重新启动了它们。我猜这些应用程序之一有一些不好的味道。
阅读了包括以上内容的各种帖子后,我尝试了各种事情。最终对我有用的是完全重新开始!我删除了与我的应用程序关联的每个证书和配置文件。
我重新创建了新的开发证书和新的发行证书。我再次下载了中间证书。然后,我重新创建了开发配置文件和分发配置文件。
安装了三个证书(这次我发现分发同时具有私钥和公钥)和两个配置文件(我的分发配置文件没有被标记为没有有效证书!)之后,一切正常。
一旦决定撤消所有内容并重新开始,创建新内容并重新安装仅用了5分钟。
我在Monotouch中遇到了类似的问题。我发现我的发布配置文件设置为使用开发人员证书。它看起来应该像这样:
看来这个问题有很多原因。这是我的解决方案:
这适用于属于多个开发团队的任何人(例如,您自己的应用程序和您的公司)。
如果您使用一组凭据构建该版本,然后使用其他凭据重新签名(例如,用于即席/应用商店分发),则必须 确保该构建最初是使用与iOS属于同一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文件夹***解压缩**复制到不正确支持HFS +的“资源叉”(用于代码签名)的文件系统上的结果。这些额外的“。” 文件结果并导致代码签名验证失败。
要从Xcode项目文件夹中清除有问题的Apple Double文件,请在Xcode项目的文件夹上运行dot_clean命令,进行干净构建,然后重新存档并重新尝试提交。
dot_clean /the/path/to/xcode/project
注意:您可以将项目文件夹拖到终端中以自动填充路径
运行命令时没有消息,但是下一次构建时,项目构建可能会显示有关文件的警告。您可以忽略它,该应用程序将验证并成功提交。
对我而言,解决方案是在以下位置创建分发证书: Apple Developer Provisioning Portal。
为了它的价值,我想补充一下为我解决此问题的内容。我曾有一个 ?(问号)出现在导致错误的应用标题中。
我遇到了类似的问题,但是我没有使用entitlements.plist。但是,在十二次上传失败之后,我检查了info.plist并发现了一些东西。我的CFBundleIconFiles数组有一个空条目。我删除了该内容,然后重新提交,终于被接受了!
认真地说,Apple暴露这类验证错误有多难?
编辑:CFBundleIconFiles不在哪里,因为它们使用了不同的名称。在项目信息视图中,单击Ctl并选择“显示原始键/值”,然后您将看到对CFBundleWhatever的引用。在此编辑器的情况下,他试图使用一个不存在的icon=72-@2x.png文件。
我只是再次经历了这一麻烦,但是这次我发现我的分发配置文件的状态为“无效”。如果您认为其他所有方法都正确,请再次检查门户中的状态,然后更新/重新下载未处于“活动”状态的所有内容。
对我来说,问题是通过使用非隔行扫描选项重新保存PNG图像来解决的。在以前的版本中,允许使用隔行png,但是知道此图像会导致无效的二进制文件。
我的苹果消息:损坏的图标文件-图标文件iconGQ@2x.png似乎已损坏。您的图标不得为隔行扫描的PNG文件。
您可以在终端中使用命令“文件”查看PNG是否为隔行扫描:Eva-Madrazos-MacBook-Pro-2:GQ 7集成广告Eva $ file * .png Default.png:PNG图片数据,320 x 480, 8位/彩色RGB,非隔行
祝你好运,伊娃
我尝试了所有其他建议的解决方案,但没有任何帮助。
我最终创建了一个新的Xcode项目,并将所有代码和资源复制到其中。这样就成功了,我的应用程序进入了审核队列。
我还可以推荐有关代码签名的Apple技术注释,以进行调试/验证。