创建Framework
1.创建Framework
截屏2025-03-22 20.38.09.png
2.添加文件
截屏2025-03-22 20.39.27.png
3.设置支持环境
Build Active Architecture Only
设置为 NO
时,编译支持的多个版本,如:armv7,arm64
截屏2025-03-22 20.41.31.png
Buliding Settings -> Linking -> Dead Code Stripping
设置为 NO
Dead Code Stripping
无效代码剥离
是一项优化技术,用于在iOS应用程序构建过程中删除未使用的代码,以减小最终应用的大小。但是对于framework来说,应该设置为NO,避免代码、调试符号等被剥离。
截屏2025-03-22 20.42.41.png
Buliding Settings -> Linking -> Mach-O Type
设置为Static Library
静态库
截屏2025-03-22 20.43.00.png
Build Libraries for Distribution
设置为 Yes
分发构建库
将
Build Libraries for Distribution
选项设置为Yes
是为了确保生成的库文件包含必要的接口文件,以便于向下兼容性。这个选项告诉编译器生成.swiftinterface
文件,这对于将来使用低版本的Swift 编译器加载旧版本库非常重要。
截屏2025-03-23 22.42.36.png
Executable: `静态库`,输出二进制
Dynamic Library:`动态非共享库`,输出动态链接库非共享库,程序`运行`时链接到`内存,大部分场景下不可共享;app extension、部分macOS场景下可以共享
Bundle:`动态非共享库`,和Dynamic Library相近,不过需要手动调用函数加载
Static Library: `静态库`,输出静态链接库,程序`编译`时拷贝到`内存`
Relocatable Object File:`静态库`,和Static Library类似,但体积更小
4.设置 Minimum Deployments
最低支持版本
截屏2025-03-22 20.48.18.png
5.设置 Build Configuration
为 Release
截屏2025-03-22 20.41.58.png
Aggregate打包静态库
1.创建 Aggregate
添加Target生成
截屏2025-03-22 20.48.52.png
2.修改 User Script Sandboxing
为 No
截屏2025-03-22 20.52.06.png
3.添加脚本
截屏2025-03-22 20.52.39.png
截屏2025-03-22 20.53.18.png
#!/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
截屏2025-03-22 20.54.05.png
截屏2025-03-23 23.10.14.png
Framework使用
1.在项目 Frameworks, Libraries, and Embedded Content
中拖入 xcFramework
文件夹
截屏2025-03-23 22.01.29.png
2.代码中使用
截屏2025-03-23 22.01.44.png
截屏2025-03-23 22.02.46.png