这个bug实在是恶心,我花了一天的时间去处理它,并且是在上线的时候!我不得不用一篇文章来记载,也是给自己长个记性!
bug是这样产生的,我做了一个sdk的项目,项目中通过workspace包含了数据sdk,UI sdk,以及demo,数据sdk可以独立存在。编译运行没问题。然后我用xcode7.2打包(为什么要用7.2打包,因为7.2之后的xcode不能把bitcode打进去),打包完成后再创建测试demo,xode7运行没问题,xode9运行报错!
Bug是这样的,直接上图:
乍一看,是swift版本不兼容,可是我这个是oc项目啊,swift你妹啊!Google搜!好,谷歌大人让我进行如下操作:Edit -> Convert -> To Current Swift Syntax...
好,我操作,尼马!点开神马都没有啊!好,我认为这不是谷歌的错。
弄了一上午,没结果,我压根没有建过swift
文件啊!要说跟swift
有半毛钱瓜葛的,就是之前用core data时建的xcdatamodel
文件,这个文件默认创建后是swift
的,(这里我要吐槽了,swift你妹啊!凭什么给我oc的默认swift?来,写xcode那个人过来我跟你聊聊人生,老实交待那个写swift的哥们是不是你老婆?)。于是我特意检查了下这个文件,没毛病,是oc的。
那到底什么鬼啊!谁能告诉我什么鬼?赠送香吻一个!
明明一切流程都没问题,但就是不能编译。为什么在原项目里就没问题,换了层皮爹妈就不认识了?
看安卓已经走发版流程了,尼马我还在调bug!本宝宝比安卓先做完啊有木有!
毫无头续,怎么办?只好从最低级的开始调,重建测试demo,对sdk及依赖库一点点删,一点点排查。
最终。。。。。。
终于。。。。。。
尼马终于逮到这个贱贱贱贱贱贱bug!
什么原因,就是TM coredate那个破文件xcdatamodel
的原因!那我之前不是说它没问题嘛?!是的,我刚才所言确实是没问题的,
然而。。。。。。
由于我之前建xcdatamodel
文件时删除过一次(默认是swift没改回来),但我是remove reference
,而不是move to trash
,导致实际上这个文件还是存在的,但又由于已不被原项目所引用,所以原项目不会存在问题。然而当我把它作为sdk引入到其他项目的时候(xcoredatad属于source文件,是需要暴露出去的),这个xcdatamodel
文件就被添加到工程里了,点开发现是这样:
你妹啊,坑爹啊!没有任何提示有木有!丝毫注意不到有木有!不过这个问题也带给我一些警示,其实也是给广大开发者特别是做SDK的一些提醒:
- 做SDK时如果删除了某个东西,而这个东西最终是要直接暴露给开发者的,最好直接
Move To Trash
,否则其他人接入的时候容易出现重名错误- 平时注意收集问题,在下次遇到的时候能够更快的找到问题点