iOS如何打包支持真机+模拟器?

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

你可能感兴趣的:(iOS如何打包支持真机+模拟器?)