xcode从12版本之后不再推荐大家将模拟器和真机的mach-o文件进行合并,因为他们有很大的区别,也占用大量的资源,更合理的做法是通过一种技术,让xcode自动切换真机和模拟器环境的sdk包,xcode为我们带来了xcframework来处理这个问题。简单来说,xcframework就是将不同架构的framework“合并”到一个(这里的合并不是真的合并,他们本质上还是两个framework),在具体的app打包之后又会只采用相应架构。
为了方便打包,我写了一个脚本,大家把下面的脚本,修改下target_name后,放到framework项目根目录并执行,就可以在dist
目录下发现打包好的xcframework,他的使用和framework完全一致!!
#!/bin/sh
target_name="HTKServices"
dis_path="dist"
if [ ! -d "$dis_path" ]; then
mkdir -p "$dis_path"
fi
cache_path="dist/cache"
if [ ! -d "$cache_path" ]; then
mkdir -p "$cache_path"
fi
_iphonesimulator_xcarchive_path="${cache_path}/${target_name}_iphonesimulator.xcarchive"
_iphoneos_xcarchive_path="${cache_path}/${target_name}_iphoneos.xcarchive"
xcodebuild archive -scheme ${target_name} -archivePath ${_iphonesimulator_xcarchive_path} -sdk iphonesimulator SKIP_INSTALL=NO
xcodebuild archive -scheme ${target_name} -archivePath ${_iphoneos_xcarchive_path} -sdk iphoneos SKIP_INSTALL=NO
xcodebuild -create-xcframework -framework ${_iphonesimulator_xcarchive_path}/Products/Library/Frameworks/${target_name}.framework -framework ${_iphoneos_xcarchive_path}/Products/Library/Frameworks/HTKServices.framework -output ${dis_path}/${target_name}.xcframework