什么是 XCFramework?
XCFramework 是 Apple 提供的一种新的框架格式,用于支持多平台和多架构的二进制分发,它可以:
• 支持跨平台(如 iOS、macOS、tvOS 等)
• 兼容不同架构(如 arm64、x86_64 等)
• 能同时支持模拟器和真机
• 允许在一个包中包含多个架构和平台的二进制文件
创建步骤
1. 准备工作
首先需要创建一个基础的框架项目,打开 Xcode,新建项目,选择项目类型为 Framework,根据提示完成框架项目的基本创建。
2. 构建各个平台的 Framework
在创建 XCFramework 之前,需要分别为真机和模拟器构建框架。可以通过 xcodebuild 命令实现。
2.1 构建 iOS 设备(真机)版本
使用以下命令构建适用于 iOS 设备的 framework,并指定构建选项:
xcodebuild archive \
-scheme "你的框架名" \
-archivePath "./build/ios.xcarchive" \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
2.2 构建 iOS 模拟器版本
接下来,为模拟器构建框架:
xcodebuild archive \
-scheme "你的框架名" \
-archivePath "./build/ios-sim.xcarchive" \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
3. 生成 XCFramework
在完成上述两个平台的构建后,可以将它们合并生成一个 XCFramework:
xcodebuild -create-xcframework \
-framework "./build/ios.xcarchive/Products/Library/Frameworks/你的框架名.framework" \
-framework "./build/ios-sim.xcarchive/Products/Library/Frameworks/你的框架名.framework" \
-output "./build/你的框架名.xcframework"
4. 自动化脚本示例
为了简化构建流程,可以创建一个自动化脚本 build-xcframework.sh,将构建过程脚本化:
#!/bin/bash
# 设置变量
FRAMEWORK_NAME="你的框架名"
OUTPUT_DIR="./build"
# 创建输出目录
mkdir -p $OUTPUT_DIR
# 清理旧的构建文件
rm -rf $OUTPUT_DIR/*
# 构建 iOS 设备版本
xcodebuild archive \
-scheme "$FRAMEWORK_NAME" \
-archivePath "$OUTPUT_DIR/ios.xcarchive" \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
# 构建 iOS 模拟器版本
xcodebuild archive \
-scheme "$FRAMEWORK_NAME" \
-archivePath "$OUTPUT_DIR/ios-sim.xcarchive" \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
# 创建 XCFramework
xcodebuild -create-xcframework \
-framework "$OUTPUT_DIR/ios.xcarchive/Products/Library/Frameworks/$FRAMEWORK_NAME.framework" \
-framework "$OUTPUT_DIR/ios-sim.xcarchive/Products/Library/Frameworks/$FRAMEWORK_NAME.framework" \
-output "$OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
echo "XCFramework 已生成在: $OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
5. 确保正确的构建配置
在创建 XCFramework 时,确保以下设置正确:
• 在项目的 Build Settings 中设置 BUILD_LIBRARY_FOR_DISTRIBUTION = YES。
• 确保 SKIP_INSTALL = NO。
验证生成的 XCFramework
可以使用 lipo 命令检查生成的 XCFramework 是否包含预期的架构:
lipo -info ./build/你的框架名.xcframework/ios-arm64/你的框架名.framework/你的框架名
以上教程提供了从创建项目到生成 XCFramework 的完整流程,配合自动化脚本,大大简化了重复构建操作。