ios静态库.a文件打包

来源:互联网 发布:苏伊士运河运量数据图 编辑:程序博客网 时间:2024/03/29 16:02

什么是库?

库是程序代码的集合,是共享程序代码的一种方式

根据源代码的公开情况,库可以分为2种类型

  1. 开源库

    • 公开源代码,能看到具体实现
    • 比如SDWebImage、AFNetworking
  2. 闭源库

    • 不开源代码,是经过编译后的二进制文件,看不到具体实现
    • 主要分为:静态库、动态库

静态库和动态库的存在形式

  1. 静态库:.a 和 .framework
  2. 动态库:.dylib和 .framework

静态库和动态库在使用上的区别

  1. 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
  2. 动态库:链接是不复制,程序运行时有系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
    注意:项目中如果使用了自制的动态库,不能被上传到AppStore

静态库的作用
1. 专门抽取核心代码
2. 将MRC项目打包成静态库放入ARC项目中

如何打包静态库

  1. 首先创建项目的时候选择的Cocoa Touch Static Library 而非Application

  2. 然后创建并编写代码

  3. 然后在工程里面的Build Phases中的Copy File添加.h文件

  4. 然后真机和模拟器分别编译编译,在Product文件夹下有一个.a文件,这样包就有了,不过缺少头文件

如何使用静态库

  1. 首先,将.a 文件 和 .h文件拖进工程,并且勾上Copy items if needed 、Create groups 和 Productname
  2. 然后就没有然后了!!!!!!!!简单的静态库就是这么简单

注意,静态库并不会将资源打包进去,如果静态库用到了资源,应该手动的导入,不过不建议直接导入资源,一般情况下会用bundle存储资源。

所以,静态库里面的资源放到子沙盒中

[[NSBundle mainBundle] pathsForResources:@"resource" OfType:nil inDirectory:@"child.bundle"];

用上述的方法获的路径

  1. 然后拖东西的时候,就多拖一个资源bundle

注意点:真机文件夹下的静态库只能用于真机上,模拟器文件夹下的静态库,只能用于模拟器

这样一来,模拟器和真机之间来回切换就显得很麻烦,不过可以可以借助一个终端的指令,将模拟器的.a和真机的.a合并成一个.a文件。

首先进入模拟器和真机文件夹分别执行下面指令

libdec $ lipo -info lib.a 

lipo - info指令可以查看当前静态库支持的平台

然后在模拟器和真机的父文件夹下执行下面指令

Product $ lipo -create libdev/lib.a libPro/lib.a -output lib.a

lipo -create xxx xxx -output xxx 这个执行可以将前两个静态库合并成一个静态库

0 0