12

我有一个 XCode 工作区,由Cocoapod对外部库的一些依赖项管理。其中之一,MTDates,扩展NSDateNSDateComponents使用前缀方法,或者如果定义了某个预处理器宏(这是我想要的),则没有前缀。

有几个地方我可以放置预处理器宏定义,以便让编译的库提供非前缀方法,但是一旦我要求Cocoapod更新项目,所有似乎都被重置,这让我认为这些配置由 pod 规范驱动。这些包括 :

  • pod 的目标构建设置
  • .xcconfigCocoapod 的Targets Support Files中pod 的私有文件

更改 pod 的规范需要管理我自己的库版本,从而在cocoapods新版本出现时失去更新它的能力。所以我的问题是:有没有一种方法可以为cocoapod依赖项指定预处理器宏,而无需分叉 pod 并更改 pod 的规范本身?

编辑

关于这个有一个未解决的问题,似乎指日可待。

4

4 回答 4

11

现在可以使用此功能。这是一个示例,说明您可以在 Podfile 的底部添加基于特定配置的宏。

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    if target.name == "Pods-TweaksBuildConfigurationsDemo-Tweaks"
      target.build_configurations.each do |config|
        if config.name == 'QA'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'FB_TWEAK_ENABLED=1']
        end
      end
    end
  end
end
于 2015-05-04T19:12:01.967 回答
3

正如您提到的“Cocoapod 的目标支持文件中的 pod 的私有 .xcconfig 文件”,我这样做解决了我的问题。

s.xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) COCOAPODS=1 IOS=1' }
于 2019-02-28T06:56:13.820 回答
1

查看 Cocoapods 文档,我认为这还不可能,我认为您可以做的是复制 pod 规范 - 进行您想要的更改(例如s.prefix_header_contents = #define symbolToDefine),然后将其添加到您的本地规范中以不同的名称,并在您的 pod 文件中使用它。不幸的是,当新版本发布时,您必须进入并更改标签号(以及其他取决于更改的内容)。

于 2013-07-28T14:49:34.390 回答
0

Swift 预处理器标志和 podspec 的更新:

s.pod_target_xcconfig = {
  'OTHER_SWIFT_FLAGS' => '$(inherited) -D DEFINE_ME'
}
于 2022-01-05T23:43:55.310 回答