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

我在 Xcode 4项目中使用 CocoaPods,我的项目有三个目标(默认目标,一个用于构建精简版本,一个用于构建演示版本)。所有目标都使用相同的库,但是 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'

唯一的办法是我得到这个工作是指定每个单独的目标与所有的豆荚再次列出。

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

还有更好的办法吗?

88831 次浏览

由于 CocoaPods 1.0改变了语法,因此不使用 link_with,而是执行以下操作:

# Note; name needs to be all lower-case.
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

旧答案 Pre CocoaPods 1.0:

是的,有一个更好的方法! 看看 link_with,在那里你可以做 link_with 'MyApp', 'MyOtherApp'来指定多个目标。

我将它用于诸如 link_with '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'

使用 摘要 _ 目标的方法:

在下面的例子中,'ShowsiOS''ShowsTV''ShowsTests'目标有自己独立的吊舱,加上 ShowsKit是继承的,因为它们都是虚拟目标 'Shows'的子目标。

# Note: There are no targets called "Shows" in any of this workspace's Xcode projects.
abstract_target 'Shows' do
pod 'ShowsKit'


target 'ShowsiOS' do
pod 'ShowWebAuth'
end


target 'ShowsTV' do
pod 'ShowTVAuth'
end


# Our tests target has its own copy
# of our testing frameworks
# (beside inheriting ShowsKit pod).


target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end

我觉得更好的解决办法是

# 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

参考文献: http://natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/

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

abstract_target 'someNameForAbstractTarget' do
pod 'podThatIsForAllTargets'
end


target 'realTarget' do
pod 'podThatIsOnlyForThisTarget'
end

如果希望多个目标共享相同的 pods,请使用 ec _ 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

或者只是

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

来源: https://guides.cocoapods.org/using/the-podfile.html