2017-09-14 39 views
0

我使用xcode 9(swift version 3.2)編譯了一個框架二進制文件。我也想用swift 3.2語法使它在xcode 8.3.3上工作。但是,當我試圖運行帶有用xcode 9編譯的框架的項目時,我不斷收到Module compiled with Swift 4.0 cannot be imported in Swift 3.1錯誤消息。爲了使此工作可以添加哪個選項?我知道這是可能的,因爲pod Intercom可以在xcode 8.3.3和9下運行。我將不勝感激任何建議使用Swift 4.0編譯的模塊無法在Swift 3.1中導入框架二進制文件

+0

我猜不是因爲我的框架不支持3.1,3.2。在xcode 8.3.3項目中,我無法找到swift的項目選項3.2 – REALFREE

回答

1

在使用舊版Swift的項目中,不能使用使用較新版本的Swift編譯的模塊原因很明顯。使用較新的Swift版本編譯的框架可能使用較新的Swift語法和/或僅在新版Swift版本中可用的API,因此您將無法從使用較新語法或API的框架中調用任何函數。這個問題是由於Swift尚不穩定的事實。有關該主題的更多信息,請參閱ABI Stability Manifesto

Swift 3.2僅作爲Xcode9的一部分引入,使Swift3-> 4轉換更容易。 Xcode8.3.3只支持Swift 3.1,而Xcode9只支持Swift 3.2及以上版本,所以你不能編譯你的框架在兩個主要的Xcode版本中都可用。

如果您想要在您的框架的二進制版本中同時支持Xcode8和Xcode9,則需要提供使用不同Swift編譯器版本編譯的不同版本。至於使用Cocoapods/Carthage的動態框架,您可以使用條件編譯塊如#if swift(>=3.2)來編寫與Swift編譯器的多個版本兼容的代碼。有關更多信息,請參閱The Swift Programming Language (Swift 4) - Version compatibility

+0

好吧,我明白了,但https://github.com/intercom/intercom-ios對講機以某種方式克服了這個問題。通過Xcode 8和9上的'cocoapods'安裝對講機,它們的框架都是二進制形式。 – REALFREE

相關問題