Cocoapods 靜態(tài)庫/動態(tài)庫相關配置的使用

總結(jié) Cocoapods 靜態(tài)庫/動態(tài)庫相關配置的使用先舷。

知識背景介紹

iOS 靜態(tài)庫和動態(tài)庫產(chǎn)物有兩種形式悲敷,.a 和 .xcframework/.framework昼钻。
.a 是靜態(tài)庫溃论,.xcframework/.framework 可能是靜態(tài)庫,也可能是動態(tài)庫霉涨。
.xcframework 包含不同 CPU 架構(gòu)下的 .framework。

配置總結(jié)

列舉各種配置的情況惭适。

不指定 use_frameworks! 或 use_modular_headers!

默認編譯成靜態(tài)庫(.a 格式)嵌纲。
如果依賴沒有定義 modules 的庫,會報錯腥沽。舉例如下:

'https://github.com/Cocoapods/Specs.git'
platform :ios, '13.0'
workspace 'test.xcworkspace'
target 'test' do
  pod 'KingfisherWebP'
end

報錯:

[!] The following Swift pods cannot yet be integrated as static libraries:

The Swift pod KingfisherWebP depends upon libwebp, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set use_modular_headers! globally in your Podfile, or specify :modular_headers => true for particular dependencies.

可以通過在 Podfile 中全局指定或指定對應的庫來解決:

use_modular_headers!
或者
pod 'libwebp', :modular_headers => true

僅指定 use_frameworks!

根據(jù)庫指定的產(chǎn)物形式(庫的 podspec 文件中定義的 static_framework)逮走,將源碼組件打包成 .xcframework 形式的靜態(tài)庫或動態(tài)庫。 s.static_framework = true 則打包成靜態(tài)庫今阳,沒有指定或者 false 則打包成動態(tài)庫师溅。

s.static_framework = true

僅對源碼組件有效。

僅指定 use_frameworks! :linkage => :static

如果庫沒有指定產(chǎn)物形式(庫的 podspec 文件中定義的 static_framework)盾舌,則將源碼組件打包成 .xcframework 形式的靜態(tài)庫墓臭。

僅對源碼組件有效。

僅指定 use_frameworks! :linkage => :dynamic

如果庫沒有指定產(chǎn)物形式(庫的 podspec 文件中定義的 static_framework)妖谴,則將源碼組件打包成 .xcframework 形式的動態(tài)庫窿锉。

僅對源碼組件有效。

static_framework 和 use_frameworks! :linkage 的優(yōu)先級

庫的 podspec 文件中定義的 static_framework 膝舅,會覆蓋 use_frameworks! :linkage 指定的產(chǎn)物形式嗡载。

僅指定 use_modular_headers!

如第一種情況所說,解決編譯成靜態(tài)庫時依賴沒有定義 modules 的庫的問題仍稀。

可以和 use_frameworks! 共存洼滚,因為 use_frameworks! 只是指定源碼組件編譯成動態(tài)庫還是靜態(tài)庫,而 use_modular_headers! 是解決沒有定義 modules 的庫編譯成靜態(tài)庫的問題技潘。

查看 .framework 是靜態(tài)庫還是動態(tài)庫

file 命令:

file [build path]/Kingfisher/Kingfisher.framework/Kingfisher

動態(tài)庫結(jié)果:

Frameworks/Kingfisher.framework/Kingfisher: Mach-O 64-bit dynamically linked shared library arm64

靜態(tài)庫結(jié)果:

/Kingfisher.framework/Kingfisher: current ar archive

歷史原因

● Xcode 9 之前 不支持 Swift 靜態(tài)庫編譯遥巴,使用 use_frameworks! 指定千康。但是引用大量動態(tài)庫會導致應用程序啟動時間變長。
● Xcode 9 之后 開始支持 Swift 靜態(tài)庫編譯铲掐。但如果一個 Swift Pod 依賴一個 OC Pod拾弃,那么要為對應的 OC Pod 開啟 modular headers,開啟 modular headers 的本質(zhì)就是將 Pod 轉(zhuǎn)換為 Modular(也就是支持模塊)摆霉。

好處:

  1. 簡化 Swift 引用 OC 的方式 Modular 是可以直接在 Swift 中 import 的砸彬,不需要再經(jīng)過 bridging-header 進行橋接,從而簡化了 Swift 引用 OC 的方式斯入。只有支持了模塊的框架砂碉,才能支持通過模塊化頭文件(Modular Header)的方式進行導入。我們可以通過添加 modulemap 文件使框架支持模塊刻两。
  2. 強制使用更優(yōu)的模塊導入方式 CocoaPods 誕生之初增蹭,使用較為寬松的頭文件搜索路徑(Header Search Paths),允許 Pod 之間的相互引用磅摹,無需考慮命名空間滋迈,不必采用 #import <NameSpace/fileName.h> 的模塊導入方式,允許采用 #import "fileName.h" 的導入方式户誓。但是饼灿,如果使 Pod 支持模塊化,會導致 #import "fileName.h" 無法正常導入帝美。使用 use_modular_headers! 可以強制使用更優(yōu)的模塊導入方式碍彭。

參考

https://guides.cocoapods.org/syntax/podfile.html
https://guides.cocoapods.org/syntax/podspec.html#static_framework http://blog.cocoapods.org/CocoaPods-1.5.0/ http://clang.llvm.org/docs/Modules.html https://andelf.github.io/blog/2014/06/19/modules-for-swift/ https://stackoverflow.com/questions/52855780/sub-project-does-not-find-swift-modules-installed-via-pods

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悼潭,隨后出現(xiàn)的幾起案子庇忌,更是在濱河造成了極大的恐慌,老刑警劉巖舰褪,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皆疹,死亡現(xiàn)場離奇詭異,居然都是意外死亡占拍,警方通過查閱死者的電腦和手機略就,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晃酒,“玉大人表牢,你說我怎么就攤上這事∫创” “怎么了初茶?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浊闪。 經(jīng)常有香客問我恼布,道長,這世上最難降的妖魔是什么搁宾? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任折汞,我火速辦了婚禮,結(jié)果婚禮上盖腿,老公的妹妹穿的比我還像新娘爽待。我一直安慰自己,他們只是感情好翩腐,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布鸟款。 她就那樣靜靜地躺著,像睡著了一般茂卦。 火紅的嫁衣襯著肌膚如雪何什。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天等龙,我揣著相機與錄音处渣,去河邊找鬼。 笑死蛛砰,一個胖子當著我的面吹牛罐栈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泥畅,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荠诬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了位仁?” 一聲冷哼從身側(cè)響起浅妆,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎障癌,沒想到半個月后凌外,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡涛浙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年康辑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轿亮。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疮薇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出我注,到底是詐尸還是另有隱情按咒,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布但骨,位于F島的核電站励七,受9級特大地震影響智袭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掠抬,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一吼野、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧两波,春花似錦瞳步、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劣坊,卻和暖如春嘀倒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讼稚。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工括儒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锐想。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓帮寻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赠摇。 傳聞我的和親對象是個殘疾皇子固逗,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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