在Swift和Objective C上使用构建配置

时间:2017-08-04 13:20:26

标签: ios objective-c swift cocoapods podspec

我有Swift项目,我已经通过cocoapods安装了我的SDK。 在Swift项目中,我配置了LOCALSTAGINGPRODUCTION方案。 当我切换方案时,Xcode会识别哪一个要编译,但这只是在Swift项目上而不是在ObjC上。 有没有办法只更改Swift项目配置,它可以在swift和由cocoapods安装的SDK上工作吗?

这是我必须编译的代码

#if LOCAL
    NSLog(@"SDK: local");
#elif STAGING
    NSLog(@"SDK: staging");
#else
    NSLog(@"SDK: production");
#endif

我已经测试过,当我将其包含在我的sdk podspec

中时,它似乎正常工作
s.pod_target_xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => 'LOCAL=1'}

但是这样无论我使用哪种方案,SDK都只编译LOCAL

我已经看到像这样安装了一些cocoapod库

pod 'LIB', :path => '../../', :configuration => ['Debug']

但在我的情况下,这不起作用。

1 个答案:

答案 0 :(得分:0)

Swift可以从C或Objective-C头文件中读取#define,但不能从配置中读取。作为解决方案,例如将CONFIG_LOCAL放入您的配置中,并将#define LOCAL CONFIG_LOCAL行放入由Swift读取的头文件中。任何带有普通整数常量的#define都会变成一个全局变量,在Swift中有一个Int32值,那么你就写了

if LOCAL != 0 {
    NSLog("SDK: local")
} else if STAGING != 0 {
    NSLog("SDK: staging")
} else {
    NSLog("SDK: production")
}

必须在Objective-C头文件管理器中使用整数值定义LOCAL和STAGING。