从包含多架构的 framework 生成 xcframework

May 06, 2021 • 预计阅读时间 1 分钟

xcframework 是多个 framework 的集合,它是一个包含有多个 framework 的文件夹。

以腾讯云的 ImSDK 为例演示如何生成 ImSDK.xcframework

ImSDK.framework 里包含了 3 种架构:armv7 arm64 x86_64,分别对应真机和模拟器。

创建 2 个文件夹,名称是 iphoneosiphonesimulator,文件夹名字不是随便起的,需要和 Xcode 的 Build Settings 里的 target 一致。

mkdir iphoneos iphonesimulator
cp -r ImSDK.framework iphoneos/
cp -r ImSDK.framework iphonesimulator/

iphoneos 只能包含 arm 架构的库,真机使用。

iphonesimulator 只能包含 i386 或者 x86_64 的库,给模拟器用。

lipo -remove x86_64 ImSDK.framework/ImSDK \
     -output iphoneos/ImSDK.framework/ImSDK

lipo -extract x86_64 ImSDK.framework/ImSDK \
     -output iphonesimulator/ImSDK.framework/ImSDK

最后把 iphoneos/ImSDK.frameworkiphonesimulator/ImSDK.framework 整合成 ImSDK.xcframework

xcodebuild -create-xcframework \
           -framework iphoneos/ImSDK.framework \
           -framework iphonesimulator/ImSDK.framework \
           -output ImSDK.xcframework

把生成的 ImSDK.xcframework 拖到 Link Binary With Libraries 里。

因为 ImSDK 是动态库,是需要嵌入到 APP 里的,还需要设置为 Embed & Sign 才能正常运行,静态库则是 Do Not Embed

如果还想把 macOS 版本的 ImSDK.framework 一起集成到 xcframework 里,只需要再创建一个 macosx 目录,然后把 ImSDKForMac 改名为 ImSDK 就可以了。

以上操作可以使用脚本一键完成: https://github.com/cntrump/ImSDK-xcframework

Xcode
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

clang 跨平台编译 iOS/macOS arm64/x86_64

使用 -l 链接时,如何确定链接动态库还是静态库