一缴啡、Framework
1.創(chuàng)建Framework
2.添加文件
3.設(shè)置支持環(huán)境羹呵、Architectures倦挂、Mach-O Type
Architectures架構(gòu)
如果沒有特殊要求,就用默認(rèn)的arm64就可以了
Build Active Architecture Only設(shè)置為NO時担巩,編譯支持的多個版本,如: armv7,arm64
Excluded Architectures 排除架構(gòu)
Xcode 12 編譯的模擬器靜態(tài)庫新增支持 arm64没炒,導(dǎo)致和真機(jī)靜態(tài)庫不能合并的問題
需要忽略掉模擬器編譯的 arm64涛癌,在 Build Setting -> Excluded Architectures 添加 Any iOS Simulator SDK 對應(yīng)的值為 arm64,引入的項目中同這樣配置送火。
Mach-O Type:static 靜態(tài)庫
Dead Code Stripping 無效代碼剝離
是一項優(yōu)化技術(shù)拳话,用于在iOS應(yīng)用程序構(gòu)建過程中刪除未使用的代碼,以減小最終應(yīng)用的大小种吸。但是對于framework來說, 應(yīng)該設(shè)置為NO, 避免代碼弃衍、調(diào)試符號等被剝離
Build Libraries for Distribution 為分發(fā)構(gòu)建庫
將 “Build Libraries for Distribution” 選項設(shè)置為 “Yes” 是為了確保生成的庫文件包含必要的接口文件,以便于向下兼容性坚俗。這個選項告訴編譯器生成 “.swiftinterface” 文件镜盯,這對于將來使用低版本的 Swift 編譯器加載舊版本庫非常重要
Executable: `靜態(tài)庫`,輸出二進(jìn)制
Dynamic Library:`動態(tài)非共享庫`猖败,輸出動態(tài)鏈接庫非共享庫速缆,程序`運行`時鏈接到`內(nèi)存,大部分場景下不可共享恩闻;app extension艺糜、部分macOS場景下可以共享
Bundle:`動態(tài)非共享庫`,和Dynamic Library相近,不過需要手動調(diào)用函數(shù)加載
Static Library: `靜態(tài)庫`破停,輸出靜態(tài)鏈接庫翅楼,程序`編譯`時拷貝到`內(nèi)存`
Relocatable Object File:`靜態(tài)庫`,和Static Library類似真慢,但體積更小
4.最低支持版本
5.設(shè)置為Release
二毅臊、Aggregate打包靜態(tài)庫
1.創(chuàng)建Aggregate 添加Target生成
2.修改User Script Sandboxing
3.添加腳本,這里圖片顯示的是framework的制作晤碘,下發(fā)的shell命令已更新為xcFramework
#!/bin/sh
SCHEME_NAME="${PROJECT_NAME}"
FRAMEWORK_NAME="${PROJECT_NAME}"
SIMULATOR_ARCHIVE_PATH="${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphonesimulator.xcarchive"
DEVICE_ARCHIVE_PATH="${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphoneos.xcarchive"
OUTPUT_DIC="${PROJECT_DIR}"
#Clean
rm -rf ./archives
rm -rf "${OUTPUT_DIC}/${FRAMEWORK_NAME}.xcframework"
# Simulator xcarchieve
xcodebuild archive \
-scheme ${SCHEME_NAME} \
-archivePath ${SIMULATOR_ARCHIVE_PATH} \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
# Device xcarchieve
xcodebuild archive \
-scheme ${SCHEME_NAME} \
-archivePath ${DEVICE_ARCHIVE_PATH} \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
# Create xcframwork combine of all frameworks
xcodebuild -create-xcframework \
-framework ${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-framework ${DEVICE_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-output ${OUTPUT_DIC}/${FRAMEWORK_NAME}.xcframework
#open OUTPUT_DIC
open "${OUTPUT_DIC}"
4.運行腳本生成xcFramework