我使用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中導入框架二進制文件
回答
在使用舊版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。
好吧,我明白了,但https://github.com/intercom/intercom-ios對講機以某種方式克服了這個問題。通過Xcode 8和9上的'cocoapods'安裝對講機,它們的框架都是二進制形式。 – REALFREE
- 1. 使用Swift 3.1編譯的模塊不能在Swift 4.0中導入
- 2. 使用Swift 3.0編譯的領域Swift模塊無法在Swift 3.0.1中導入
- 3. 使用Swift 3.0.1編譯的模塊無法在BuddyBuild中的Swift 3.0中導入
- 4. 使用Swift 4.0編譯的模塊不能在Swift 4.0.1中導入
- 5. 使用swift 4.0編譯的模塊不能在swift 3.0.2中導入
- 6. 使用swift 3.0編譯的模塊無法在Swift 3.0.1中導入
- 7. XCode 9:使用Swift 3.0.2編譯的模塊無法在Swift 3.2中導入
- 8. SwiftyJson無法在3.0.2編譯的Swift 3.1模塊中導入迦太基
- 9. Xcode 7 Swift Framework無法導入正在編譯的模塊
- 10. Cocoapods - 使用Swift 3.0編譯的模塊不能在Swift 3.0.1中導入
- 11. 使用CocoaPods在Swift中發佈通用二進制iOS框架
- 12. 將GoogleAnalytics頭文件導入Swift框架?
- 13. Xcode 9中的操場是用Swift 4.0編譯的
- 14. 當在Swift Project中使用OpenCV時,無法生成模塊「opencv2」
- 15. 依賴使用Swift的二進制框架仍然「危險」嗎?
- 16. 編譯swift模塊/框架/庫沒有xcode
- 17. 在Swift 2.3中使用Swift 3框架
- 18. 無法在Swift框架中導入Common Crypto
- 19. 使用C庫導入Swift模塊
- 20. 在我們的Swift文件中,我應該在哪裏導入swift模塊?
- 21. Swift中的前導二進制零字
- 22. 當我試圖在Xcode中導入VisualRecognitionV3時,它給我使用swift 3.0編譯的錯誤模塊無法在swift 3.0.2中導入?
- 23. Xcode 7編譯錯誤,無法在Objective-C文件中導入Swift類
- 24. Swift:無法在Xcode中導入框架,運行錯誤:'沒有這樣的模塊'(使用cocoapods安裝)
- 25. 在Swift中使用框架
- 26. 在Swift REPL中導入XCPlayground模塊
- 27. swift在Swift中的方法3.1
- 28. Cython嵌入式二進制(docker):無法導入站點模塊
- 29. CryptoSwift無法使用swift 2
- 30. 編譯二進制文件
我猜不是因爲我的框架不支持3.1,3.2。在xcode 8.3.3項目中,我無法找到swift的項目選項3.2 – REALFREE