博客> iOS创建可调试的Framework
iOS创建可调试的Framework
2019-02-17 07:30 评论:0 阅读:109 qianxi
iOS开发 iOS逆向。APP开发

开发中我们会使用到第三方的SDK,有的时候也会将整个系统的公用功能抽象出来制作成FrameWork,以库的形式进行封装,只暴露出头文件。

库(FrameWork)是编译好的二进制文件,编译的时候只需要 Link 一下。

合理的使用库文件,能有效节约编译时间。

库分为静态库和动态库。

基础知识

静态库即静态链接库。

之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。

在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程

静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。

目标程序没有外部依赖,直接就可以运行。

当然其缺点也很明显,就是会使用目标程序的体积增大。

动态库即动态链接库。

与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。

等到程序运行时,动态库才会被真正加载进来。

动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用,因此,也被称作共享库。

动态库带来的问题主要是,动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。

如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行。

苹果不允许开发者使用自己的动态库,否则审核无法通过!

系统的 Framework不需要拷贝到目标程序中,但是我们自己做出来的 Framework,最后必须要拷贝到目标程序中,因此苹果又把这种Framework称为Embedded FrameWork。

在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程

一、创建库(Framework)文件

创建Cocoa Touch Framework工程文件

//创建Framework工程文件

Architectures下增加armv7s指令集

//为了兼容老版本手机,不需要的可略过该步骤

将Build Active Architecture Only 设置为NO

//若第2步未设置,该步骤可略过

添加目标文件,并将所需的.h文件拖入Public部分

//如下图:! [ Enter your image description here: ](URL)

Public.png

add target添加Aggregate

//如下图:  Enter your image description here:

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拖入指定工程目录下,然后按下图导入即可: Enter your image description here:

Framework.png

二、创建调试工程

如果你看到了这里,那么恭喜你,又将学习一项新技能,此时先忘掉标题一中的第8步操作。

创建一个新工程,比如说Single View App,然后关闭工程。

创建Workspace文件,如下图: Enter your image description here:

Workspace.png

打开Workspace文件,将标题一中创建的库工程和Single View App工程添加进来,如下图: Enter your image description here:

右键点击空白处

按照如下所示,依次将两个工程文件都添加进来 188d83513117a808256dcb106164b452_450.jpg

添加工程文件

添加完之后就会变成这个样子: 76fefc524f1772f77a4ba0d4a75177c8_700.jpg

添加完成.png

如上图所示,上面那个工程是可运行的demo,下面的是framework库工程。

选中上面的demo工程,将生成的库文件导入到demo工程中,切记忘掉标题一中的第8步,不要把framework复制到demo工程中去,要在demo中如下图位置点击添加framework,然后找到framework在库工程中的路径,直接add进去。这样以来,如果我们修改了代码,重新生成了framework,那么demo中的frame也会自动关联成最新的,就可以直接在demo工程中去测试功能。可以把这两个工程文件放入同一个目录下,便于管理。

收藏
0
sina weixin mail 回到顶部