如何在我的podfile中为我的Xcode项目指定多个目标?

如何在我的podfile中为我的Xcode项目指定多个目标?,xcode,target,cocoapods,Xcode,Target,Cocoapods,我在Xcode 4项目中使用CocoaPods,我的项目有三个目标(默认目标,一个用于构建lite版本,另一个用于构建演示版本)。所有目标都使用相同的库,但是CocoaPods只是向主目标添加静态库和搜索路径。我的播客文件如下所示: platform :ios, '5.0' pod 'TestFlightSDK', '>= 1.1' pod 'MBProgressHUD', '0.5' pod 'iRate', '>= 1.6.2' pod 'TimesSquare', '1.0.

我在Xcode 4项目中使用CocoaPods,我的项目有三个目标(默认目标,一个用于构建lite版本,另一个用于构建演示版本)。所有目标都使用相同的库,但是CocoaPods只是向主目标添加静态库和搜索路径。我的播客文件如下所示:

platform :ios, '5.0'

pod 'TestFlightSDK', '>= 1.1'
pod 'MBProgressHUD', '0.5'
pod 'iRate', '>= 1.6.2'
pod 'TimesSquare', '1.0.1'
pod 'AFNetworking', '1.1.0'
pod 'KKPasscodeLock', '0.1.5'
pod 'iCarousel', '1.7.4'
我唯一的方法是将每个目标单独指定,并再次列出所有的POD

platform :ios, '5.0'

target :default do  
    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :lite do 
    link_with 'app-lite'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :demo do 
    link_with 'app-demo'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

有更好的方法吗?

CocoaPods 1.0已经更改了语法。现在看起来是这样的:

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Sail' do
    shared_pods
end

target 'Sail-iOS' do
    shared_pods
end

过时的CocoaPods 1.0之前的答案:

是的,有更好的办法!查看您可以在哪里使用“MyApp”、“MyOtherApp”链接以指定多个目标

我将其用于单元测试,如带有“App”、“App tests”的
链接(注意目标名称中的空格)

例如:

platform :osx, '10.8'

link_with 'Sail', 'Sail-Tests'

pod 'SSKeychain', '~> 0.1.4'
pod 'INAppStoreWindow', :head
pod 'AFNetworking', '1.1.0'
pod 'Reachability', '~> 3.1.0'
pod 'KSADNTwitterFormatter', '~> 0.1.0'
pod 'MASShortcut', '~> 1.1'
pod 'MagicalRecord', '2.1'
pod 'MASPreferences', '~> 1.0'

2017年更新 你可以用


我认为更好的解决办法是

# Podfile

platform :ios, '8.0'

use_frameworks!

# Available pods

def available_pods
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
end

target 'demo' do
  available_pods
end

target 'demoTests' do
    available_pods
end

引用自:

最简单的方法是使用抽象目标,其中指定的每个pod将与所有目标链接

abstract_target 'someNameForAbstractTarget' do
  pod 'podThatIsForAllTargets'
end

target 'realTarget' do
  pod 'podThatIsOnlyForThisTarget'
end

如果您希望多个目标共享同一个POD,请使用抽象目标

# 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
或者只是

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

来源:

太好了,那么在我的第一个示例podfile中,你会把链接放在哪里呢?你能给我举个例子吗?更新了我的答案。这其实不重要。我正在尝试同样的事情,但在我的例子中,我链接到了主目标的多个目标依赖项。这将导致在链接阶段出现重复符号错误。你知道如何使用CoCoapod解决这个问题吗?看起来你的目标列表周围的括号不再需要了(而且不起作用?)。迪茨:@KeithSmiley我明白了。事实上,我对那些空间还是有问题。我不得不重命名所有目标,使其没有空格。很糟糕,Cocoapods没有一个(对所有目标都适用)而没有链接。你介意解释一下为什么这是一个更好的解决方案吗?@Warpling:请仔细解释一下,如果你在这里添加一些解释,那就太好了。(保留所有必要的信息很好,以防链接中断等)它还可以帮助人们看到
link_与
的问题,并更新您的答案:)我喜欢这种方法,因为它允许所有目标(可用的_pod)和特定目标的pod都有一堆pod。这种解决方案很好,但值得一提的是:您的'def'值必须是小写的。请阅读有关抽象目标的内容。这是你需要的。
realTarget
不应该进入abstracttarget的
someNameForAbstractTarget
内部而不是外部吗?从其他答案来看,它也可以这样工作。
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