怎样解决应用提交App Store后的Invalid Signature错误

两天前我正打算提交一个版本更新到App Store。这种archiving -> validating -> distributing的流程我已经很熟悉了,所以这次一切按部就班。结果连续两天尝试数十次的提交一直被苹果一封“Invalid Signature”给reject (Invalid Binary),每次都是在包成功上传iTunes几分钟后被机器自动驳回。


而后我在网上就这个问题翻了个遍,尝试了绝大部分别人提供的办法,包括彻底清理build文件夹,重新生成certificate和profile,重新对包做签名等等……archive正常,然后validate正常,distribute正常,在苹果开始处理它之前一切都是正常的,简直能把人搞疯,每次苹果都告诉我:


怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误


后来我开始找签名是如何生成的,我找到了codesign这个命令,用它检查了一下我的App。对于之前正常提交通过审核的版本它显示出:


怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误

对于总是出问题的*.app返回:

怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误

然后我打开了*.app/_CodeSignature/CodeResources这个文件,当真找到了这些在Xcode工程栏看不到的文件引用:

怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误

怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误

我预感这就是失败的原因,输入如下命令让Finder显示隐藏文件(把true改成false用来恢复原本隐藏状态):

defaults write com.apple.finder AppleShowAllFiles -bool true

果然找到了那几个罪魁文件,使用命令find . -name “.*” -print递归显示所有隐藏文件,使用find . -name “.*” -exec rm rf {} ;命令递归删除所有.*隐藏文件,之后再重新打包,上传,一切OK,很快程序进入了Waiting For Review状态。

怎样解决应用提交App <wbr>Store后的Invalid <wbr>Signature错误

Invalid Signature属于比较简单的状况,可以很清楚问题出在签名部分。CodeResources存储了所有资源文件在包中的路径和Hash值,整个包还有一个整体的Hash值,这个文件可以起到校验苹果收到的包(或者用户下载到的包)是完好还是损坏的作用,出了问题的包当然不会做进一步处理;codesign对包做签名时会把.*隐藏文件包含进去,但Xcode打包时并不把这类文件拷到目标包内。也许Xcode工具链认为签名是程序自动生成的用户不会手工干预,一定是可靠的就在提交前没有做CodeResources的验证,结果就出了篓子,工具链的乌龙事件让我花去了两天时间来解决,特在此记录,也许能帮助到搜到这里的同学。此事已向苹果反馈,最简单的至少他们可以让报错邮件再详细一点,不要Invalid Signature这么笼统。

来源:扑来树袋熊的博客

原创文章,作者:茶馆小二,禁止转载:https://youxichaguan.com/archives/29913

(0)
茶馆小二
上一篇 2015年6月2日 12:53 下午
下一篇 2015年6月2日 12:59 下午

相关推荐