美文网首页
Xcode12Framework制作合并(最新2021)

Xcode12Framework制作合并(最新2021)

作者: 行走在北方 | 来源:发表于2020-12-03 17:23 被阅读0次
1.新建一个库工程 Jietu20201203-144849.jpg

2.添加自己想暴露外界的文件
设置Build Achieve Only NO (爱写不写)


BE30598C-F5B7-43F4-9772-10A17984BA85.png

3.设置静态库


24FAAD06-E195-4D03-955F-2314EFC7160F.png

4.Debug生成模拟器库,Release生成真机库


20201203151340.jpg
5.其实这一步Command+B就完成了库,直接show in finder 复制直接开始使用
想用模拟器库请选用Release-iphonesimulator文件夹下的.framework

想用真机库请选用Release-iphoneos文件夹下的.framework
6.兄台肯定想用最省事的办法,接着往下看,走着。。。


20201203152425.jpg

7.接下来就会看到这样的页面


image.png

8.添加RunScript脚本


image.png

脚本少不了

#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"

#创建输出目录,并删除之前的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}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"


#合并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}"

*********请注意,坑点来了***********
Xcode12以前的话,如果是Debug会生成模拟器的包,release会生成真机包,但是现在生成的模拟器包除了包括i386 x86_64 还有arm64,但是既然包含arm64,但是出来的包,真机是运行不了的,所以如果想要合并包的话,就会合并失败,ERROR原因就是,真机包包含arm64包,模拟器包也包含arm64会有冲突,合并不了
解决方案:
在合并之前,把模拟器的arm64的remove,之后再合并就可以到i386 armv7 x86_64 arm64
都可以运行的包了
完毕
但是我上那边的脚本已经修改过了
看到了吗?嗯就是这


image.png

这样生成的包
通过lipo -info XXX (此命令是查看支持何种架构)
比如:
lipo -info ./Bolts.framework/Bolts
很明显i386 x86_64模拟器 armv7 arm64 真机
iOS app需要在许多不同的CPU架构下运行:

arm7: 在最老的支持iOS7的设备上使用

arm7s: 在iPhone5和5C上使用

arm64: 运行于iPhone5S的64位 ARM 处理器 上

i386: 32位模拟器上使用

x86_64: 64为模拟器上使用

那么生成的包即为模拟器和真机都支持


image.png

Do Not Embed、Embed & Sign和Embed Without Signing

file frameworkToLink.framework/frameworkToLink
current ar archive:说明是静态库,选择Do not embed
Mach-0 dynamically:说明是动态库,选择Embed

codesign -dv frameworkToLink.framwork
code object is not signed at all 或者 adhoc:选择Embed and sign
其它:表示已经正确签名,选择Embed Without Signing

如果再有疑问的,请指出,本人觉得已经够详细了
如果觉得有用,来个点赞吧

相关文章

网友评论

      本文标题:Xcode12Framework制作合并(最新2021)

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