仅为Swift中的iOS 8.1 SDK编译代码

时间:2014-10-09 19:09:52

标签: ios swift ios8 ios8.1

我想在使用iOS 8.1 SDK构建时有条件地编译一些代码,并在使用8.0 SDK时编译一些不同的代码。在一个针对8.1 SDK的小项目中(并且可以使用8.1新增的API),#if指令似乎忽略了常量。

println("__IPHONE_8_1 is defined to be \(__IPHONE_8_1)")
#if __IPHONE_8_1
    println("8.1")
    #else
    println("8.0")
#endif

以上代码打印:

__IPHONE_8_1 is defined to be 80100
8.0

根据conditional compilation statements上的文档,

  

Swift代码可以根据评估条件进行编译   构建配置。构建配置包括文字true   和false值,命令行标志和平台测试   功能列于下表。您可以指定命令行   使用-D <#flag#>的标志。

然后讨论os()arch()函数,但没有关于SDK版本的内容。

1 个答案:

答案 0 :(得分:0)

目前,Swift不支持从条件编译谓词引用常量。我针对这种特定情况的解决方案是根据SDK版本定义不同的编译器标志。

在Xcode的构建设置下,转到其他Swift Flags,您可以在其中设置不同SDK的标记。由于我的Xcode安装与8.0和8.1 SDK都没有关联,我手工编辑了project.pbxproj文件:

"OTHER_SWIFT_FLAGS[sdk=iphoneos8.1]" = "-D DEBUG -D __IPHONE_8_1";
"OTHER_SWIFT_FLAGS[sdk=iphoneos8.0]" = "-D DEBUG";

在Xcode中,它看起来像: