iOS开发自己的Framework之·真机模拟器合并
一、前提条件:你已经创建好自己的xx.framework,如果还没有自己的xx.framework,请参考:如何创建自己的framework 二、步骤简要,这里提供了两种实现方式 方式一:使用shell,简单方便 方式二:使用手动合成,虽然慢,但是更加体现原理和过程,也能很好的解释shell中的命令
方式一:三、方式一的详细步骤 1、创建添加 创建添加
1、生成脚本 并 设置脚本路径
方式二:
1、获取真机编译的framework 和 模拟器编译的framework;
2、合并framework通过终端命令:lipo -create 真机路径 模拟器路径 -output 真机路径;
3、检验合并结果通过终端命令:lipo -info xx.framework/xx
文章图片
创建添加
文章图片
创建添加script
2、复制shell代码,直接复制我下面的shell代码,到你的工程中就行了,不用做任何更改
image.png
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/"#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"
3、编译工程,获取最终的framework,并验证是否包含真机和模拟器的架构关于架构:armv7,armv7s,arm64,i386,x86_64
文章图片
编译command + B,之后会自动打开xx.framework
文章图片
验证是否包含真机和模拟器的架构 四、方式二的详细步骤 1、桌面创建好文件夹,准备存放真机.framework 和 模拟器.framework
文章图片
准备好存放真机和模拟器framework的文件夹 2、Xcode工程-Edit scheme...-Run-选中Release
文章图片
选中release 3、先shift + command + K 清除一下,然后command + B 编译获取真机.framework,并放入到真机文件夹中备用
文章图片
编辑真机.framework
文章图片
真机.framework
文章图片
copy真机.framework放入文件夹 4、先shift + command + K 清除一下,然后command + B 编译获取模拟器.framework,并放入到模拟器文件夹中备用
文章图片
编辑模拟器.framework
文章图片
模拟器.framework
文章图片
copy模拟器.framework放入文件夹 5、验证编译获取到的真机.framework和模拟器.framework的架构是否对应正确 注意:终端命令 lipo -info xx.framework/xx 关于架构:armv7,armv7s,arm64,i386,x86_64
文章图片
模拟器架构i386,x86_64
文章图片
真机架构armv7,armv7s,arm64 【iOS开发自己的Framework之·真机模拟器合并】
5、合并真机和模拟器的framework,这里我是将最终合并的framework,合并到真机.framework中,合并的终端命令:lipo -create 真机路径 模拟器路径 -output 真机路径 注意:这边的真机路径 和 模拟器路径,是xx.framework/xx的路径
文章图片
合并framework 6、验证合并真机和模拟器的结果framework的架构是否包含了真机和模拟器的架构
文章图片
验证合并的framework架构是否正确 7、使用framework 这里就不多说了,大家应该都懂,完结。
五、参考链接: shell方式
shell方式
方式二
推荐阅读
- 尽力
- 深入理解Go之generate
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 2020-04-07vue中Axios的封装和API接口的管理
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 放下心中的偶像包袱吧
- iOS中的Block
- 失踪的钢笔
- 原生家庭之痛与超越
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片