![](https://img.haomeiwen.com/i337293/d5be5091db4677cf.jpg)
2.添加自己想暴露外界的文件
设置Build Achieve Only NO (爱写不写)
![](https://img.haomeiwen.com/i337293/1bc39d80c020b182.png)
3.设置静态库
![](https://img.haomeiwen.com/i337293/f99fa20115ea1e74.png)
4.Debug生成模拟器库,Release生成真机库
![](https://img.haomeiwen.com/i337293/20371814359430d8.jpg)
5.其实这一步Command+B就完成了库,直接show in finder 复制直接开始使用
想用模拟器库请选用Release-iphonesimulator文件夹下的.framework
想用真机库请选用Release-iphoneos文件夹下的.framework
6.兄台肯定想用最省事的办法,接着往下看,走着。。。
![](https://img.haomeiwen.com/i337293/bb1fb52e84b409c2.jpg)
7.接下来就会看到这样的页面
![](https://img.haomeiwen.com/i337293/e7d8fca8894ca6aa.png)
8.添加RunScript脚本
![](https://img.haomeiwen.com/i337293/ed2a0d29a0aef396.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
都可以运行的包了
完毕
但是我上那边的脚本已经修改过了
看到了吗?嗯就是这
![](https://img.haomeiwen.com/i337293/253c6f21b9475302.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为模拟器上使用
那么生成的包即为模拟器和真机都支持
![](https://img.haomeiwen.com/i337293/9026094d45582e0f.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
如果再有疑问的,请指出,本人觉得已经够详细了
如果觉得有用,来个点赞吧
网友评论