【问题标题】:Why isn't my cocoapods post_install hook updating my preprocessor macros?为什么我的 cocoapods post_install 钩子没有更新我的预处理器宏?
【发布时间】:2015-01-23 21:16:12
【问题描述】:

我已经转了几天,想弄清楚为什么我的 post_install 钩子没有产生我期望的输出。这是我的 Podfile:

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

target "SCCommon" do
  platform :ios, "6.0"
  pod 'AFNetworking', '~> 1.2.1'
  pod 'Mantle', '~> 1.3'
  pod 'PubNub', '3.5.5'
end

target "SCCommon-TestHarness" do
  platform :ios, "6.0"
# inhibit_all_warnings!
  pod 'SCCommon', :path => '../SCCommon.podspec'
end

target "SCCommon-UnitTests" do
  platform :ios, "6.0"
# inhibit_all_warnings!
  pod 'OCMock', '2.2.3'
  pod 'SCCommon', :path => '../SCCommon.podspec'
end

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    if target.name == 'Pods-SCCommon-UnitTests'
      puts "Setting preprocessor macro for #{target.name}..."
      target.build_configurations.each do |config|
        puts "#{config} configuration..."
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','SC_DEBUG_SCCOMMON=1','FOOBAR']
        puts config.build_settings['GCC_PREPROCESSOR_DEFINITIONS']
        puts '---'
      end
    end
  end
end

在上面运行pod update 后,我得到以下输出:

Update all pods
Analyzing dependencies

CocoaPods 0.35.0 is available.
To update use: `sudo gem install cocoapods`

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Fetching podspec for `SCCommon` from `../SCCommon.podspec`
Downloading dependencies
Using AFNetworking (1.2.1)
Using Mantle (1.5.1)
Using OCMock (2.2.3)
Using PubNub (3.5.5)
Using SCCommon (0.3)
Generating Pods project
Setting preprocessor macro for Pods-SCCommon-UnitTests...
Release configuration...
$(inherited)
SC_DEBUG_SCCOMMON=1
FOOBAR
---
Debug configuration...
DEBUG=1
$(inherited)
---
Integrating client project

我的问题是:为什么 Debug 配置没有使用新的宏定义更新?您可以在输出中看到 Release 配置设置正确,但不是 Debug。

有什么想法吗?

【问题讨论】:

    标签: ruby macros preprocessor cocoapods xcode-project


    【解决方案1】:

    在我添加宏的方式中找到了我的具体问题的答案。我不得不将config.build_settings ... 线分成两行,如下所示:

    post_install do |installer_representation|
      installer_representation.project.targets.each do |target|
        if target.name == 'Pods-SCCommon-UnitTests-SCCommon'
          puts "Setting preprocessor macro for #{target.name}..."
          target.build_configurations.each do |config|
            puts "#{config} configuration..."
            puts "before: #{config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].inspect}"
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'SC_DEBUG_SCCOMMON'
            puts "after: #{config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].inspect}"
            puts '---'
          end
        end
      end
    end
    

    顺便说一句,我也在错误的目标上设置了定义。既然这两个问题都解决了,我正式解脱了!耶!

    【讨论】:

    • 你不需要第二行 config.build_settings['GCC_PREPROCESSOR_DEFINITIONS']
    【解决方案2】:

    我使用了代码,并且成功了。

    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','MEMORY_LEAKS_FINDER_ENABLED=1','EVERY']
    

    输出:

    find MLeaksFinder Release
    $(inherited)
    MEMORY_LEAKS_FINDER_ENABLED=1
    EVERY
    find MLeaksFinder Debug
    $(inherited)
    MEMORY_LEAKS_FINDER_ENABLED=1
    EVERY
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      相关资源
      最近更新 更多