最近经常会被问到如何创建一个SDK,这里把步骤记录下来。
1.首先 创建工程
2.工程创建好之后,就是配置一些东西了,这对SDK的通用性很重要
Build Setting -> Dead Code Stripping 改为NO
Build Setting -> Mach-O Type改为 Static Library
Build Setting -> Build Active Architecture Only 改为 NO
Build Setting -> Architectures 添加armv7s架构
Build Setting -> Other C flags 添加-fembed-bitcode (使SDK支持bitcode)
Build Phases -> Headers 将公开的头文件从Project中拖入Public
3.暴露出想要被引用的头文件
需要暴露的头文件都拖到public下面,不需要的都放在private或者project下面
4.好了,现在运行工程,就能得到framework了
点击show in finder 之后,得到两个版本,一个模拟器用到的,一个真机用到的.但是一般我们都会把这两个整合成一个framework,
5.合并真机和模拟器framework,可以用一段脚本代码来实现,还是上图说话:
首先点击+号,添加一个Run Script,在输入框里粘贴一段代码:如下(脚本代码是从这来的,感谢大神)
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
6.然后重现运行 framework,,分别在下面三种条件下运行一遍
(模拟器可以任选一中模拟器跑一遍)
7.然后 ,单击Products,选择 show in finder ,在products目录下,得到的就是合并后的framework,在真机模拟器上或者打包都可以用.
8,可以验证一下,打开终端:输入: lipo -info 然后把生成的framework下的二进制文件拖入终端,获得路径,回车,得到我们想要的信息:
得到的framework支持的架构如下:
说明合并framework成功!