iOS 静态库framekwork 和 .a打包 及代码演示

一: 科普一分钟

     我们通常在做app 时候会集成 百度地图,环信,极光等三方库,这些都是不开源的.    还有很多开源库比如:afn,SD,RAC 等等. 那些不开源的库是怎么做的呢?

通常分为 静态库:.a 和 framwork 

动态库:.dylib 和 framework 

区别:

 静态库 :链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

比如我们 手机有多个程序 每个程序都集成百度地图了 假如 它是一个静态库,则多个程序之间公用一个库则这个库是动态的,  如果每个程序各自用自己的库则是静态的.   但是可惜的是,除了苹果允许自己的动态库,其他的动态库一律是被禁止的.

二 :需求和目的

假如现在有一个需求,让我们 把一个MRC 的三方或者功能 转为 ARC 有哪些好办法呢.

//1 . 手动release  有的人累的半死 手动删除release 改一年也改不完 .

//2.利用xcode 的自带转换功能 Edit-perfector-covertobject to ARC  注意!:几乎成功率很低

//3.推荐方法 :打包为静态库.a 或者 framwork

总结一下 作用: 库是共享程序代码的方式 ,MRC-ARC的转换

三:制作

1. 选择framework 顺便说一下 xcode6之前只可以制作.a  打包framework 需要用三方支持

iOS 静态库framekwork 和 .a打包 及代码演示_第1张图片
3.1

2.建立.h 和.m 


iOS 静态库framekwork 和 .a打包 及代码演示_第2张图片
3.2

3.在自定义.h 生命方法 完成实现


iOS 静态库framekwork 和 .a打包 及代码演示_第3张图片
3.3


iOS 静态库framekwork 和 .a打包 及代码演示_第4张图片
3.4

4.去设置为静态库


iOS 静态库framekwork 和 .a打包 及代码演示_第5张图片
3-5

5.把自己的.h 加入公用类,相当于 公共的 不再是私有的


iOS 静态库framekwork 和 .a打包 及代码演示_第6张图片
3-6

6.声明一下自定义类


iOS 静态库framekwork 和 .a打包 及代码演示_第7张图片
3-7

7 接下来进行分别选择真机和模拟器 的 debug 和 release 编译 command +b 编译 


iOS 静态库framekwork 和 .a打包 及代码演示_第8张图片
3-8


iOS 静态库framekwork 和 .a打包 及代码演示_第9张图片
3-9

8.由于sdk 真机编译的适配真机 ,模拟器的适配模拟器,随意在debug 的sdk 我们进行合并,对于release 包不建议合并,因为合并后 是两个真机还要模拟器的和 太大.

合并framework

制作framework的过程中经常会遇到编译出来的framework只能被真机使用或者只能被模拟器使用的情况。造成这个问题的原因是由于在编译时选择的目标设备不同的情况下编译出来framework体系结构不同,选择真机进行编辑时会编译产生armv7、armv7s、arm64下的库文件,而选择模拟器会产生i386、x86_64下的库文件。但导入过程中时希望支持所有架构,所以需要将 framework 合并

查看 framework 所支持架构

lipo -info frame_name.framework/framework_name

framework 合并命令:

-create后为要合并在一起的两个framework,-output后面为合并后的framework名称及路径

lipo –create /Debug-iphoneos/Someframework.framwork/Someframework Debug-iphonesimulator/Someframework.framwork/Someframework –output TZframework

合并命令只是合并 framework 下的可执行文件,因此需要用合并后的 exec 文件替换真机或模拟器 framework 中的 exec 文件。

4:集成

SDK 到这里就制作完成了 我们要测试一下好不好使 所以新建工程 导入我们自己的SDK 进行测试


iOS 静态库framekwork 和 .a打包 及代码演示_第10张图片
3-10


运行一下 相信,会有你满意的结果 .顺便说一下 做bunlde 包也很简单 就是一个文件夹改成bundle 后缀就可以啦.

你可能感兴趣的:(iOS 静态库framekwork 和 .a打包 及代码演示)