Почему мой хук post_install не обновляет мои макросы препроцессора?

Я ходил по кругу уже пару дней, пытаясь понять, почему мой хук post_install не дает ожидаемого результата. Вот мой подфайл:

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

У меня есть вопрос: почему конфигурация отладки не обновляется новыми определениями макросов? В выводе видно, что конфигурация Release настроена правильно, но не Debug.

Любые идеи?


person Lee Fastenau    schedule 25.11.2014    source источник


Ответы (2)


Нашел ответ на мою конкретную проблему в том, как я добавлял макросы. Мне пришлось разбить строку 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

В качестве примечания, я также устанавливал определение на неправильную цель. Теперь, когда обе эти проблемы решены, я официально свободен! Ура!

person Lee Fastenau    schedule 25.11.2014
comment
Вам не нужна вторая строка config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ‹‹ 'SC_DEBUG_SCCOMMON' Это добавит только текст без значения, по крайней мере, это то, что я получил сейчас, тестируя это. Для тех, у кого такая же проблема, пожалуйста, проверьте правильность целевого имени. - person David; 17.01.2017

Я использовал код, и он сработал.

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
person KamyShi    schedule 03.04.2021