ios自定义.framework .framework可以制作为静态库和动态库,此文章是制作静态库。系统的.framework都是动态库,自己制作的.framework都是静态库。
如何制作.framework如下:
1.用xcode创建一个framework工程,如下图
2.编写自己的工具类。如下图
3.设置Build Active Architecture Only 值 为NO。如下图(适配所有版本的模拟器和真机)
4.设置Mach-O Type值为Static Library(静态库)。如下图
5.将你需要别人引用的头文件设置public。默认在project(不可见,私有)。
6.引入头文件,有几个public 就引入几个public文件
7.创建Target。File->New->Target->Other->Aggregate。如下图
8.添加脚本。如下图
9.下面的脚本代码复制到新建的 Run Script. 如下图
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/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}-iphonesimulator/${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}"
10.切换Scheme,CusFrameWork 设置Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。(模拟器生成的.framework, 不需要arm64架构)。如下图 切记taget不要看错了。
11.Scheme:CusFrameWork, 设置编译模式 release。如下图
12.设置.framework的最低版本,如下图
13.Schem: CusFrameWork. 选择真机,command+b 生成真机.framework。如下图
14. Schem: CusFrameWork. 选择模拟器,command+b 生成真机.framework。如下图
13.切换Schem:Aggregate, 选择 any ios device, command+B 编译运行脚本,脚本会自动打开文件夹 如下图
14.测试引入.framework. 新建一个项目TestCusFrameWork. 将13步骤中的CusFrameWork.framework文件夹 放到此项目中的根目录中。然后引入。如下图
15.在TestCusFrameWork使用自己制作的SDK 并运行,成功打印。如下图
完结 OK