如何检测use_frameworks!在编译时

fun*_*oll 5 ios-frameworks cocoapods

我正在开发一个cocoapod。使用我的 pod 的人可以选择是否将此行包含在他们的Podfile

use_frameworks!

如果他们包含它,我的代码将被编译到一个.framework文件中。如果没有,就会被编译成.a文件。

我想使用预处理器宏根据是否use_frameworks!存在在我的可可豆荚中包含不同的代码。

例如,这样的事情:

#if PODFILE_CONTAINS_USE_FRAMEWORKS
@import My_Library;
#else
#import <My-Library/MyLibrary.h>
#end
Run Code Online (Sandbox Code Playgroud)

当您的 Pod 名称不合规时,就会出现这种情况c99extidentifier

我已经尝试检查#if defined COCOAPODS,但这两种情况都定义了。

fun*_*oll 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
Run Code Online (Sandbox Code Playgroud)

然后在源文件中,代码如下所示:

#if defined NO_USE_FRAMEWORKS
#import <My-Library/MyLibrary.h>
#else
@import My_Library;
#endif
Run Code Online (Sandbox Code Playgroud)

@import如果符号不存在,则默认为语法。

use_frameworks!因此,仅当 Podfile 片段不存在时才需要添加。但无论哪种方式都会起作用。