最近,需要把我们的工程核心代码封装成SDK,给合作公司用,然后学了一下如何封装SDK,以及遇到的一些问题,特意整理一下常见问题。
具体如何建工程
这个就不赘述了,附了网上整理挺好的封装方法,https://blog.csdn.net/u010960265/article/details/78834106
说一下遇到的问题
1.引入Framework的头文件 需要用尖括号 <MyFramework/xxxx.h>
2.为什么我的Framework里的public头文件可以找到,但是public头文件里的引用的一些project的头文件找不到,例:myFirstHeader.h 是公共的,露出来的头文件可以找到,但是myFirstHeader.h 里引用的mySecondHeader.h 找不到
我需要回答的是,我不知道为啥(捂脸捂脸捂脸)但我尝试的修改了,我把mySecondHeader.h 也变成public时候,就没问题了,可是这样一来不就代表我所有的头文件都要露出来吗,不要不要不要~ 所以我又在外面包了一层,把隐藏的头文件包在.m文件里,这样就没问题了~~~
当然我不知道这样对不对,因为我查了好久,也没查到。。。 发友们有知道的一定要告诉我啊~~~
3.自定义的Framework里如何引用第三方的.a,Framework文件~
因为公司的需要,需要降噪,所以我们又自定义了降噪的.a文件,想把它放在自定义的Framework里,又不想别人看到我的这个降噪文件
起初我直接把降噪的Framework放到自定义的Framework里真机运行总是报错,模拟器没问题,后来,在公司技术大哥的提醒下,直接放.a文件,就木有问题了~~~ 放.a.a.a
4.category 分类是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会崩溃,解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC(这个不是自己打的啦,是借鉴别人的 因为我确实遇到这个问题了~~~)
对了 了解一下静态库 动态库
静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
系统的.framework是动态库,我们自己建立的.framework是静态库
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
好啦好啦 我知道后面的都被写烂了 阔是 这个是敲黑板重点啊 大家再多看看~~~~
嗯啊 如果有啥问题错误 一定要要要要 指正出来啊~~~
爆裂少女 你们就叫我小鸭子好了~~~
网友评论