第一次接触iOS开发和Xcode,被要求封装一个SDK,中间太多的坑,因此记录下来,防止以后忘记,也可以让第一次接触Xcode封装SDK的小伙伴少踩一些坑。
1.封装SDK的原则:
当拿到一堆头文件以及他们的实现,所谓封装就是给这些头文件和实现穿上一层衣服,比如我们需要封装的是algo文件夹的核心算法做一个封装,我们需要在另一个文件夹interfaces里面增加一些.h和.mm(,cpp)文件来调用algo里的类来实现相同的功能。需要注意的一点是,在interface中的的.h文件如果#include了其他的头文件,则该被include的头文件对应的cpp也需要加入到编译中,因此我选择将需要include的头文件加在interfaces文件夹的cpp文件中,因为大多数情况下我们需要include头文件不过是一些已经编译好的Framework,我们是无法拿到具体的实现源码的。
2.Xcode的设置
选中project,选择对应的target,选择buildphase,将程序中所有的cpp cc mm文件都加入到Compile Sources当中,另外,将想暴露出来的h hpp文件加入到Headers中的Public下,其他的不想暴露的头文件加入到project下。
3.需要依赖的第三方库
有时候我们需要依赖第三方的库,比如这里我依赖了一个叫之前已经制作好的Common的Framework,这时候我只需要将他的头文件commonauth.h包含到我的interfaces中的cpp文件中即可使用其接口。不需要将Framework引入到SDK工程中来,因为编译的时候不会链接这些文件,只有在具体的app中运行的时候才会链接这些依赖的
4.编译的时候需要注意的地方
使用Xcode的Command + B的命令编译出来的Framework为指定平台的,在设置里可以指定,由于我需要的是全平台的,所以需要自己写一个build文件再执行它。
ps:在xcode中,如果需要引入外部资源,大多数情况下直接拖入到工程中,并勾选copy it if needed,但对于一些比较奇怪的文件格式,如model文件,就需要在build phase中下图的选项中加入应用资源文件的路径。