簡體   English   中英

Swift 5.0 編譯器無法導入使用 Swift 4.2.1 編譯的模塊

[英]Module compiled with Swift 4.2.1 cannot be imported by the Swift 5.0 compiler

我正在嘗試按照說明將第三方應用程序集成到項目中https://github.com/Paytm-Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK

我在構建中看到以下錯誤

Swift 5.0 編譯器無法導入使用 Swift 4.2.1 編譯的模塊

我嘗試過工具鏈https://medium.com/xcblog/switching-swift-versions-inside-xcode-using-toolchains-755b28831c43錯誤更改為 Reason: Incompatible library version: PaytmNativeSDK requires version 1.0.0 or later, but libswiftCore .dylib 提供 0.0.0 版本

我如何設置 XCode 或庫以使其工作。 供應商不可能為 Swift 5.0 更新庫並使其在 POD 上可用。

對於 Carthage 用戶:升級到 Xcode 10.2 后,我在使用 Carthage 導入的框架中遇到了同樣的問題。

我通過重建框架解決了它:

carthage update --no-use-binaries --platform iOS

正確的解決方法是下載Xcode 10.1,等待蘋果補丁修復。

不要浪費時間修復第三方錯誤。


我的項目的問題是我們使用的是 Carthage 未能更新的 Alamofire。

這個庫的提供者應該用BUILD_LIBRARY_FOR_DISTRIBUTION = YES;重建它BUILD_LIBRARY_FOR_DISTRIBUTION = YES; (在 Xcode 11.3 中的Build Settings -> Build Options 中可用)。 已經要求 在相應的 GitHub 問題中做 之后PaytmNativeSDK將與每個下一個 Swift 版本兼容。

看起來這個問題已經在804152caae76245d96548eb74ea87a6150239407 中得到解決。

我想使用 Swift 4.2(Xcode 10.2 應該仍然支持,我已經在 Swift 語言版本中設置了它),但它仍然給我一個關於 Swift 5.0 編譯器的錯誤。 因此,在嘗試清除構建文件夾、派生數據等所有內容后,我得出的結論是它不適用於 Xcode 10.2。

我恢復到 Xcode 10.1,你可以在這里下載。 這有效。 因此,在 Apple 修復此錯誤之前,我不得不繼續使用 Xcode 10.1。

該框架的開發人員需要提供一個更新,該更新是在 Xcode 10.2 中構建的。

對框架開發者的說明:
即使您使用 Xcode 10.2 或 CI 使用的默認版本創建框架,您的用戶仍然可能會遇到此類錯誤。 您應該確保 Xcode 10.2 是您的默認命令行工具。 您可以使用命令xcodebuild -version在終端中檢查它。 默認版本可以在Xcode -> Preferences -> Locations -> Command Line Tools

如果您的項目中有仍然使用 4.2 編譯器構建的外部庫,而新的 Xcode 嘗試在 5.0 編譯器中構建您的項目,則會發生這種情況。

就我而言,我使用 Carthage 導入的庫很少。 幸運的是,我使用的庫在過去幾天發布了更新,使其與 Swift 5.0 編譯器兼容。 如果這些外部庫沒有更新它以支持 Swift 5.0,那么你現在可能不走運。

在此過程中,您可能仍然會遇到一些問題,這里有一些最佳做法可以避免出現更多問題。

  1. 完全刪除cartfile.resolved和Carthage文件夾
  2. 確保刪除之前添加到項目中的庫的任何副本。
  3. 從 Targets> Yourapp > General 中刪除嵌入式庫和 Linked 框架和庫。
  4. 產品 > 清理構建文件夾
  5. 使用 Carthage update 命令更新 Cart 文件並獲取新源
  6. 現在將庫導入回您的項目。

希望它有效。

我對 Carthage 的問題與在“carthage copy-frameworks”階段復制二進制文件的 xcode 階段有關。

我的解決方案與https://stackoverflow.com/a/55362536/721929 中評論的解決方案略有不同,因為該解決方案在某些情況下還會更新依賴項版本。

所以,我只是執行了“carthage build”。 我還為 Carthage 提供了一個緩存清理,以修復子任務中可能的錯誤(在我的情況下,在git clone 中失敗並帶有“exit code 1”

rm -rf ~/Library/Caches/org.carthage.CarthageKit
carthage build --no-use-binaries --platform iOS --verbose

只需刪除所有 *.framework 文件夾,獲取並生成,然后將新的框架文件夾導入到您的項目中。 這就是幫助我的原因。

例如:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM