Cocoapods 動(dòng)態(tài)依賴(lài)和靜態(tài)依賴(lài)混用是否可行?

Cocoapods 大家都用得不少,相信下面這一行都不陌生:

use_frameworks!

這一行的作用聲明是cocoapods生成的target使用framework的形式進(jìn)行依賴(lài)。這里有個(gè)比較容易混淆的概念,framework并不等于動(dòng)態(tài)庫(kù),實(shí)際上framework和動(dòng)態(tài)庫(kù)是兩個(gè)獨(dú)立的概念,framework也有靜態(tài)庫(kù)的,比如友盟提供的sdk,就是一個(gè)靜態(tài)的framework.
framework 的mach-o type 可以自行選擇:


屏幕快照 2019-06-19 下午8.59.58.png

cocoapods 的use_framework! 生成的依賴(lài)默認(rèn)是動(dòng)態(tài)庫(kù)依賴(lài)。

對(duì)于大部分場(chǎng)景,動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)依賴(lài)對(duì)開(kāi)發(fā)者來(lái)說(shuō)其實(shí)區(qū)別不大,其中一個(gè)小小的區(qū)別就是,use_framework會(huì)自動(dòng)生成一個(gè)copy framework的腳本。如圖:


企業(yè)微信截圖_dd76dbeb-0efc-4775-9d8e-b93c82af11e8.png

由于動(dòng)態(tài)庫(kù)的代碼段并不會(huì)鏈入可執(zhí)行文件,而是作為一個(gè)單獨(dú)的文件放在Framework文件夾,在app啟動(dòng)的時(shí)候通過(guò)dyld加載,因此,cocoapods生成的這些動(dòng)態(tài)依賴(lài)庫(kù)需要復(fù)制到相應(yīng)的文件夾。其作用大概相當(dāng)于這里:


屏幕快照 2019-06-19 下午9.09.48.png

這里添加的動(dòng)態(tài)庫(kù)也會(huì)打進(jìn)app里面。

于是問(wèn)題就來(lái)了,如果我的cocoapods由于一些歷史原因,不能使用use_framework,但是又依賴(lài)了一些自定義的動(dòng)態(tài)庫(kù),這怎么處理呢?
一開(kāi)始我嘗試多target 使用不同的配置,比如TargetA 用靜態(tài)依賴(lài),TargetB用動(dòng)態(tài)依賴(lài),但是會(huì)報(bào)這個(gè)錯(cuò)誤:

屏幕快照 2019-06-19 下午8.40.43.png

貌似走不通。然后到cocoapods 的github上翻一下issue,看有沒(méi)有類(lèi)似的案例,然后發(fā)現(xiàn)一個(gè)絕望的事實(shí):
https://github.com/CocoaPods/CocoaPods/issues/3839
屏幕快照 2019-06-19 下午9.16.27.png

屏幕快照 2019-06-19 下午9.16.34.png

官方不支持,也不打算支持。
所以,放棄混用的念頭吧,乖乖地?fù)Q成全局的use_framework! , 或者自己在buildphase里自己寫(xiě)copy的腳本吧。

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

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

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