The ‘Pods-XXX’ target has transitive dependencies that include statically linked binaries

一、背景

將Swift工程依賴的三方庫生成xcframework二進制庫格式后,制作為pod私有庫,然后工程改為依賴這個pod私有庫。
然后執(zhí)行pod install,報錯:
The ‘Pods-XXX’ target has transitive dependencies that include statically linked binaries: xxxx.xcframework.
Pods-XXX具有可傳遞的依賴項,依賴項中包含了靜態(tài)鏈接的二進制文件。

  • transitive dependencies
    Cocoapods的依賴結(jié)構(gòu)中,某個庫所依賴的庫稱為直接依賴項,這些直接依賴項所依賴的其他庫稱為傳遞依賴項。
    簡單來說,如果 Pods-XXX 中的一個庫A依賴了另一個庫B,那么B就是庫A的直接依賴項,而如果庫B又依賴了其他庫C和D,那么C和D就是 Pods-XXX 的傳遞依賴項。

在這種情況下,當您編譯Pods-XXX時,編譯器需要將所有傳遞依賴項的代碼一起編譯并打包到最終生成的可執(zhí)行文件中。

二、 報錯的原因及解決
  • 報錯的原因
    通常是由于動態(tài)庫和靜態(tài)庫之間的沖突導致的。你的 Podfile 中的某些其他依賴可能已經(jīng)使用了靜態(tài)庫(可能是.podspec文件中寫了s.static_framework = true),并與你的xcframework沖突。一般這個沖突是由于構(gòu)架不匹配:xcframework支持多個架構(gòu)的二進制文件,但靜態(tài)庫通常只提供單個架構(gòu)的二進制文件。如果你的靜態(tài)庫和 xcframework之間的架構(gòu)不匹配,就會導致沖突。
解決方法

辦法一:
將依賴了xcframework庫的私有庫改為動態(tài)庫(s.static_framework = false)。

  • 方法二:繞過CocoaPods靜態(tài)庫傳遞依賴檢查機制。
    修改podfile,增加如下代碼
pre_install do |installer|
 Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end

說明:

這段代碼使用 Ruby 的元編程方式在 Pod 庫中的 Pod::Installer::Xcode::TargetValidator 類中定義了一個名為 verify_no_static_framework_transitive_dependencies 的空方法。

具體來說,這是使用了 Ruby 中的 define_method 方法,它可以動態(tài)地為某個類添加一個方法。在這里,通過使用 define_method 方法,我們可以將一個名為 :verify_no_static_framework_transitive_dependencies 的方法添加到 ‘Pod::Installer::Xcode::TargetValidator’ 類中。

在這個方法中,并沒有具體的實現(xiàn)代碼,而是一個空方法。這是因為這個方法需要在運行時被 CocoaPods 內(nèi)部的其他方法調(diào)用,以實現(xiàn)檢查靜態(tài)庫傳遞依賴的功能。

這種做法可以繞過 CocoaPods 實際代碼中對 verify_no_static_framework_transitive_dependencies 的檢查機制,從而設(shè)置該選項為 true,以驗證 CocoaPods 依賴是否存在靜態(tài)庫傳遞依賴。也就是說,通過這段代碼,我們可以使用靜態(tài)庫作為 CocoaPods 直接依賴,同時仍然開啟 verify_no_static_framework_transitive_dependencies 檢查機制,使得 CocoaPods 仍然可以檢查傳遞依賴是否符合要求。

需要注意的是,這種做法并不推薦使用,因為繞過 CocoaPods 檢查機制可能會導致其他問題的出現(xiàn)。通常來說,我們應(yīng)該盡可能避免靜態(tài)庫的傳遞依賴,并且始終推薦使用動態(tài)庫來避免相關(guān)的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容