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
перезаписывает предыдущее значение.
Вот способ решить это:
Обновите 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
Определите файл 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
и вы пользовательские значения.