实际开发中离不开静态库的使用,记录一下
成都创新互联公司是一家集网站建设,什邡企业网站建设,什邡品牌网站建设,网站定制,什邡网站建设报价,网络营销,网络优化,什邡网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
创建
配置如下
加到主工程
配置路径
导入头文件 使用
targets-Build Phases-Copy Files-"+"你需要公开的头文件
所有流程都跟上面的一样,只是我们运行打包时要选择真机运行,你可以选择自己插上去的真机,也可以选择Generic ios Devices。当然不要忘记了设置支持所有真机机型架构: Build Active Architecture Only 设为NO。
分别使用真机或者Generic iOS Device 和 随便一个模拟器运行静态库 得到模拟器静态库和真机静态库 然后在Finder 中打开
Show in Finder
通过命令行合并 (注意 库的名称要一致)
lipo -create 第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径
然后在工程中将这个.a 替换就支持真机和模拟器了
workspace里 Argos是主工程 LJNetwork是一个静态库工程 AGFramework.framework是打包好并导入到主工程的静态库
现在LJNetwork要引用AGFramework.framework库
只需要在LJNetwork的Build Setting — User Header Search Paths 中 拉入AGFramework.framework中的Headers文件夹的路径
静态库LJNetwork引用 静态库LJFoundation的文件
配置如下
静态库LJNetwork要引用pods中的AFNetworking 如下设置
个人博客地址:
Q1:什么是库(Library) ?
Q2:静态库和静态库的区别?
静态库
动态库
Q3:framework为什么既是静态库又是动态库?
Q4:.a 与 .framework有什么区别?
Q5:swift使用动态库?
Q6:swift使用静态库?
Q7:CocoaPods中静态库和动态库?
Q8:可以在runtime时加载动态库吗?
Q9:在使用静态库时,某些Pod不支持module怎么办?
最近公司由于业务需求,需要提供一个SDK以供第三方公司的集成开发,之前没有这方面的开发经验有点迷茫。然后就在网上查看了一些相关的资料,自己研究了一天,成功的封装出了自己iOS开发过程中的第一个SDK包。同时也是为了以后开发SDK留下一个比较完整的笔记。
SDK的英文全名是:software development kit,翻译成中文的意思就是“软件开发工具包”,我个人的理解就是一个工具包,完全可以理解成开发中我们的一个公共类。
二、怎么实现SDK的封装呢?
1.打开Xcode开发工具创建我们的工具类
注:本文中使用的开发工具为xcode9.3
创建完成后
创建完成后,我们新建两个继承于基类的文件,一个用于封装网络请求一个用于封装我们需要提供给他人使用的方法以及需要动态改变的参数。
2.网络请求添加到SDK中一起封装
因为我们封装的SDK有的数据涉及到网络请求,所以我们封装的时候,顺便把需要用到的网络请求也封装进去。
1).使用cocoapods导入第三方库AFNetWorking
具体使用 见印象笔记内容,包含了使用cocoapods遇到的问题以及解决方法:
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链接: