如何通过Podfile在两个目标中共享一些pods

22
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 会变得臃肿! 我想只维护一次这段代码!怎么办~ 我喜欢 CocoaPods!我相信它会解决我的问题~ 期待您的回答~~~~

2个回答

51

您可以像这样使用它来减少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定义在一个变量中,然后在您想要使用它们的目标中使用该变量即可。


1
请注意,显然应该使用小写字母作为第一个字母。 - nikans

12

CocoaPods现在建议使用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” 是目标名称之一吗?因此有三个目标,“Shows”,“ShowsiOS” 和 “ShowsTV”。 - malhobayyeb
1
@malhobayyeb 只有两个目标,ShowsiOSShowsTVShows "target" 是抽象的 - 它实际上并不存在。 - Joe Masilotti
它创建了两个ShowsKit的副本。有没有办法只保留一个副本? - Shailendra Kumar Gangwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接