如何检测use_frameworks!在编译时

时间:2016-04-22 17:14:05

标签: cocoapods ios-frameworks

我正在开发一个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,但在这两种情况下都已定义。

1 个答案:

答案 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片段。但无论哪种方式都可以。

相关问题