2016-04-22 6 views
2

私はココアポッドを開発しています。私のポッドを使用して、誰かが自分のPodfileにこの行を含めるかどうかを選択することができます。彼らはそれが含まれている場合use_frameworksを検出する方法!コンパイル時に

use_frameworks!

を、私のコードは.frameworkファイルにコンパイルされます。そうでない場合は、.aファイルにコンパイルされます。

use_frameworks!が存在するかどうかに基づいて、プリプロセッサマクロを使用して、ココアポッドに異なるコードを含めることができます。例えば

、このような何か:あなたが対応c99extidentifierではありませんポッド名を持っている場合

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

このような状況がアップします。

私はすでに#if defined COCOAPODSのチェックを試みましたが、それはどちらの場合でも定義されています。

答えて

3

これは機能しています。このスニペットはPodfileに行く必要

:シンボルが存在しない場合@import構文に

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

これはデフォルト:

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 

は、その後、ソースファイルで、コードは次のようになります。

したがって、use_frameworks!が存在しない場合は、Podfileスニペットを実際に追加する必要があります。しかしどちらの方法でも動作します。

関連する問題