iOS:XCFramework

1.XCFramework

XCFramework:是蘋(píng)果官方推薦的,支持的,可以更方便的表示一個(gè)多個(gè)平臺(tái)結(jié)構(gòu)的分發(fā)二進(jìn)制的格式。
需要Xcode 11以上支持,
是為更好的支持Mac Catalyst和ARM芯片的macOS。 專?在2019年提出的framework的另一種先進(jìn)格式。
iOS/iPad:arm64
iOS/iPad Simulator:x86_64 arm64
Mac Catalyst: x86_64 arm64 Mac: x86_64 arm64
和傳統(tǒng)的framework相比:

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

2.編譯自己的sdk,生成XCFramework

2.1.分別構(gòu)建模擬器和真機(jī)的打包文件

我們創(chuàng)建的static library形式框架不能使用XCFramework,只針對(duì)Framework形式。

//模擬器平臺(tái)打包
xcodebuild archive -project 'LearnXCFramework.xcodeproj' \
-scheme 'LearnXCFramework' \
-configuration Release \
-destination 'generic/platform=iOS Simulator' \
-archivePath './archives/LearnXCFramework.framework-iphonesimulator.xcarchive' SKIP_INSTALL=NO
//真機(jī)下打包
xcodebuild archive -project 'LearnXCFramework.xcodeproj' \
-scheme 'LearnXCFramework' \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './archives/LearnXCFramework.framework-iphones.xcarchive' SKIP_INSTALL=NO

SKIP_INSTALL只有設(shè)置成NO,才會(huì)把我們的編譯產(chǎn)物放到produce下。

2.2.合并框架

我們使用lipo,缺點(diǎn)是如果兩個(gè)架構(gòu)含有同一個(gè)結(jié)構(gòu),合并失敗,還要分別處理dsym文件,這里我們使用xcodebuild -create-xcframework命令

xcodebuild -create-xcframework \
-framework '../archives/LearnXCFramework.framework-iphones.xcarchive/Products/Library/Frameworks/LearnXCFramework.framework' \
-framework '../archives/LearnXCFramework.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/LearnXCFramework.framework' \
-output LearnXCFramework.xcframework
image.png

我們看到xcodebuild根據(jù)平臺(tái)和架構(gòu)生成不同的framework,但是我們的dsym和BCSymbolMaps文件卻不見(jiàn)了。
我們調(diào)整命令

 xcodebuild -create-xcframework \
-framework '../archives/LearnXCFramework.framework-iphones.xcarchive/Products/Library/Frameworks/LearnXCFramework.framework' \
-debug-symbols '/Users/MacW/Desktop/loginlearn/強(qiáng)化版/強(qiáng)化班-5-動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)實(shí) 戰(zhàn)/自己/XCFramework/LearnXCFramework/archives/LearnXCFramework.framework-iphones.xcarchive/BCSymbolMaps/91D99F1A-2783-34D6-BFE3-AAE0DF0F8E04.bcsymbolmap' \
-debug-symbols '/Users/MacW/Desktop/loginlearn/強(qiáng)化版/強(qiáng)化班-5-動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)實(shí) 戰(zhàn)/自己/XCFramework/LearnXCFramework/archives/LearnXCFramework.framework-iphones.xcarchive/dSYMs/LearnXCFramework.framework.dSYM' \
-framework '../archives/LearnXCFramework.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/LearnXCFramework.framework' \
-debug-symbols '/Users/MacW/Desktop/loginlearn/強(qiáng)化版/強(qiáng)化班-5-動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)實(shí) 戰(zhàn)/自己/XCFramework/LearnXCFramework/archives/LearnXCFramework.framework-iphonesimulator.xcarchive/dSYMs/LearnXCFramework.framework.dSYM' \
-output LearnXCFramework.xcframework
image.png

我們看到我們的dsym和BCSymbolMaps都存在。使用的時(shí)候它會(huì)動(dòng)態(tài)的只加載當(dāng)前需要的架構(gòu)。

2.庫(kù)與庫(kù)之間的混合運(yùn)用

2.1動(dòng)動(dòng)庫(kù)之間

經(jīng)常出現(xiàn)的問(wèn)題,無(wú)法加載被動(dòng)態(tài)庫(kù)引用的動(dòng)態(tài)庫(kù),我們要設(shè)置rpath,或者像cocoapods那樣,把動(dòng)態(tài)庫(kù)直接copy到執(zhí)行文件目錄下。

2.2動(dòng)靜庫(kù)之間

如果app內(nèi)想使用靜態(tài)庫(kù)類,直接指定header search path就可以在app內(nèi)使用。
如果我們不想讓外界使用靜態(tài)庫(kù),我們可以在動(dòng)態(tài)庫(kù)的配置文件中設(shè)置隱藏
-Xlinker -hidden-l"AFNetworking"

2.3靜靜庫(kù)之間

需要指定后者靜態(tài)庫(kù)的路徑。

2.4靜動(dòng)

需要特別指明動(dòng)態(tài)庫(kù)的路徑。

?著作權(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)容