美文网首页
`TwitterKit5`重复警告的问题

`TwitterKit5`重复警告的问题

作者: Jax_YD | 来源:发表于2022-05-20 11:25 被阅读0次

    近期做项目优化的时候,遇到一个问题。工程在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:

    16530143682125.jpg

    使用过TwitterKit5的同学都知道,TwitterKit5是大神fork TwitterKit后的工程(由于Twitter本身已经不再维护TwitterKit)。
    所以开始的时候,我怀疑是fork工程有问题,并在我在TwitterKit5里面发现了RemoveCore的分支:

    16530148620236.jpg

    然而,当我使用分支的方法去做的时候,发现虽然没有再引入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
    

    这样操作相当于去HookPods-XXX.debug.xcconfig && Pods-XXX.release.xcconfig文件。每次pod的时候会动态的修改它。
    感兴趣的同学可以去了解一下post_install,这里不做过多解释。


    Tips:
    在解决这个问题的过程中,我尝试去修改TwitterKit源码,尝试用pods的形式去引入TwitterCore,而不是直接将库封装在里面,但是可能是版本的原因,没有成功。有兴趣的同学可以去尝试一下,如果成功了可以@我🙏🙏🙏。


    参考文档:

    消除CocoaPods类重复实现警告

    相关文章

      网友评论

          本文标题:`TwitterKit5`重复警告的问题

          本文链接:https://www.haomeiwen.com/subject/jalfprtx.html