【问题标题】:How to fix duplication error of GoogleUtilities Swift?如何修复 GoogleUtilities Swift 的重复错误?
【发布时间】:2020-04-03 16:37:06
【问题描述】:

我正在使用 firebase 来跟踪我的项目中的崩溃,并且我正在我的项目中使用以下 pod。

 pod 'FirebaseCore', '6.6.4'
 pod 'FirebaseMessaging', '4.3.0'
 pod 'FirebaseAnalytics','6.3.1'

在归档此项目以放置 testflight 构建时,我收到以下 google 实用程序的重复错误:

 Multiple commands produce '/Path/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GoogleUtilities.framework':
 1) Target 'GoogleUtilities-00567490' has create directory command with output '/Path//IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GoogleUtilities.framework'
 2) Target 'GoogleUtilities-54e75ca4' has create directory command with output '/Path//IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GoogleUtilities.framework'

当我在构建设置中检查我的 Pods 设置时,我看到谷歌实用程序在项目中添加了两次。我已删除其中一个出现错误的 GoogleUtilities。

注意:我可以运行构建,但无法存档。在不更改旧版构建系统的情况下,是否有任何解决方法可以实现此构建?

因为我已经为我的 SDK 启用了库分发,所以当我对旧版进行更改时,它会引发错误。

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

    更新 Podfile 以明确请求所有需要的 GoogleUtilties 子规范。检查 Podfile.lock 以找到列表。

    CocoaPods issue 有更多详细信息。

    【讨论】:

    【解决方案2】:

    当我使用非常相似但不相等的 firebase 依赖项向我的项目添加一个新目标时,我遇到了这个问题,因此 GoogleUtilities 被复制了,因为我的另一个目标不需要与主要目标一样多的实用程序依赖项,所以基本上(在 Paul Beusterien 回答的帮助下)前往 Pods 项目并查看两个目标(GoogleUtilities-xxx)-> Build Phases -> Compile Sources 并查看添加的文件中的差异,基本上在新目标中缺少“GoogleUtilities” /UserDefaults' 和 'GoogleUtilities/MethodSwizzler' 但这在任何情况下都可能不同,所以我只是做了这样的编译

    platform :ios, '13.0'
    
    def google_utilites
      pod 'GoogleUtilities/AppDelegateSwizzler'
      pod 'GoogleUtilities/Environment'
      pod 'GoogleUtilities/Logger'
      pod 'GoogleUtilities/MethodSwizzler'
      pod 'GoogleUtilities/NSData+zlib'
      pod 'GoogleUtilities/Network'
      pod 'GoogleUtilities/Reachability'
      pod 'GoogleUtilities/UserDefaults'
    end
    
    abstract_target 'AggregatedPodsTarget' do
      use_frameworks!
    
      google_utilites
      
      pod 'FirebaseCore'
      pod 'FirebaseAuth'
      pod 'FirebaseFirestore'
      pod 'FirebaseStorage'
      pod 'FirebaseFunctions'
      pod 'FirebaseAnalytics'
      pod 'FirebaseMessaging'
      pod 'Firebase/Crashlytics'
      
      pod 'Google-Mobile-Ads-SDK'
    
    
      
      target 'MainApp' do
      end
      
      target 'MainApp Dev' do
      end
      
    end
    
    abstract_target 'ExtensionPodsTarget' do
      use_frameworks!
      
      google_utilites
      
      pod 'FirebaseAuth'
      pod 'FirebaseFunctions'
      
      target 'Extension' do
      end
      
      target 'Extension Dev' do
      end
    end
    

    在此之后,我刚刚安装了 pod,然后我回到只有一个 GoogleUtilities 依赖项

    【讨论】:

      【解决方案3】:

      pod 'GoogleUtilities', '~> 7.7.0' 添加到所有使用 Firebase pod 的目标将使其工作。就我而言,这包括 3 个目标:iOS appiMessage ExtensionUnitTests

      无需显式添加此部分:

      def google_utilites
        pod 'GoogleUtilities/AppDelegateSwizzler'
        pod 'GoogleUtilities/Environment'
        pod 'GoogleUtilities/Logger'
        pod 'GoogleUtilities/MethodSwizzler'
        pod 'GoogleUtilities/NSData+zlib'
        pod 'GoogleUtilities/Network'
        pod 'GoogleUtilities/Reachability'
        pod 'GoogleUtilities/UserDefaults'
      end
      

      【讨论】:

        【解决方案4】:

        当我尝试归档我最近引入了另一个新目标的项目时,我看到了这个错误。

        进入这个新目标的 pod 设置,我注意到 iOS 部署版本 (14.4) 与主要 Runner 目标 (12.0) 中的 iOS 部署版本不同 - 这是我最初配置这个新目标时错过的扩展目标。

        我看到的 iOS 部署版本之间的唯一区别是 14.4 启用了应用扩展。由于这对我的项目无关紧要,我很高兴匹配 iOS 部署 我的两个目标的版本,因此它们只能引用一组依赖项。之后,我刚刚删除了已删除版本的重复 pod。我可以再次存档。


        对于您的每个目标,请访问 Build Settings -> 检查 iOS Deployment Target -> 更改版本以使其匹配。

        在大多数情况下,它们没有理由不同。但是,如果出于某种原因您认为它们应该不同,请查看 Paul Beusterien 的答案并遵循。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-19
          • 2021-10-12
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 2019-02-13
          • 1970-01-01
          相关资源
          最近更新 更多