2015-07-03 51 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了。