一、Framework
1.创建Framework
2.添加文件
3.设置支持环境、Architectures、Mach-O Type
Architectures架构
如果没有特殊要求,就用默认的arm64就可以了
Build Active Architecture Only设置为NO时,编译支持的多个版本,如: armv7,arm64
Excluded Architectures 排除架构
Xcode 12 编译的模拟器静态库新增支持 arm64,导致和真机静态库不能合并的问题
需要忽略掉模拟器编译的 arm64,在 Build Setting -> Excluded Architectures 添加 Any iOS Simulator SDK 对应的值为 arm64,引入的项目中同这样配置。
Mach-O Type:static 静态库
Dead Code Stripping 无效代码剥离
是一项优化技术,用于在iOS应用程序构建过程中删除未使用的代码,以减小最终应用的大小。但是对于framework来说, 应该设置为NO, 避免代码、调试符号等被剥离
Build Libraries for Distribution 为分发构建库
将 “Build Libraries for Distribution” 选项设置为 “Yes” 是为了确保生成的库文件包含必要的接口文件,以便于向下兼容性。这个选项告诉编译器生成 “.swiftinterface” 文件,这对于将来使用低版本的 Swift 编译器加载旧版本库非常重要
Executable: `静态库`,输出二进制
Dynamic Library:`动态非共享库`,输出动态链接库非共享库,程序`运行`时链接到`内存,大部分场景下不可共享;app extension、部分macOS场景下可以共享
Bundle:`动态非共享库`,和Dynamic Library相近,不过需要手动调用函数加载
Static Library: `静态库`,输出静态链接库,程序`编译`时拷贝到`内存`
Relocatable Object File:`静态库`,和Static Library类似,但体积更小
4.最低支持版本
5.设置为Release
二、Aggregate打包静态库
1.创建Aggregate 添加Target生成
2.修改User Script Sandboxing
3.添加脚本,这里图片显示的是framework的制作,下发的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