Cocoapods и пользовательский xcconfig

Я пытаюсь использовать Cocoapods с некоторыми пользовательскими настройками в проекте iOS.
У меня есть 3 (Dev, Stage, Prod), и у каждого из них есть свой кастом GCC_PREPROCESSOR_DEFINITIONS, Я видел вокруг людей, предлагающих нам #include <path-to-pods.xcconfig>, но это, кажется, старый способ сделать это.
Я видел Cocoapods 0.39 автоматически генерирует свои файлы конфигурации на основе моих конфигураций и автоматически добавляет их к моим целям (и это хорошо).
Это также подтверждается этой статьей, которая говорит о "новом способе" создания Podfiles. Проблема в том, что эти файлы не содержат мои конфигурации.
Я пытался использовать xcodeproj а также link_with, но безуспешно. Кто-нибудь знает, как правильно обращаться с Cocoapods + пользовательские файлы xcconfig?

1 ответ

Проблема в том, что CocoaPods основан на файлах xcconfig и устанавливает фактические переменные. Но эти значения никоим образом не могут использоваться, когда полная конфигурация находится в файлах xcconfig, таких как:

#include "../Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = ...

В этом случае GCC_PREPROCESSOR_DEFINITIONS перезаписывает предыдущее значение.

Вот способ решить это:

  1. Обновите Podfile, чтобы заново определить GCC_PREPROCESSOR_DEFINITIONS значение с PODS_ префикс на post_install:

    post_install do |installer|
        work_dir = Dir.pwd
        Dir.glob("Pods/Target Support Files/Pods-Demo/*.xcconfig") do |xc_config_filename|
            full_path_name = "#{work_dir}/#{xc_config_filename}"
            xc_config = File.read(full_path_name)
            new_xc_config = new_xc_config.sub(/GCC_PREPROCESSOR_DEFINITIONS/, 'PODS_GCC_PREPROCESSOR_DEFINITIONS')
            File.open(full_path_name, 'w') { |file| file << new_xc_config }
        end
    
    end
    
  2. Определите файл xcconfig следующим образом:

    #include "../Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig"
    GCC_PREPROCESSOR_DEFINITIONS = $(PODS_GCC_PREPROCESSOR_DEFINITIONS) ...
    

В этом случае GCC_PREPROCESSOR_DEFINITIONS должен содержать PODS_GCC_PREPROCESSOR_DEFINITIONS и вы пользовательские значения.

Другие вопросы по тегам