Cocoapods和自定义xcconfig

时间:2016-03-31 15:44:49

标签: ios cocoapods xcconfig

我正在尝试在iOS项目中使用Cocoapods和一些自定义配置 我有3个(Dev,Stage,Prod),每个人都有一些自定义GCC_PREPROCESSOR_DEFINITIONS。 我已经看到周围的人向我们建议#include <path-to-pods.xcconfig>,但这似乎是旧的方式来做到这一点 我见过Cocoapods 0.39会根据我的配置自动生成配置文件,并自动将它们添加到我的目标中(这很好)。
this article正在谈论创建Podfiles的“新方法”,这也证实了这一点。 问题是这些文件不包含我的配置 我试图使用xcodeprojlink_with,但没有成功。 有谁知道处理Cocoapods +自定义xcconfig文件的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

问题是CocoaPods基于xcconfig文件并设置实际变量。但是当完整配置在xcconfig文件中时,这些值不能以任何方式使用,如:

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

在这种情况下,GCC_PREPROCESSOR_DEFINITIONS会覆盖以前的值。

以下是解决问题的方法:

  1. 更新Podfile以在post_install上重新定义带GCC_PREPROCESSOR_DEFINITIONS前缀的PODS_值:

    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) ...
    
  3. 在这种情况下,GCC_PREPROCESSOR_DEFINITIONS应包含PODS_GCC_PREPROCESSOR_DEFINITIONS&amp;你定制的价值观。