我正在尝试将应用程序上传到iPhone App Store,但是我从iTunes Connect收到此错误消息:
您上传的二进制文件无效.签名无效,或者未使用Apple提交的证书签名.
注意:原始问题的详细信息已被删除,因为此页面已变为存储库,以获取有关该特定错误消息的可能原因的所有信息.
有关将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文件,并在您喜欢的编辑器中打开它.查找"分发"部分.我破碎的那个看起来像这样:
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; };
guids改变以保护无辜者
同样的问题,不同的解决方
在我的情况下,我使用zip -r myapp.zip myapp.app
Turns out 压缩文件,zip命令拧紧了捆绑包.从取景器压缩它使它工作.
我遇到了同样的问题,在尝试了几件事之后 - 我从代码签名权利中删除了.plist权利(只是留空),它构建得很好并且上传了最终版本.
祝你好运:-D
我也有同样的问题,在构建时我注意到构建中没有添加配置.
我的修复方法是将构建设置为iphone设备,因为我通常使用模拟器,但之后它不会包含配置文件......
这可能是一个noob错误.通常情况下,您无法构建设备,但是当您进行分发时,您可以.
另一个数据点:有一段时间,我的应用程序经历了.现在我已经添加了对应用内购买的支持,突然它失败了"无效的二进制/无效签名"问题.仔细观察后,我发现权利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
导致"无效的二进制文件".