xcode – 如何在同一源文件中有条件地编译特定于版本的Swift(1.2 vs 2.0)代码?

xcode – 如何在同一源文件中有条件地编译特定于版本的Swift(1.2 vs 2.0)代码?,第1张

概述我有一个与我的框架捆绑在一起的 Swift演示项目.我想确保演示中的Swift代码与Xcode 6(Swift 1.2)和Xcode 7(Swift 2.0)成功编译,无需用户干预. 由于存在only marginal preprocessor support in Swift,如何在编译时确定使用哪个版本的Swift或Xcode来编译代码? 现在,这是重要的细节: >它必须自动工作! >在Xco 我有一个与我的框架捆绑在一起的 Swift演示项目.我想确保演示中的Swift代码与Xcode 6(Swift 1.2)和Xcode 7(Swift 2.0)成功编译,无需用户干预.

由于存在only marginal preprocessor support in Swift,如何在编译时确定使用哪个版本的Swift或Xcode来编译代码?

现在,这是重要的细节:

>它必须自动工作!

>在Xcode 6中打开项目 – >编译
Swift 1.2代码.
>在Xcode 7中打开项目 – >编译Swift
2.0代码.

没有构建设置或其他需要用户以某种方式指定她正在使用的Swift / Xcode版本的方法.

我一直在想:这是一项微不足道的任务,用Swift怎么可能不可能?

作为一个框架开发人员,这让我感到疯狂,因为Swift项目的成功编译现在完全取决于用户的Xcode版本,我不能要求他们全部“更新到Xcode 6.4”,稍后不得不问他们一遍又一遍地“更新到Xcode 7.1”.疯了吧!

另一种选择当然是拥有单独的演示项目,管理不同的代码库,每个版本的Swift都有一个.并希望用户知道哪个项目适用于她的Xcode版本.不是一个真正的选择.

遗憾的是,另一种替代方案,即根本不使用任何Swift 2.0的增强功能.有一些语法,类和方法在一个或另一个Swift版本中不起作用,只是因为编译器在较新的Xcode版本中更加挑剔.

解决方法 您可以使用Xcode的一些高级构建设置来完成此任务,特别是:

> XCODE_VERSION_MAJOR:将Xcode主要版本编码为“0700”之类的字符串.
> EXCLUDED_SOURCE_file_nameS:默认情况下要排除的“fnmatch”样式的源文件模式.
> INCLUDED_SOURCE_file_nameS:要包含的“fnmatch”式源文件模式.

我通常不建议这样做,因为它会让你的项目很难理解大多数Xcode用户,但如果你绝对想让它工作,你可以使用这种技术.

你完成它的方式如下:

>对于需要进行版本控制的任何源文件,请将它们命名为“Thing-Versioned-0600.swift”和“Thing-Versioned-0700.swift”.确保两个文件都在源构建阶段.>通过添加项目级构建设置,使用排除机制来防止默认情况下编译任何版本化文件:EXCLUDED_SOURCE_file_nameS = * -Versioned – * .swift.>使用包含的机制仅添加回与当前Xcode主要版本匹配的文件,方法是添加另一个项目级构建设置:INCLUDED_SOURCE_file_nameS = * -Versioned – $(XCODE_VERSION_MAJOR).swift.

总结

以上是内存溢出为你收集整理的xcode – 如何在同一源文件中有条件地编译特定于版本的Swift(1.2 vs 2.0)代码?全部内容,希望文章能够帮你解决xcode – 如何在同一源文件中有条件地编译特定于版本的Swift(1.2 vs 2.0)代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存