如何在使用CocoaPods时向Xcode添加自定义项目配置?

rad*_*dex 48 xcode objective-c ios cocoapods

我有一个iOS/OS X Xcode项目,我正在使用CocoaPods,我似乎无法弄清楚如何添加我自己的项目配置(除了Debug和Release)而不会完全破坏构建.

在项目中,我有许多目标,适用于两个平台及其应用扩展的应用.Xcode工作区当然也有Pods项目.

因为该项目为iOS和Mac构建目标,所以我使用CocoaPods"目标"将其pod组合在一起.我的Podfile看起来像这样:

source 'https://github.com/CocoaPods/Specs.git'

target :iOS do
  platform :ios, '7.1'
  link_with 'iOS', 'NozbeToday', 'NozbeShare', 'NozbeWatch'

  # pods...
end

target :Mac do
  platform :osx, '10.9'
  link_with 'Mac'

  # pods...
end
Run Code Online (Sandbox Code Playgroud)

现在我在这里遇到问题.到目前为止,我的项目中只有默认的"Debug"和"Release"配置.我想更改它们并为不同的配置文件/捆绑ID组合添加一些新的.

......我被困住了.我无法弄清楚如何做到这一点.

问题的第一个迹象是pod install针对每个目标/配置组合发出警告:

[!] CocoaPods没有设置项目的基本配置,因为您的项目已经有自定义配置集.为了使CocoaPods集成完全可用,请将目标的基本配置设置NozbeTodayPods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig或包含 Pods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig在构建配置中.

我无法弄清楚它意味着什么以及如何解决这个问题.无论哪种方式,项目都不会构建 - 在最好的情况下,我会得到一个链接器错误,说它无法找到Pods-something.a...

rad*_*dex 42

好吧,所以写这个问题的中途我自己弄明白了(yay rubber ducking).这是下一代的解决方案:

实际上,您必须在Pods目标上添加对应用程序方案的显式依赖性.

您的方法是:编辑您的应用程序方案,转到Build部分,并将Pods目标添加到应用程序目标之上.你应该看到这样的东西:

在此输入图像描述

它会起作用.


至于CocoaPods警告pod install,您需要xcconfig为每个Xcode配置使用CP生成的文件.你这样做的方式是:

  • 找到.xcconfig文件 Pods/Target Support Files
  • 将它们拖放到Xcode项目中的"Pods"组(仅添加引用.不要复制到目标或添加到构建)
  • 单击项目导航器中的项目,然后选择项目本身(不是目标之一).转到Info,在Configurations下,在"基于配置文件"列中为每个配置和目标设置正确的.xcconfigs.

在Podfile中你也需要这样的东西让CocoaPods知道哪些Xcode配置是"debug"(未优化),这是"release":

project '1Nozbe', {
  'iOS 1 Dev Debug' => :debug,
  'iOS 2 Dev AdHoc' => :release,
  'iOS 3 Release Debug' => :debug,
  'iOS 4 Release AdHoc' => :release,
  'iOS 5 Release AppStore' => :release,
}
Run Code Online (Sandbox Code Playgroud)

与CocoaPods不完全相关,但如果您碰巧有除CP之外的其他(子项目)依赖项,您还需要做两件事:

  • 在子项目目标上添加显式依赖项(如上面的屏幕截图所示)
  • 在子项目中重命名/添加配置,使它们与主项目相同.(否则,Xcode只知道您的子项目使用哪种配置)

  • [!] `xcodeproj` 已重命名为 `project`。请相应地更新您的 Podfile。 (2认同)

lea*_*vez 11

在配置文件中添加此行,就像导入头文件一样:

#include "Pods/Target Support Files/Pods/Pods.debug.xcconfig"
Run Code Online (Sandbox Code Playgroud)

注意:#include不是#import

  • 不再使用较新的 Xcode 版本,有什么解释吗? (2认同)