为具有多个目标和不同平台的项目编写Podfile

 星宿1970_219 发布于 2023-01-12 17:49

我正在准备一个支持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测试包)

我想要的行为是这样的:

为每个目标指定平台(因为有iOS和OS X目标).

将podspec依赖项作为pod包含在非测试目标中.

能够仅指定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 `'
/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 `
' /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 `
'

我的问题:

做我想做的正确方法是什么(见上文)?如何让CocoaPods成功集成到我的项目和iOS/Mac目标中?我已经仔细阅读了Podfile文档,但发现它缺乏这方面的内容.

1 个回答
  • 得到它了!它不是因为我认为滥用Podfile语法造成的.

    相反,这是因为我手动清理了所有CocoaPods相关内容的构建阶段以执行清理pod install(不要问为什么).

    在看了CocoaPods源代码之后,我注意到当pods静态库出现在目标的"Link Binary With Libraries"构建阶段时,会跳过与目标的集成.哎呦!

    libPods-xxxx.a从我的每个目标中删除文件并pod install再次运行会执行集成到我的目标.

    2023-01-12 17:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有