2016-04-22 68 views
2

我正在開發一個cocoapod。誰用我的吊艙可以選擇是否將某人加入這一行他們Podfile如何檢測use_frameworks!在編譯時

use_frameworks!

如果他們有它,我的代碼會被編譯成一個.framework文件。如果不是,它將被編譯成.a文件。

我想根據是否存在use_frameworks!,使用預處理器宏在我的可可豆中包含不同的代碼。

例如,這樣的事情:

#if PODFILE_CONTAINS_USE_FRAMEWORKS 
@import My_Library; 
#else 
#import <My-Library/MyLibrary.h> 
#end 

這種情況出現時,你有一個吊艙的名字,這不是c99extidentifier標準。

我已經嘗試過檢查#if defined COCOAPODS,但在這兩種情況下都已定義。

回答

3

得到它的工作。

這段代碼需要在Podfile去:

post_install do |pi| 
    pi.pods_project.targets.each do |target| 
     target.build_configurations.each do |config| 
      unless pi.podfile.defined_in_file.read().include? "\nuse_frameworks!\n" 
       config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] 
       config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'NO_USE_FRAMEWORKS=1' 
      end 
     end 
    end 
end 

然後在源文件中的代碼如下:

#if defined NO_USE_FRAMEWORKS 
#import <My-Library/MyLibrary.h> 
#else 
@import My_Library; 
#endif 

它默認爲@import語法如果符號不存在。

因此,只有在use_frameworks!不存在的情況下才需要添加Podfile代碼段。但它會以任何方式工作。