XCFramework
XCFramework是蘋(píng)果官方2019年提出的Framework的另一種先進(jìn)格式,可以更方便的表示一個(gè)平臺(tái)和架構(gòu)的分發(fā)二進(jìn)制庫(kù)的格式,需要Xcode11以上的支持,可以更好的支持Mac Catalyst和ARM芯片的macOS
- 可以用單個(gè).xcframework文件提供多個(gè)平臺(tái)的分發(fā)二進(jìn)制文件
- 和傳統(tǒng)
Fat Header相比,可以按照平臺(tái)劃分,可以包含相同架構(gòu)的不同平臺(tái)的文件 - 使用時(shí),不需要通過(guò)腳本剝離不需要的架構(gòu)體系
編譯打包
-
自己準(zhǔn)備一個(gè)
framework
image.png 通過(guò)
xcodebuild archive命令編譯打包成真機(jī)和模擬器架構(gòu)
xcodebuild archive -project 'SYTimer.xcodeproj' \ //指定project
-scheme 'SYTimer' \ //指定Scheme -- 環(huán)境
-configuration Release \ //指定configuration 配置
-destination 'generic/platform=iOS Simulator' \ //指定分發(fā)的平臺(tái) -- 模擬器 iOS Simulator 真機(jī) iOS
-archivePath '../archives/SYTimer.framework-iphonesimulator.xcarchive' \ //指定輸出路徑
SKIP_INSTALL=NO //將編譯的產(chǎn)物拷貝到 archivePath/Products/Library/Frameworks/ 目錄中
-
SKIP_INSTALL=NO會(huì)將編譯的產(chǎn)物拷貝到 archivePath/Products/Library/Frameworks/ 目錄中
image.png
lipo 傳統(tǒng)合并
-
lipo -output <輸出文件名> -create <Framework1> <Framework2>命令合并兩個(gè)不同架構(gòu)的動(dòng)態(tài)庫(kù),相同架構(gòu)的不能合并
lipo -output SYTimer -create ../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework/SYTimer ../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework/SYTimer
-
lipo -output <輸出文件名> -extract <提取的架構(gòu)> <Framework>從Framework中提取指定架構(gòu)的Framework
lipo -output SYTimer-x86_64 -extract x86_64 ../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework/SYTimer
- 在使用
lipo命令合并傳統(tǒng)的Framework時(shí),我們需要針對(duì)不同的架構(gòu)來(lái)簽名、處理頭文件和資源文件、提供dSYM文件等,而且相同架構(gòu)的不能合并
xcframework合并
-
xcodebuild -create-xcframework命令合并Framework
xcodebuild -create-xcframework \
-framework '../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework' \ //需要合并的Framework1
-debug-symbols '/Users/yp/Desktop/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/9D87CD30-46F3-302A-ADCF-BF46F07578D4.bcsymbolmap' \ //Framework1 的調(diào)試符號(hào) -- 必須是絕對(duì)路徑 -- 要開(kāi)啟bitCode才會(huì)有
-debug-symbols '/Users/yp/Desktop/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/ACA28AC6-6E0E-3F6F-8105-BC1175739A0B.bcsymbolmap' \ //Framework1 的調(diào)試符號(hào) -- 必須是絕對(duì)路徑 -- 要開(kāi)啟bitCode才會(huì)有
-debug-symbols '/Users/yp/Desktop/archives/SYTimer.framework-iphoneos.xcarchive/dSYMs/SYTimer.framework.dSYM' \ //Framework1 的 dSYM調(diào)試符號(hào) -- 必須是絕對(duì)路徑
-framework '../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework' \ //需要合并的Framework2
-debug-symbols '/Users/yp/archives/SYTimer.framework-iphonesimulator.xcarchive/dSYMs/SYTimer.framework.dSYM' \ //Framework2 的 dSYM調(diào)試符號(hào) -- 必須是絕對(duì)路徑
-output 'SYTimer.xcframework' //輸出xcframework

image.png

