You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Xcode 13创建FAT/Universal通用框架

Xcode 13+ 构建FAT/Universal通用框架完整步骤

Xcode 12.4之后Apple新增了对Apple Silicon设备的模拟器arm64架构支持,原有旧脚本未处理模拟器arm64架构与真机arm64架构重复的冲突,会在合并阶段报错,这是旧流程失效的核心原因。

一、项目基础配置(执行构建前必须完成)

  • 打开框架项目,选中对应框架Target,进入Build Settings 标签页
  • 找到Architectures 配置项,保留默认值$(ARCHS_STANDARD)即可,确保覆盖arm64、x86_64全量主流架构
  • 找到Build Active Architecture Only 配置,将Debug、Release等所有配置条目都设置为NO
  • 找到Excluded Architectures 配置项:
    • 针对Any iOS Simulator SDK条目,添加arm64,排除模拟器侧的arm64架构,避免和真机arm64架构冲突
    • 针对Any iOS SDK条目,不要添加任何排除配置,保证真机架构输出完整
  • 找到Skip Install 配置项,将所有配置条目设置为NO

二、手动构建步骤(无需脚本即可快速完成)

  • 构建真机版本:顶部运行目标选择任意iOS真机设备,按下Command + B执行构建,构建完成后右键点击Products目录下的.framework文件,选择Show in Finder,将该框架拷贝到单独的工作目录
  • 构建模拟器版本:顶部运行目标选择任意iOS模拟器,按下Command + B执行构建,同样将构建生成的.framework文件拷贝到同一个工作目录,注意不要和真机版本重名
  • 合并二进制文件:打开终端进入工作目录,执行合并命令:lipo -create 真机框架路径/FrameworkName 模拟器框架路径/FrameworkName -output 输出路径/FrameworkName
  • 生成最终通用框架:将合并后得到的通用二进制文件,替换掉工作目录中任意一个.framework包内的同名二进制文件,替换完成后该.framework就是支持真机+全类型模拟器的FAT通用框架

三、自动构建脚本(集成到Xcode一键生成)

  • 点击项目左下角的+号,选择Cross-platform分类下的Aggregate,创建一个新的Target,命名为UniversalBuild
  • 选中新创建的UniversalBuild Target,进入Build Phases标签页,点击左上角+号选择New Run Script Phase
  • 在脚本输入框中粘贴以下代码,将第一行的FRAMEWORK_NAME替换为你自己的框架实际名称:
# 替换为你的框架实际名称
FRAMEWORK_NAME="YourFrameworkName"
# 通用框架输出路径
UNIVERSAL_OUTPUT_DIR=${SRCROOT}/Build/Universal
# 清理旧构建产物
rm -rf ${UNIVERSAL_OUTPUT_DIR}
mkdir -p ${UNIVERSAL_OUTPUT_DIR}
# 构建真机版本框架
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -sdk iphoneos build BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
# 构建模拟器版本框架
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -sdk iphonesimulator build BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
# 拷贝真机框架到输出目录
cp -R "${BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${UNIVERSAL_OUTPUT_DIR}/"
# 合并真机+模拟器二进制文件
lipo -create -output "${UNIVERSAL_OUTPUT_DIR}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"
# 拷贝Swift模块文件(纯OC框架可删除以下这行)
cp -R "${BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${UNIVERSAL_OUTPUT_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule"
# 构建完成后自动打开输出目录
open "${UNIVERSAL_OUTPUT_DIR}"
  • 配置完成后,顶部运行目标选择UniversalBuild,按下Command + B即可自动构建并打开通用框架所在的输出目录

内容的提问来源于stack exchange,提问作者iDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:45:04