gpt4 book ai didi

ios - 在 Swift 中只为 iOS 8.1 SDK 编译代码

转载 作者:搜寻专家 更新时间:2023-10-31 19:39:59 25 4
gpt4 key购买 nike

我想在使用 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 code can be conditionally compiled based on the evaluation of build configurations. Build configurations include the literal true and false values, command line flags, and the platform-testing functions listed in the table below. You can specify command line flags using -D <#flag#>.

然后它谈到os()arch()功能,但与 SDK 版本无关。

最佳答案

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

在 Xcode 的build设置下,转到其他 Swift 标志,您可以在其中为不同的 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 中它看起来像:

关于ios - 在 Swift 中只为 iOS 8.1 SDK 编译代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com