Xamarin.iOS出现Code signing failed问题如何处理
我最近遇到了一个奇怪的问题,项目可以编译,可以运行,但是就是在生成Archvie之后要对其进行sign and distribute时会报如下错误:
并且除此之外,没有其它信息; 我试过所有办法,比如重新生成证书、重建项目、重启IDE和电脑、甚至是移除项目中可疑的子项目的代码等等,但是都不管用。最后意外发现原来是由于bundle identifier包含大写字母导致的。。。 希望这个经验对你有用。
2018-04-04 后来的实践表面以上结论有误,我的项目又出问题了,至今没有找到症结;
2018-04-09
终于找到问题的原因了!!!!
首先这个问题的出现可能是由于我这个项目的特殊性导致的。我这个项目是一个基于Xamarin开发的输入法项目,项目是一个Xamarin.Form项目,结构大体如此:
其中IOSLib和SuiHanLib是我个人编写的两个类库,ThreeDiretion是Xamarin.Form项目,ThreeDiretion.iOS是Xamarin.iOS项目,ThreeDiretionKeyBoard是iOS Keyboard Extension扩展。
最开始,我只在ThreeDiretionKeyBoard中引用了IOSLib和SuiHanLib中的类型,项目的编写和运行一切顺利,但是在打包准备发布时,进行到sign and distrubte环节就总是出现上述图片中出现的问题,查看log给出的是一下信息:
Begining distribution, 2018/4/8 12:17:28
Channel: App Store
App Bundle Id: com.suihan.td, Version: 1.0.4
codesign -v -f -s "75BCAB46B9A6F6DDAE4CC293A6086F5C610749AB" "/var/folders/qc/5pggkbx565z7__bvx4fz6gsh0000gn/T/mdTmpDir1132857770/Payload/ThreeDiretion.iOS.app/PlugIns/ThreeDiretionKeyBoard.appex/Frameworks/Xamarin.Sdk.framework"
/var/folders/qc/5pggkbx565z7__bvx4fz6gsh0000gn/T/mdTmpDir1132857770/Payload/ThreeDiretion.iOS.app/PlugIns/ThreeDiretionKeyBoard.appex/Frameworks/Xamarin.Sdk.framework: bundle format unrecognized, invalid, or unsuitable
codesign exited with code 1
ERROR:Code signing failed.
Finshed
根据这个信息,我在网上搜索了很久,大部分都说问题与自行创建Resources文件夹有关,但是我实践并没有解决问题,为这个问题我折腾了很长时间,因为我的另一个项目:岁寒输入法项目并没有出现这个问题;
后来,想到有可能是iOS项目和Extension项目中包含的Xamarin.Sdk.framework不一致导致的,移除Extension中对IOSLib和SuiHanLib中类的引用后,签名通过!证明问题来自与对IOSLib和SuiHanLib的使用。
于是,我在iOS项目中也添加了对IOSLib和SuiHanLib的引用,但这还不行,还需要在项目中添加一个类继承IOSLib和SuiHanLib中的一个类(可能这样才能使得引用库真正的被打包进来吧),签名通过。
最后,这个问题并不是稳定出现的,换言之,此前我没有在iOS项目中引用那两个库的时候,签名也曾成功过,但是后来又莫名其妙地就不行了,我认为问题并不是我的配置有问题,而是Xamarin平台存在bug。
- 原文作者:岁寒
- 原文链接:http://www.suihanime.com/post/Xamarin/Xamarin.iOS%E5%87%BA%E7%8E%B0Code-signing-failed%E9%97%AE%E9%A2%98%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。