第一種可能,升級Xcode導(dǎo)致鏈接的庫失效
剛剛升級了Xcode16.1 發(fā)現(xiàn)項目無法運行了,提示了大量的Undefined symbol *,檢查發(fā)現(xiàn)這些錯誤都出現(xiàn)在了同一個SDK中,我就去找第三方廠家給提供的SDK Demo,發(fā)現(xiàn)人家的Demo可以正常運行,然后我就創(chuàng)建了一個OC環(huán)境的項目按照人家的文檔在Generate中導(dǎo)入相關(guān)的庫發(fā)現(xiàn)還是不行,發(fā)現(xiàn)有時候在這塊點擊+號導(dǎo)入的.tbd庫在這塊不顯示但是在左側(cè)Frameworks文件夾里是有的,運行項目還是不行

之后我又嘗試在 Build Phases - Link Binary and Library中重新導(dǎo)入發(fā)現(xiàn)可以運行了不會報Undefined symbol *錯誤了。本以為解決了,但是回到自己的項目重新導(dǎo)系統(tǒng)庫運行發(fā)現(xiàn)還是不行。

因為我原來項目是OC、Swift混編的我嘗試在新建的OC項目中加入Swift代碼,運行后果然報了錯,之后我開始查找項目添加Swift后與添加前的配置差別果然發(fā)現(xiàn)了不同之處,然后嘗試調(diào)整參數(shù)設(shè)置或者刪除參數(shù)最后發(fā)現(xiàn)是受到參數(shù) SWIFT_OPTIMIZATION_LEVEL的影響
在項目中搜索SWIFT_OPTIMIZATION_LEVEL有的項目會出搜索到圖1 有的會搜索到圖2,這是我遇到的兩種環(huán)境
1. 搜索出來的第一種情況 參數(shù)在Swift Compiler - Code Generation下的子參數(shù)Optimization Level

圖1的情況點擊選項會出現(xiàn)三種,如下圖,選擇第二個-O 即可

2. 搜索出來的第二中情況 參數(shù)在User - define中
需要手動輸入將參數(shù)SWIFT_OPTIMIZATION_LEVEL的值改為-O


這種方法雖然可能能解決undefined symbol * 問題,但是在開發(fā)調(diào)試時會導(dǎo)致其他問題,例如調(diào)試時字典數(shù)組中的值無法取出等。