`TwitterKit5`重复警告的问题
近期做项目优化的时候,遇到一个问题。工程在pod TwitterKit5
之后,控制台会打印重复引入的警告:
objc[6342]: Class TWTRUserAuthRequestSigner is implemented in both /private/var/containers/Bundle/Application/633F77E5-38CF-4FA5-953B-66CCDC09A8D7/xxxxx.app/Frameworks/TwitterKit.framework/TwitterKit (0x107ab8220) and /private/var/containers/Bundle/Application/633F77E5-38CF-4FA5-953B-66CCDC09A8D7/xxxxx.app/Frameworks/TwitterCore.framework/TwitterCore (0x1067a92a0). One of the two will be used. Which one is undefined.
objc[6342]: Class TWTRSecItemWrapper is implemented in both /private/var/containers/Bundle/Application/633F77E5-38CF-4FA5-953B-66CCDC09A8D7/xxxxx.app/Frameworks/TwitterKit.framework/TwitterKit (0x107ab8270) and /private/var/containers/Bundle/Application/633F77E5-38CF-4FA5-953B-66CCDC09A8D7/xxxxx.app/Frameworks/TwitterCore.framework/TwitterCore (0x1067a92f0). One of the two will be used. Which one is undefined.
从警告消息来看,我们的工程中存在重复的类。这个时候我查看了Podfile.lock
文件,发现确实是引入了两个TwitterCore
:
使用过TwitterKit5
的同学都知道,TwitterKit5
是大神fork TwitterKit
后的工程(由于Twitter
本身已经不再维护TwitterKit
)。
所以开始的时候,我怀疑是fork
工程有问题,并在我在TwitterKit5
里面发现了RemoveCore
的分支:
然而,当我使用分支的方法去做的时候,发现虽然没有再引入TwitterCore
,但是工程会报错。同时我还验证了,原有的TwitterKit
本身就有这个问题。
好了,废话不多说,下面就来说一下解决办法。
消除警告
既然三方库已经在pod
的时候引入了,那么我就只需要不依赖多余的库就好了。
1、方案一
我们只需要在:
Pods-XXX.debug.xcconfig
Pods-XXX.release.xcconfig
文件中将依赖删除就可以了,也就是将-framework"TwitterCore"
删除。
这样做有一个弊端,就是每次pod
的时候,都需要手动去删除多余的依赖。
2、方案二
既然已经测试方案一
可行,那么我们就在方案一
的基础上,将手动
改为自动
,做一次技术升级。
这个时候我们就需要去修改Podfile
文件了,代码如下:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if target.name == "Pods-XXX" || target.name == "Pods-XXX"
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
xcconfig_mod = xcconfig.gsub(/-framework "TwitterCore"/, "")
File.open(xcconfig_path, "w") {|file| file << xcconfig_mod }
end
end
end
end
这样操作相当于去Hook
了Pods-XXX.debug.xcconfig && Pods-XXX.release.xcconfig
文件。每次pod
的时候会动态的修改它。
感兴趣的同学可以去了解一下post_install
,这里不做过多解释。
Tips:
在解决这个问题的过程中,我尝试去修改TwitterKit
源码,尝试用pods
的形式去引入TwitterCore
,而不是直接将库封装在里面,但是可能是版本的原因,没有成功。有兴趣的同学可以去尝试一下,如果成功了可以@我
🙏🙏🙏。