美文网首页
iOS 输出混合指令集的framework

iOS 输出混合指令集的framework

作者: 赵永洪 | 来源:发表于2020-05-12 11:31 被阅读0次

背景

每一个build后只会得到单一指令集的framework,例如x86_64arm64。

一般发布时只会用到arm64指令集(armv7太老可以不用考虑),但是提供framework给其他人用时,难免会用到混合指令集的framwork。

lipo 模拟器framework/包名 真机framework/包名 -create -output 混合framework/包名

脚本

#配置

CURRENT_DIR=`pwd`

#build后的真机、模拟器的framework路径

FRAMEWORK_NAME="${PROJECT_NAME}"

SMIULATOR_FAMEWORK_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"

DEVICE_FAMEWORK_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"

#universal为混合framework路径

UNIVERSAL_DIR="${CURRENT_DIR}/BuildUniversal"

UNIVERSAL_FAMEWORK_PATH="${UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework"

# ${CONFIGURATION} 表示的是配置的模式Debug或Release,这里我Xcode配置的是Debug

# CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 指定build的生成路径,在这里指的是DerivedData的地址

xcodebuild -arch x86_64 -sdk iphonesimulator -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator

xcodebuild -sdk iphoneos -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos

#每次都需要删除旧的文件夹

rm -rf "${UNIVERSAL_DIR}"

mkdir "${UNIVERSAL_DIR}"

#这里创建的framework是空的,没有二进制文件

mkdir "${UNIVERSAL_FAMEWORK_PATH}"

#这里把真机的framework内容完全复制到universal中(也是模拟器,目的是让framework中有内容)

cp -r "${DEVICE_FAMEWORK_PATH}/." "${UNIVERSAL_FAMEWORK_PATH}"

#合并模拟器、真机framework中的二进制文件到universal的二进制文件

lipo "${SMIULATOR_FAMEWORK_PATH}/${FRAMEWORK_NAME}""${DEVICE_FAMEWORK_PATH}/${FRAMEWORK_NAME}" -create -output "${UNIVERSAL_FAMEWORK_PATH}/${FRAMEWORK_NAME}"

先设置模拟器包路径、真机包路径,还有混合包路径

分别编译模拟器、真机

先删除混合包路径,再创建,并且拷贝一个真机包到混合路径

执行lipo命令输出到混合路径

注意:

混合包输出路径在当前工程BuildUniversal

默认包名和工程名一致,不一致时手动修改FRAMEWORK_NAME

添加脚本

在这里粘贴脚本,选择刚才创建的target就可以build生成混合指令集的framework

相关文章

网友评论

      本文标题:iOS 输出混合指令集的framework

      本文链接:https://www.haomeiwen.com/subject/bvxbnhtx.html