gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:38:55 25 4
gpt4 key购买 nike

我正在准备一个支持 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 `<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 文档,但发现它缺乏这方面的内容。

最佳答案

明白了!我认为这不是是由于滥用 Podfile 语法造成的。

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

查看 CocoaPods source code 后,我注意到当 pod 静态库出现在目标的“Link Binary With Libraries”构建阶段时,将跳过与目标的集成。哎呀!

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

关于ios - 为具有多个目标和不同平台的项目编写 Podfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com