【问题标题】:how to share the some pods in two target by podfile如何通过 podfile 共享两个目标中的一些 pod
【发布时间】:2026-01-09 12:55:02
【问题描述】:
xcodeproj 'Demo.xcodeproj'

platform :ios, "6.0"

target "Demo" do
    pod 'Demo-A', '3.1.1'
    pod 'Demo-B', '1.0'
    pod 'Demo-C', '~> 1.9.0'
    pod 'Demo-D', '~> 1.1'

    pod 'AA', '0.0.1'
    pod 'BB', '0.0.1'
    pod 'CC', '0.0.1'
    pod 'DD', '0.0.1'
    pod 'EE', '0.0.1'
    pod 'FF', '0.0.1'
    pod 'GG', '0.0.1'
end

target "DemoTests" do
    pod 'DemoTests-X', '3.1.1'
    pod 'DemoTests-Y', '0.4.0'
    pod 'DemoTests-Z', '4.1.1'

    pod 'AA', '0.0.1'
    pod 'BB', '0.0.1'
    pod 'CC', '0.0.1'
    pod 'DD', '0.0.1'
    pod 'EE', '0.0.1'
    pod 'FF', '0.0.1'
    pod 'GG', '0.0.1'
end

target "DemoWidget" do
    pod 'DemoWidget-1', '3.1.1'
    pod 'DemoWidget-2', '0.4.0'
    pod 'DemoWidget-3', '4.1.1'
end

这是我的 podfile 。如您所见。

pod 'AA', '0.0.1'
pod 'BB', '0.0.1'
pod 'CC', '0.0.1'
pod 'DD', '0.0.1'
pod 'EE', '0.0.1'
pod 'FF', '0.0.1'
pod 'GG', '0.0.1'

此代码出现两次。 DemoTests 是 Demo 目标的测试目标。当我在 Demo 目标中编写测试文件并将源文件导入时。它将依赖 Demo 目标中的 pod 中的某些文件,但不依赖于 DemoTests 目标。所以我为依赖写了两次这个 Podfile 代码。 但是,很丑!我和我的同事必须维护两套这样的代码。我的 Podfile 会膨胀! 我想维护这个代码一次!怎么做~ 我喜欢可可足类动物!相信能解决我的问题~ 等你回答~~~~

【问题讨论】:

    标签: ios objective-c iphone cocoapods xctest


    【解决方案1】:

    如果您希望多个目标共享同一个 pod,现在可以使用 CocoaPods recommends using an abstract_target。注意实际目标是如何嵌套在新的抽象目标下的。

    # There are no targets called "Shows" in any Xcode projects
    abstract_target 'Shows' do
      pod 'ShowsKit'
      pod 'Fabric'
    
      # Has its own copy of ShowsKit + ShowWebAuth
      target 'ShowsiOS' do
        pod 'ShowWebAuth'
      end
    
      # Has its own copy of ShowsKit + ShowTVAuth
      target 'ShowsTV' do
        pod 'ShowTVAuth'
      end
    end
    

    【讨论】:

    • Shows 是目标名称之一吗?所以有三个目标,ShowsShowsiOSShowsTV
    • @malhobayyeb 只有两个目标,ShowsiOSShowsTVShows“目标”是抽象的——它实际上并不存在。
    • 它创建了 ShowsKit 的 2 个副本。有没有办法拥有一个副本?
    【解决方案2】:

    您可以像这样使用它来减少 podfile 的长度,并且还可以维护一次代码!!!

    xcodeproj 'Demo.xcodeproj'
    
    platform :ios, "6.0"
    
    def common_pods_for_target
        pod 'AA', '0.0.1'
        pod 'BB', '0.0.1'
        pod 'CC', '0.0.1'
        pod 'DD', '0.0.1'
        pod 'EE', '0.0.1'
        pod 'FF', '0.0.1'
        pod 'GG', '0.0.1'
    end
    
    target "Demo" do
        pod 'Demo-A', '3.1.1'
        pod 'Demo-B', '1.0'
        pod 'Demo-C', '~> 1.9.0'
        pod 'Demo-D', '~> 1.1'
        common_pods_for_target
    end
    
    target "DemoTests" do
        pod 'DemoTests-X', '3.1.1'
        pod 'DemoTests-Y', '0.4.0'
        pod 'DemoTests-Z', '4.1.1'
        common_pods_for_target
    end
    
    target "DemoWidget" do
        pod 'DemoWidget-1', '3.1.1'
        pod 'DemoWidget-2', '0.4.0'
        pod 'DemoWidget-3', '4.1.1'
    end
    

    只需在一个变量中定义所有常见的 pod,然后在您想要的目标中使用它。

    【讨论】:

    • 注意,显然你应该使用小写作为第一个字母。
    最近更新 更多