iOS-開發(fā)進(jìn)階06:XCFramework

iOS 開發(fā)進(jìn)階 文章匯總

目錄


一扒接、XCFramework簡介

XCFramework:是2019蘋果官方提出的Framework的另一種先進(jìn)格式,可以更方便的表示多個平臺和架構(gòu)的分發(fā)二進(jìn)制庫的格式袍啡。
需要Xcode11以上支持踩官。
是為更好的支持Mac CatalystARM芯片的macOS

和傳統(tǒng)的Framework相比:

  1. 可以用單個.xcframework文件提供多個平臺的分發(fā)二進(jìn)制文件;
  2. 與Fat Header相比境输,可以按照平臺劃分蔗牡,可以包含相同架構(gòu)的不同平臺的文件;
  3. 在使用時,不需要再通過腳本去剝離不需要的架構(gòu)體系嗅剖。

lipo指令和XCFramework
iOS lipo使用
swift framework工程下調(diào)用Objective-C或C類庫

Swift framework 與 OC 混編
iOS 靜態(tài)庫和動態(tài)庫打包framework流程(純swift版/swift辩越、OC混編版)

二、創(chuàng)建XCFramework

準(zhǔn)備如下代碼(創(chuàng)建Framework Project):


添加代碼后編譯

模擬器編譯失敗信粮,真機編譯成功創(chuàng)建的XCFramework也可以在模擬器和真機上運行

1区匣、創(chuàng)建模擬器和真機平臺下的Framework

build.sh中的命令如下:

xcodebuild archive -project 'SYTimer.xcodeproj' \
-scheme 'SYTimer' \
-configuration Release \
-destination 'generic/platform=iOS Simulator' \
-archivePath '../archives/SYTimer.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO

xcodebuild archive -project 'SYTimer.xcodeproj' \
-scheme 'SYTimer' \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath '../archives/SYTimer.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO

引入Pod依賴時修改如下:

xcodebuild archive -workspace MyFramework.xcworkspace \
-scheme MyFramework \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath '../archives/MyFramework.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO

三方庫不支持x86_86架構(gòu)時修改如下:

xcodebuild archive -project 'FFTGStickerView.xcodeproj' \
-scheme 'FFTGStickerView' \
-configuration Release \
-sdk iphonesimulator \
-arch arm64 \
-archivePath '../archives/FFTGStickerView.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO

List of destinations

執(zhí)行build.sh腳本:

2、創(chuàng)建XCFramework

創(chuàng)建xcframework文件夾

cd xcframework文件夾路徑

xcodebuild -create-xcframework \
-framework '../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-framework '../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-output 'SYTimer.xcframework'

一般XCFramework需要包含BitCode(Xcode Build Settings開啟)和dSYMs方便崩潰時恢復(fù)調(diào)用棧蒋院,那么修改創(chuàng)建XCFramework的命令如下:

xcodebuild -create-xcframework \
-framework '../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-debug-symbols '/Users/ztkj/Desktop/創(chuàng)建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/1F3E7957-8302-390B-AE49-34E61B49E11E.bcsymbolmap' \
-debug-symbols '/Users/ztkj/Desktop/創(chuàng)建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/5C6DD85F-0EFE-3551-B330-5AC4A91D32ED.bcsymbolmap' \
-debug-symbols '/Users/ztkj/Desktop/創(chuàng)建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/dSYMs/SYTimer.framework.dSYM' \
-framework '../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-debug-symbols '/Users/ztkj/Desktop/創(chuàng)建XCFramework/archives/SYTimer.framework-iphonesimulator.xcarchive/dSYMs/SYTimer.framework.dSYM' \
-output 'SYTimer.xcframework'

?注意:1亏钩、只有真機才有BitCode。2欺旧、BitCode和dSYMs的文件路徑必須傳絕對路徑
3姑丑、lipo合并不同平臺的Framework要求Framework之間不能有相同的架構(gòu)

3、使用XCFramework

Xcode會根據(jù)不同的編譯平臺拷貝XCFramework中相應(yīng)平臺架構(gòu)下的二進(jìn)制代碼

4辞友、使用報錯

dyld[6111]: Library not loaded: @rpath/MyFramework.framework/MyFramework

Targets->General->Frameworks, Libraries, and Embedded Content
將添加的MyFramework.framework刪除后重新加一次——> Clean->Run

三栅哀、其他問題

1、自己制作的XCFrameworkA引用自己制作的XCFrameworkB:

#if canImport(FFImageEditor)
import FFImageEditor
#endif

代碼中也進(jìn)行同樣的判斷

2称龙、自己制作的XCFrameworkA通過Pod引入三方庫

報錯: no such module

Build Setting-> Framework Search Ppaths中添加路徑
eg: "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit"

3留拾、通過命令行生成,XCFramework: xcodebuild -create-xcframework 報錯

Build Settings ~> Build Library for Distribution 設(shè)為YES鲫尊。否則在生成 xcframework時會報錯No 'swiftinterface' files found within xx.swiftmodule


參考

Session視頻地址

iOS制作framework技術(shù)總結(jié)(內(nèi)部及外部引用第三方庫)

developer.apple.com/videos/play…

文檔說明

devstreaming-cdn.apple.com/videos/wwdc…

其他第三方的資料

appspector.com/blog/xcfram…

github.com/bielikb/xcf…

juejin.im/post/684490…

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痴柔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疫向,更是在濱河造成了極大的恐慌咳蔚,老刑警劉巖豪嚎,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谈火,居然都是意外死亡侈询,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門糯耍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扔字,“玉大人,你說我怎么就攤上這事温技±沧猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵荒揣,是天一觀的道長。 經(jīng)常有香客問我焊刹,道長系任,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任虐块,我火速辦了婚禮俩滥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贺奠。我一直安慰自己霜旧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布儡率。 她就那樣靜靜地躺著挂据,像睡著了一般。 火紅的嫁衣襯著肌膚如雪儿普。 梳的紋絲不亂的頭發(fā)上崎逃,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音眉孩,去河邊找鬼个绍。 笑死,一個胖子當(dāng)著我的面吹牛浪汪,可吹牛的內(nèi)容都是我干的巴柿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼死遭,長吁一口氣:“原來是場噩夢啊……” “哼广恢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呀潭,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袁波,失蹤者是張志新(化名)和其女友劉穎瓦阐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篷牌,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡睡蟋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了枷颊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戳杀。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖夭苗,靈堂內(nèi)的尸體忽然破棺而出信卡,到底是詐尸還是另有隱情,我是刑警寧澤题造,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布傍菇,位于F島的核電站,受9級特大地震影響界赔,放射性物質(zhì)發(fā)生泄漏丢习。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一淮悼、第九天 我趴在偏房一處隱蔽的房頂上張望咐低。 院中可真熱鬧,春花似錦袜腥、人聲如沸见擦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲤屡。三九已至,卻和暖如春福侈,著一層夾襖步出監(jiān)牢的瞬間执俩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工癌刽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留役首,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓显拜,卻偏偏與公主長得像衡奥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子远荠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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