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

后来我开始找签名是如何生成的,我找到了codesign这个命令,用它检查了一下我的App。对于之前正常提交通过审核的版本它显示出:
对于总是出问题的*.app返回:
然后我打开了*.app/_CodeSignature/CodeResources这个文件,当真找到了这些在Xcode工程栏看不到的文件引用:
我预感这就是失败的原因,输入如下命令让Finder显示隐藏文件(把true改成false用来恢复原本隐藏状态):
defaults write com.apple.finder AppleShowAllFiles -booltrue
果然找到了那几个罪魁文件,使用命令find . -name “.*”-print递归显示所有隐藏文件,使用find . -name “.*” -exec rm rf {};命令递归删除所有.*隐藏文件,之后再重新打包,上传,一切OK,很快程序进入了Waiting ForReview状态。
InvalidSignature属于比较简单的状况,可以很清楚问题出在签名部分。CodeResources存储了所有资源文件在包中的路径和Hash值,整个包还有一个整体的Hash值,这个文件可以起到校验苹果收到的包(或者用户下载到的包)是完好还是损坏的作用,出了问题的包当然不会做进一步处理;codesign对包做签名时会把.*隐藏文件包含进去,但Xcode打包时并不把这类文件拷到目标包内。也许Xcode工具链认为签名是程序自动生成的用户不会手工干预,一定是可靠的就在提交前没有做CodeResources的验证,结果就出了篓子,工具链的乌龙事件让我花去了两天时间来解决,特在此记录,也许能帮助到搜到这里的同学。此事已向苹果反馈,最简单的至少他们可以让报错邮件再详细一点,不要InvalidSignature这么笼统。