Module compiled with Swift 5.3.1 cannot be imported by the Swift 5.4.2 compiler 湊合解決方案

今日開(kāi)始接手別人開(kāi)發(fā)好的項(xiàng)目繼續(xù)維護(hù) 好家伙日常自動(dòng)更新 跟上最新Xcode的腳步(還不至于用到beta版本)Xcode12.5.1 。

拿到項(xiàng)目一頓騷操作 開(kāi)始到神圣的command+R 跑起來(lái)。有且僅有一個(gè)報(bào)錯(cuò)(Module compiled with Swift 5.3.1 cannot be imported by the Swift 5.4.2 compiler)

好家伙 我知道了 勸退新Xcode,(搞兩個(gè)版本Xcode老是崩 或者 本來(lái)一個(gè)現(xiàn)在被更新了又要去官網(wǎng)偷偷下載一個(gè)舊版本的 那不就是很慘)。

辦法是有的 (可能還是有其他的解決方案 目前個(gè)人水平摸索到的暫時(shí)如下)

1、確定到了哪個(gè)framework 找那個(gè)人重新打一個(gè) 不過(guò)這次就要按照這個(gè)來(lái)。

You need to set the?Build Libraries for Distribution?option to?Yes?in your framework's build settings

https://stackoverflow.com/questions/58654714/module-compiled-with-swift-5-1-cannot-be-imported-by-the-swift-5-1-2-compiler

2、好了,這個(gè)是不好找的。只能委屈求全去下載Toolchain 導(dǎo)入進(jìn)去?

找對(duì)版本才行喔

https://swift.org/download/#snapshots

圖片1

下載完安裝 自動(dòng)導(dǎo)入到了對(duì)應(yīng)的目錄下(如果全部用戶可用的話 /Library/Developer/Toolchains/swift-5.3-RELEASE.xctoolchain )

有些同學(xué)想要 提前取Xcode看看有沒(méi)有 Toolchain 再去下載舊的導(dǎo)入 那可不你發(fā)現(xiàn)沒(méi)安裝之前是隱藏的 ,安裝之后就會(huì)出現(xiàn)。

安裝前


安裝后

好了 既然有了這個(gè)Toolchain 直接開(kāi)跑。command+R 彈出如圖提示。

不允許

啊這。。。 好吧 我委曲求全 我build一下總可以吧,其實(shí)按道理是可行的。(包括Archive)

但是你一開(kāi)始那個(gè)framework可能放過(guò)你了 可是你還有Pod進(jìn)來(lái)各種各樣。

build過(guò)程中提示?symbol(s) not found for architecture arm64

Undefined symbol: ___isOSVersionAtLeast

Undefined symbol: ___cxa_guard_acquire

Undefined symbol: ___cxa_guard_release

build失敗圖

發(fā)現(xiàn)問(wèn)題 就先看看這個(gè)toolchain的包內(nèi)容觀察觀察 和我們?cè)瓉?lái)的有什么差別 要不我直接魔改替換?我就去找大佬朋哥 要了一波Xcode12.4里默認(rèn)的toolchain(路徑/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain?)

好家伙里面只有三個(gè)文件 跟我們不就就差了3個(gè) 故名思義第一個(gè)肯定差在簽名,如果看到上安裝后圖 unknow就知道了我魔改的沒(méi)有簽名 接著就是system了 還有info.plist

文件差異對(duì)比

我們默認(rèn)的就只有這個(gè)?com.apple.dt.toolchain.XcodeDefault swift open source下載的又一大堆。

plist文件對(duì)比

我試過(guò)直接把原來(lái)12.4Xcode里的Toolchain放到系統(tǒng)建立的toolchain文件夾(下面安裝建好的toolchain 文件夾簡(jiǎn)稱系統(tǒng)toolchain文件夾,Xcode的叫12.5.1toolchain 或者12.4toolchain, swift open source下來(lái)的叫 S5.3Open ?toolchain )。Xcode無(wú)法識(shí)別出來(lái),接著我就把12.4toolchain 放進(jìn)去 打開(kāi)包內(nèi)容 把S5.3Open ?toolchain的info.plist 和system放進(jìn)去系統(tǒng)toolchain文件夾。(不放system你的CPU就會(huì)裂開(kāi) 里面是LLDB )

修改后

接著選中我們要的 Command+B?

?好了 成功了 但是最終的目的沒(méi)達(dá)成 我想要真機(jī)跑起來(lái)呀

選中

那我自己去到xcode里替換為12.4的Toolchain不就好了嗎?/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain 估計(jì)是通過(guò)(Identifier)id來(lái)確定 這里面的這個(gè)toolchain是唯一默認(rèn)的 你不能放兩個(gè)。替換好了 其實(shí)他就是12.4的toolchain(支持Swift 5.3.1 Module compiled) 就能真機(jī)的跑起來(lái)了。

其實(shí)如果不介意其他的問(wèn)題的話 可以替換為打包機(jī)對(duì)應(yīng)Xcode版本里的toolchain 跟著打包機(jī) 共進(jìn)退 就能提前發(fā)現(xiàn)問(wèn)題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容