iOS 封装静态库(SDK)的详细过程

iOS 封装静态库(SDK)的详细过程,第1张

    最近公司由于业务需求,需要提供一个SDK以供第三方公司的集成开发,之前没有这方面的开发经验有点迷茫。然后就在网上查看了一些相关的资料,自己研究了一天,成功的封装出了自己iOS开发过程中的第一个SDK包。同时也是为了以后开发SDK留下一个比较完整的笔记。

SDK的英文全名是:software development kit,翻译成中文的意思就是“软件开发工具包”,我个人的理解就是一个工具包,完全可以理解成开发中我们的一个公共类。

二、怎么实现SDK的封装呢?

1.打开Xcode开发工具创建我们的工具类

注:本文中使用的开发工具为xcode9.3

创建完成后

创建完成后,我们新建两个继承于基类的文件,一个用于封装网络请求一个用于封装我们需要提供给他人使用的方法以及需要动态改变的参数。

2.网络请求添加到SDK中一起封装

因为我们封装的SDK有的数据涉及到网络请求,所以我们封装的时候,顺便把需要用到的网络请求也封装进去。

1).使用cocoapods导入第三方库AFNetWorking

具体使用 见印象笔记内容,包含了使用cocoapods遇到的问题以及解决方法:https://app.yinxiang.com/shard/s58/nl/10186702/6820a297-24d1-480f-af32-8a054e4d64a6/   

2).在封装的SDK中如果涉及到使用第三方的库引用的时候,一定要在.m文件中进行引用

3.做完想要封装的文件后,开始进行封装

先进行编辑设置,在product -->Scheme--->Edit Scheme

此处必须是release,不能用debug模式,选择SDK是在iOS 、tvOS还是watchOS 4上面运行的SDK,在这儿我们选择iOS

在build Setting里面 搜索linking 设置Mach-O Type 为 static library

在build Phases --- >headers 中添加需要暴露的类,将Project里面想暴露的文件.h拖动到Public里面进行文件暴露

完成所有设置后,我们进行真机编辑和模拟器编辑最后合并成一个可以在真机和模拟器上运行的第三方SDK,

4.到这一步我们的SDK封装就差最后一步了,合并成能在真机和模拟器上运行的SDK

选中编辑好的包,我这儿是Demo_SDK.framework然后右击显示文件内容

找到这两个文件后,我们开始合并,得到我们想要的SDK

1).打开终端--->输入lipo -create 加上文件路径

1.为真机的文件,2为模拟器的文件,3为合并后输出问的地址

注意:我们所合并的文件是Demo_SDK,并不是所有的文件

合并到处文件为lipo结尾的

更改合并和的文件名称和合并前文件名称相同,并且去掉后缀。用合并和的文件替换掉和并前的文件

合并完成后拷贝处我们封装的SDK,在其他项目中引用就可以了

总结:截图比较多,为了照顾像我这样的小白,希望大家理解。第一次写,不喜勿喷,这只是作为自己的个人笔记,如果有什么不对的地方,希望大家指出一起交流学习,Thanks♪(・ω・)ノ

Demo链接:http://code.cocoachina.com/user/

一:格式

二.制作静态库

首先

然后

在这里选择一个.a或者是framework.

默认选择的是Dynamic Library,要手动选择Static Library

再然后是添加一些可能需要添加的依赖库

然后暴露出头文件

最后编译生成静态库

设置 Build Active Architecture Only

方法一:

lipo -create 模拟器下的MyIMSDK的路径 真机下的MyIMSDK的路径 -output 合并的新的MyIMSDK的路径

方法二:

使用脚本生成

注意

(1).资源文件通过bundle文件引入:

(2).在制作framework的时候,如果使用了category,则使用该framework的项目运行时会crash,此时需要在该工程中 other linker flags添加一个参数 -ObjC

看了一个视频是一个什么cat老师.他说引入.xcconfig配置文件去引入静态库

这个. xcconfig以前确实没见过.是比较失败天天就知道吹水...

在这里创建:

在这里引入:

以前我们引入静态库是直接拖进去的.现在了解这个xcconfig 确实可以做一些修改.

二.动态库

静态库可以直接编译生成动态库.也是从这个视频看到的(以前的知识是多么狭隘)

静态库是.o文件的合集,动态库是.o文件链接完成的结果.(这个就是他们的本质区别)

(1).动态库的创建和静态库差不多,没有右边的.a创建.

(2).动态库可以暴露出来头文件,也可以不暴露出来.

(3).动态库的使用

可以通过注入(我们的加速动态库就是这么来的)

也可以拖入

三.动态库为什么能注入

mach-O中LoadCommands指令中,存放这需要加载的库,到时候由dyld读取,并且在运行时加载。注意到LoadCommands整个段尾部还留有一些空白。因此在这么多库的后面添加自定义的库即可

通过向宏DYLD_INSERT_LIBRARIES里写入动态库完整路径。就可以在执行文件加载时将该动态库插入。(动态库已经是一个可执行文件)

yololib注入

monkeyDev注入

(仅做总结:驳船用)

Link With Standard Libraries ->NO 

Mach-O Type ->Static Library

Dead Code Stripping ->NO

Enable Bitcode ->YES

STRIP_STYLE ->Debugging Symbols

Other C Flags 添加 -fembed-bitcode

DEPLOYMENT_POSTPROCESSING = NO (默认NO多余)

1、 framework可以生成真机和虚拟机2个不同的framewrok,不能互通使用,所以必须要将2个framework合并才可以。

2、在终端中输入一下命令

需要注意的是这个打包path指的是xxx.framework/xxx文件,而不是xxx.framework。导出的path是路径 + / + 文件名,比如我要放到桌面上,则路径应该是 /users/hzh/desktop/xxx

生成的xxx文件替换到真机path路径下xxx.framework,覆盖原来的xxx文件。

3、(敲黑板,划重点)如果你是swift,那么你还需要第四步才算完成,oc完成前面3步即可。将模拟器路径下xxx.framework/Modules/xxx.swiftmodule文件夹下的所有文件复制到真机path路径下xxx.framework/Modules/xxx.swiftmodule文件夹内。至此framework真机模拟机完成。

新建一个 Aggregate,并添加脚本

把下面的脚本复制到 Run Script 里面

选中我们刚才创建的 Aggregate 这个 target,然后 Build,就可以坐等结果了。注意这里必须连手机。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11330112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存