如何在我的podfile中为我的Xcode项目指定多个目标?
我在Xcode 4项目中使用CocoaPods,我的项目有三个目标(默认目标,一个用于构建lite版本,另一个用于构建演示版本)。所有目标都使用相同的库,但是CocoaPods只是向主目标添加静态库和搜索路径。我的播客文件如下所示:如何在我的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.
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