Podfile 文件配置编译环境
我们平时开发在测试环境,难免会添加一些用来调试的库,进行开发调试,方便自己更快的发现问题,定位问题,但是这些库我们是不希望在Release 环境下也被编译进去,干扰了线上代码的,所以就需要指定Pod库的编译环境,
我以滴滴研发的调试工具DoraemonKit为例
pod 'DoraemonKit', '~> 3.0.2', :configurations => ['Debug','Test']
我是多增加了Test 环境。这样子pod库就能区分在哪个环境编译哪些第三方库。
指定了Debug编译环境才编译的库,Release 环境还会编译么?
我最开始也是以为,指定了Debug 环境下编译的库,Release 环境下代码是干净的,不会有Debug 环境下才编译的库,其实不然,发现这个问题也是因为踩到了坑。还是以DoraemonKit为例:
iOS 13 刚出来的时候,我项目里面有DoraemonKit指定了Debug环境下编译,但是线上包有个崩溃,是由于一个TextView分类库 setKeyPath 引起的,而这个库我是没导入的,后来发现是DoraemonKit里面有引用这个库,但是Release 环境还是给编译进去了。后期版本DoraemonKit移除了对这个库的关联。也就没这个问题了。
最近DoraemonKit群里面在聊因为UIWebView 被苹果拒绝的上传包的问题,很多小伙伴都说自己的项目里已经不包含UIWebView了,为啥还是被拒了,查看是DoraemonKit里面包含了,当然作者很快更新了版本把UIWebView 替换掉了,还是很给力的。
然后Archive 时候也可以看下log日志,是能看到Release 环境还是编译了,虽然 + load 方法没走,头文件也不能被访问,但不是完全不被编译。现在我为了不影响线上代码,每次打线上包都要移除调试库,才放心。所以谁有完全不编译调试库的方式,烦请说一下,谢谢。
我以DoraemonKit为例,可不是说这是因为调试库引起的,是pod 指定编译环境,不能够完全不编译,DoraemonKit功能还是很强大的,感谢作者的辛苦付出。