前景
- 心血来潮觉得自己也要有一个SDK了,于是乎就想起来要制作一个Framwork,为什么不做.a文件呢?因为.a文件还需要自己引入头文件配合使用,这个对于我这个懒人是不能忍受的。
- 在制作的过程中遇到很多坑,也在网上查阅了很多资料,于是乎就想把其记录下来。
<br />
正文
- 1.0 创建工程
- 1.1 然后就是输入SDK名称
<br />
- 2.0 配置SDK支持的最低版本
- 2.1 其它配置信息
- 2.2 支持bitcode
- 3.0 然后就是自己添加一些类文件进去
这里我就随便添加几个方法进去,提供外界调用。
<br />
- 3.1 对外公开的文件如何显示
<br />
- 3.2 导入头文件到.h文件中
<br />
- 3.3 pch文件的使用 如果没有这个需求请忽略3.3
<br />
- 4.0 合包
- 如果不进行合包操作,真机包只能再真机上面运行,模拟器的包只能在模拟器上面运行。
合包操作大概分为两种:手动、脚本。
手动就不说了,其实脚本也是手动,只不过不用自己敲
<br />
-
4.1 添加脚本
创建一个脚本
脚本代码如下,如果第一次编辑,会报错,报错的原因是找不到另外一个framework文件,在真机/模拟器编译一次就好了
模拟器编译一次、真机编译一次,不分顺序。
#需要注意的是,如果你的Framwork与你的工程名不一致,${PROJECT_NAME} 需要自改为你的framwork名称
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi
<br />
- 5.0 找到framework
<br />
- 6.0 导入工程测试
- 6.1 导入framework
- 6.3 使用
总结:制作framework就经历了上面的这些步骤
<br />
篇外:
- Archive 打包失败
要把framework放到与工程目录同级文件夹下,不要放入工程文件夹中。
错误<br />
<br />
- 找不到方法报错
两种情况,要么你没有实现.m文件,要么你使用了分类,如果你使用了分类,需要添加-ObjC(一般这个就足够了,如果还是不行,那就试试 -all_load 、 -force_load)
- 万恶的Linker错误
引起这个的方式有很多,我这里遇到的是:bitcode所引起的,如果你的SDK不支持bitcode 那么你的项目也不能开启bitcode,否则就会出现这样子的错误
网友评论