xcode 删除cocoapod依赖项的预处理器宏,而不对其进行分叉

oknwwptz  于 2023-11-21  发布在  其他
关注(0)|答案(4)|浏览(138)

我有一个由Cocoapod管理的Xcode工作区,它与外部库有一些依赖关系。其中一个MTDates扩展了NSDateNSDateComponents,如果定义了某个预处理器宏,则使用前缀方法或非前缀方法(这正是我想要的)。
有几个地方我可以放置预处理器宏定义,以便编译后的库提供无前缀的方法,但是一旦我要求Cocoapod更新项目,所有这些似乎都被重置了,这让我认为这些宏定义是由pod规范驱动的。这些包括:

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

更改pod的规范需要管理我自己的库版本,因此当新版本出现时,cocoapods无法更新它。所以我的问题是:有没有一种方法可以为cocoapod依赖项指定一个预处理器宏,而不需要fork pod并更改pod的规范本身?

编辑

有一个open issue关于这一点,这似乎是指日可待。

g9icjywg

g9icjywg1#

这个功能现在可用了。下面是一个例子,你可以在你的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

字符串

ryoqjall

ryoqjall2#

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

s.xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) COCOAPODS=1 IOS=1' }

字符串

m0rkklqb

m0rkklqb3#

看看Cocoapods文档,我认为这还不可能,我认为你可以做的是复制pod规范--做你想要的修改(例如s.prefix_header_contents = #define symbolToDefine),然后将其添加到您的本地规范中,并使用不同的名称,并在您的pod文件中使用。当新版本不幸出现时,你必须进去改变标签号(和其他东西取决于变化)。

pgccezyw

pgccezyw4#

Swift预处理器标志和podspecs更新:

s.pod_target_xcconfig = {
  'OTHER_SWIFT_FLAGS' => '$(inherited) -D DEFINE_ME'
}

字符串

相关问题