我们在iOS开发中经常会导入一些Framework,那么今天我们就自己动手打包一个Framework
首先我们来新建一个工程文件,选择Cocoa Touch Framework,点击Next,给文件命名(因为是测试,随便起了一个),然后Next,这样我们就创建好了一个工程文件



我们看到工程里面有两个文件(FrameworkText.h和Info.plist),暂且不管这两个文件,下面我们来添加要公开的类及方法。 为了测试,我简单的添加了一个Person类和Animal类

下面我们就开始生成Framework,首先我们来进行一下相关的设置,如果你的项目中用到了系统或者第三方的框架,一定要在Link Binary With Libraries中导入相关Framework,第二个是Headers,一定要把想要公开的类的头文件放到Public下面(如下图)

接下来比较重要的一步,合并两个打包好的Framework,为什么说是两个呢,因为我们在合并之前用模拟器运行和用真机运行是会得到两个不同的Framework,重要的是这两个Framework不能通用,所以要合并成一个通用的。



展开Run Script 之后将下面的代码复制进去,然后点击运行即可得到我们想要的Framework
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

下面我们测试一下Framework,创建一个新的工程把刚刚打包好的Framework拖到工程中,导入头文件即可使用,我在测试的时候碰到一个问题和大家分享一下

这个问题的解决方法如下图



如果您遇到了别的问题,欢迎提出大家一起交流
网友评论