我正在开发一个cocoapod。使用我的广告连播的用户可以选择是否在Podfile
:
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
,但在这两种情况下都已定义。
答案 0 :(得分: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片段。但无论哪种方式都可以。