<Xcode8.0/9.0>iOS创建可调试的Fra
开发背景
开发中我们会使用到第三方的SDK,有的时候也会将整个系统的公用功能抽象出来制作成FrameWork,以库的形式进行封装,只暴露出头文件。
库(FrameWork)是编译好的二进制文件,编译的时候只需要 Link 一下。
合理的使用库文件,能有效节约编译时间。
库分为静态库和动态库。
基础知识
静态库即静态链接库。
之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。
静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。
目标程序没有外部依赖,直接就可以运行。
当然其缺点也很明显,就是会使用目标程序的体积增大。
动态库即动态链接库。
与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。
等到程序运行时,动态库才会被真正加载进来。
动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用,因此,也被称作共享库。
动态库带来的问题主要是,动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。
如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行。
苹果不允许开发者使用自己的动态库,否则审核无法通过!
系统的 Framework不需要拷贝到目标程序中,但是我们自己做出来的 Framework,最后必须要拷贝到目标程序中,因此苹果又把这种Framework称为Embedded FrameWork。
demo下载地址:
https://gitee.com/122589615/LLCommonSDK
一、创建库(Framework)文件
- 创建Cocoa Touch Framework工程文件
//创建Framework工程文件
- Architectures下增加armv7s指令集
//为了兼容老版本手机,不需要的可略过该步骤
- 将Build Active Architecture Only 设置为NO
//若第2步未设置,该步骤可略过
- 添加目标文件,并将所需的.h文件拖入Public部分
//如下图:
Public.png - add target添加Aggregate
//如下图:
Run Script.png - 添加脚本:
FMK_NAME=${PROJECT_NAME}
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
- 若只是单纯地制作一个Framework,到此处已经结束了,依次选中LLAggregate、Generic iOS Device,command + B编译即可。编译结束后,如果未报错,就会自动打开Framework所在的文件夹。
- 将Framework导入其他工程。首先将Framework拖入指定工程目录下,然后按下图导入即可: Framework.png
二、创建调试工程
如果你看到了这里,那么恭喜你,又将学习一项新技能,此时先忘掉标题一中的第8步操作。
- 创建一个新工程,比如说Single View App,然后关闭工程。
- 创建Workspace文件,如下图: Workspace.png
-
打开Workspace文件,将标题一中创建的库工程和Single View App工程添加进来,如下图:
右键点击空白处
按照如下所示,依次将两个工程文件都添加进来
添加工程文件
添加完之后就会变成这个样子:
添加完成.png
如上图所示,上面那个工程是可运行的demo,下面的是framework库工程。
- 选中上面的demo工程,将生成的库文件导入到demo工程中,切记忘掉标题一中的第8步,不要把framework复制到demo工程中去,要在demo中如下图位置点击添加framework,然后找到framework在库工程中的路径,直接add进去。这样以来,如果我们修改了代码,重新生成了framework,那么demo中的frame也会自动关联成最新的,就可以直接在demo工程中去测试功能。可以把这两个工程文件放入同一个目录下,便于管理。 关联Framework.png