2016-04-22 11 views
2

Ich entwickle eine Cocoapod. Jemand, der meine pod verwendet, kann wählen, ob oder nicht enthalten diese Linie in ihrer Podfile:So erkennen Sie use_frameworks! zur Kompilierzeit

use_frameworks!

Wenn sie sind es, mein Code in eine .framework Datei kompiliert werden. Wenn nicht, wird es in eine .a Datei kompiliert.

Ich möchte Präprozessor-Makros verwenden, um unterschiedlichen Code in meinen Kakao aufzunehmen, basierend darauf, ob use_frameworks! vorhanden ist.

Zum Beispiel so etwas wie dieses:

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

Diese Situation kommt, wenn Sie einen pod Namen haben, der nicht c99extidentifier konform ist.

Ich habe bereits versucht, auf #if defined COCOAPODS zu überprüfen, aber das ist in beiden Fällen definiert.

Antwort

3

Habe es funktioniert.

Dieser Ausschnitt muss in der Podfile gehen:

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 

dann in der Quelldatei, der Code wie folgt aussieht:

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

Es standardmäßig @import Syntax, wenn das Symbol nicht vorhanden ist .

Also das Podfile-Snippet muss nur wirklich hinzugefügt werden, wenn use_frameworks! nicht vorhanden ist. Aber es wird so oder so funktionieren.

Verwandte Themen