【问题标题】:Specifying preprocessor macros for a cocoapod dependency, without forking it为 cocoapod 依赖项指定预处理器宏,而不对其进行分叉
【发布时间】:2022-01-06 07:43:55
【问题描述】:

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

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

  • pod 的目标构建设置
  • Cocoapod 的目标支持文件中的 pod 的私有 .xcconfig 文件

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

编辑

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

【问题讨论】:

    标签: xcode cocoapods


    【解决方案1】:

    现在可以使用此功能。下面是一个示例,说明您可以在 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
    

    【讨论】:

    • 使用 cocoapods 版本 1.0.0.beta.3 我必须使用 installer_representation.pods_project 而不是 installer_representation.project
    • 所以定义一个宏需要加10行代码?太可怕了。
    • 打开 'Podfile',将 'project' 替换为 'pods_project' 对我有用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 非常感谢,这回答了我的问题。我将继续提交问题,看看是否可以掌握此类功能。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多