如何将Rust静态库、C FFI层及Swift绑定整合为iOS单XCFramework?
把UniFFI生成的Swift高阶绑定整合到单XCFramework的方案
前置准备
确保你已拥有:
- 针对iOS设备(aarch64-apple-ios)的静态库
libuniffi_example.a - 针对iOS模拟器(x86_64-apple-ios + aarch64-apple-ios-sim)的胖静态库
libuniffi_example.a - UniFFI生成的文件:
exampleFFI.h、exampleFFI.modulemap、example.swift
步骤1:为各架构创建.framework结构
XCFramework基于多平台的.framework打包,需先为设备和模拟器分别构建包含所有资源的.framework。
设备架构(aarch64-apple-ios)
- 创建如下目录结构:
uniffi_example_device/ ├── uniffi_example.framework/ │ ├── Headers/ │ │ ├── exampleFFI.h │ │ └── uniffi_example.h │ ├── Modules/ │ │ └── module.modulemap │ ├── uniffi_example │ ├── Classes/ │ │ └── example.swift │ └── Info.plist - 完成文件填充:
- 将
libuniffi_example.a重命名为uniffi_example,放入框架根目录 - 在
Headers/uniffi_example.h中添加:#import "exampleFFI.h"(作为统一导出的伞头) - 替换
Modules/module.modulemap内容:framework module uniffi_example { umbrella header "uniffi_example.h" export * module * { export * } module exampleFFI { header "exampleFFI.h" export * } } - 将
example.swift放入Classes/目录 - 添加符合iOS规范的
Info.plist(可从Xcode新建框架项目导出模板,修改Bundle ID、版本号等字段)
- 将
模拟器架构(x86_64 + aarch64-apple-ios-sim)
复制上述设备的目录结构,命名为uniffi_example_simulator,替换其中的静态库为模拟器胖静态库,其余文件保持一致。
步骤2:编译.framework(可选)
如果手动创建的结构需要验证编译,可通过Xcode或命令行编译:
# 编译设备版本 xcodebuild -project YourTempProject.xcodeproj -scheme uniffi_example -sdk iphoneos -configuration Release # 编译模拟器版本 xcodebuild -project YourTempProject.xcodeproj -scheme uniffi_example -sdk iphonesimulator -configuration Release
编译完成后,Xcode会在Build/Products目录下生成对应架构的.framework。
步骤3:打包为XCFramework
执行以下命令,将两个架构的.framework合并为单个XCFramework:
xcodebuild -create-xcframework \ -framework ./uniffi_example_device/uniffi_example.framework \ -framework ./uniffi_example_simulator/uniffi_example.framework \ -output uniffi_example.xcframework
验证使用
将生成的uniffi_example.xcframework导入Xcode项目,直接通过import uniffi_example即可调用高阶Swift绑定API,无需额外引入文件。
内容的提问来源于stack exchange,提问作者dlggr
相关产品推荐
相关产品推荐

