我正在准备一个支持OS X和iOS的pod。我的pod有一些自己的依赖项,它们在podspec文件中定义,所以我使用Podfile来管理我用来开发pod并运行测试的项目的依赖项。我使用CocoaPods 0.33.1。
我有四个目标:
MFDynamic.iOS
(iOS静态库)MFDynamic.iOS.Tests
(iOS测试包)MFDynamic.Mac
(Mac框架)MFDynamic.Mac.Tests
(Mac测试包)我想要的行为是:
Kiwi/XCTest
指定为我的测试目标的依赖项。 然而,无论我尝试过什么,我都无法编写可行的Podfile。运行pod install
永远不会添加CocoaPods'为我的目标构建阶段,也没有将相应的xcconfig
文件添加到项目中。 CocoaPods不会输出有关Podfile中任何错误的警告。
这是我最近的失败尝试:
target 'MFDynamic.iOS' do
platform :ios, '6.1'
podspec :path => '../MFDynamic.podspec'
end
target 'MFDynamic.Mac' do
platform :osx, '10.7'
podspec :path => '../MFDynamic.podspec'
end
target 'MFDynamic.iOS.Tests' do
platform :ios, '6.1'
pod 'Kiwi/XCTest', '~> 2.2.4'
end
target 'MFDynamic.Mac.Tests' do
platform :osx, '10.7'
pod 'Kiwi/XCTest', '~> 2.2.4'
end
简化一点会产生相同的结果(即项目中没有集成):
target 'MFDynamic.iOS' do
platform :ios, '6.1'
pod 'AFNetworking', '~> 2.2'
end
target 'MFDynamic.Mac' do
platform :osx, '10.7'
pod 'AFNetworking', '~> 2.2'
end
我甚至考虑将所有pod与所有目标相关联,因为当项目被包含在其他人的工作中时,CocoaPods只会抓取相应的源文件。因此,即使说,Kiwi与iOS静态库目标相关联,当与CocoaPods集成时,它也不会被拖入用户的项目中。我真的很想避免这种做法,但如果这是唯一的方法......
无论如何,凭借这种心态,我尝试了下面的内容,运气不多:
link_with 'MFDynamic.iOS', 'MFDynamic.Mac', 'MFDynamic.iOS.Tests', 'MFDynamic.Mac.Tests'
podspec :path => '../MFDynamic.podspec'
pod 'Kiwi', '~> 2.2'
在这种情况下,我收到pod install
错误:
NoMethodError - undefined method `include?' for nil:NilClass
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/xcodeproj-0.17.0/lib/xcodeproj/project/object/native_target.rb:95:in `platform_name'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:471:in `block in compute_platform_for_target_definition'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:469:in `each'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:469:in `compute_platform_for_target_definition'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:519:in `block in compute_target_platforms'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:514:in `each'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:514:in `compute_target_platforms'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer/analyzer.rb:55:in `analyze'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer.rb:176:in `analyze'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer.rb:98:in `block in resolve_dependencies'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/user_interface.rb:52:in `section'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer.rb:97:in `resolve_dependencies'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/installer.rb:89:in `install!'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/command/project.rb:40:in `run_install_with_update'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/command/project.rb:70:in `run'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/claide-0.6.1/lib/claide/command.rb:281:in `run'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/lib/cocoapods/command.rb:48:in `run'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/gems/cocoapods-0.33.1/bin/pod:33:in `<top (required)>'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/bin/pod:23:in `load'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/bin/pod:23:in `<main>'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/bin/ruby_executable_hooks:15:in `eval'
/Users/Michael/.rvm/gems/ruby-2.0.0-p0/bin/ruby_executable_hooks:15:in `<main>'
做我想做的正确方法是什么(见上文)?如何让CocoaPods成功集成到我的项目和iOS / Mac目标中?我已经仔细阅读了Podfile文档,但发现它在这方面缺乏。
答案 0 :(得分:5)
知道了!正如我想的那样,滥用Podfile语法导致不。
相反,这是因为我手动清理了所有CocoaPods相关内容的构建阶段以执行干净pod install
(不要问为什么)。
在看了CocoaPods source code之后,我注意到,当&#34; Link Binary With Libraries&#34;中存在pods静态库时,会跳过与目标的集成。构建目标阶段。糟糕!
从我的每个目标中删除libPods-xxxx.a
个文件并再次运行pod install
,这些文件已集成到我的目标中。