2015-07-03 28 views
6

我有一个代码库需要与Xcode 7 beta和Xcode 6.4兼容。这是因为Beta版测试和App Store版本应该使用稳定版本的编译器和SDK来构建,但我也在用于测试的手机上安装了iOS 9测试版。是否有一个#ifdef来区分Swift中的Xcode 6.4和Xcode 7 beta?

这不是Objective-C的问题,但现在我添加了一些Swift,我发现很难保持与两个版本的Xcode的兼容性。

我该怎么办?

我知道Swift有一个#ifdef指令,但有#ifdefs可以区分Swift 1.2和2.0吗?除了DEBUG,os和arch之外,我找不到有效的Swift列表。

这里是我的意思的例子:

#ifdef __IPHONE_9_0 
    some Swift code that works in Swift 2.0 but won't compile in Swift 1.2 
#else 
    some Swift code that works in Swift 1.2 but won't compile in Swift 2.0 
#endif 

或者更具体的例子:

public final class MessageParser : NSObject { 

    #ifdef __IPHONE_9_0 
    static let sharedHashtagRegex = try! NSRegularExpression(pattern:"(^|\\W)(#|\\uFF03)(\\w*\\p{L}\\w*)", options:[]); 
    #else 
    static let sharedHashtagRegex = NSRegularExpression(pattern:"(^|\\W)(#|\\uFF03)(\\w*\\p{L}\\w*)", options:nil, error:nil)! 
    #endif 

    // ... 
} 
+1

“我有一个代码库需要与Xcode 7 beta和Xcode 6.4兼容”,它不会。算了吧。这些是Swift(和Cocoa API)的两个完全不同的版本;你不可能编写适用于这两者的Swift代码。 – matt

回答

2

没有,因为斯威夫特规定所有的“定义”路径必须编译。 抱歉,#ifdef的旧时光已逝

1

问题并不罕见。每当我们处于大量代码重构的中间时,我们都会看到它。你能做什么?使用版本控制系统,例如饭桶。

使用Git:

雨燕1.2(6.4的Xcode) - 保留旧代码在你master分支

雨燕2.0(7.0的Xcode) - 把迁移代码到一个新的分支,例如features/swift20

现在,一段时间,你将不得不支持两个分支,但这不应该很难。您可以将更改添加到master,然后将它们合并到features/swift20,解决合并期间的所有冲突/迁移。

当Xcode 9 GM出来时,你可以合并features/swift20master,因为你不再需要Swift 1.2了。