HTML5 专栏iOS 专栏程序员

iOS 静态库打包(Xcode9.1)

2018-02-26  本文已影响407人  石虎132

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

          QQ群:807236138  群称:iOS 技术交流学习群

目录

 /**

   一、概念

      什么是库

      库的分类

      静态库和动态库的存在形式和使用区别

  二、打包静态库

  三. 配置工程环境

  四、终端查看静态库所支持的架构

  */

一、概念

1、 什么是库?

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

2、库的分类

  根据程序代码的开源情况,库可以分为两类

* 开源库

源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。

* 闭源库

  不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。本篇重点要讲的便是其中的静态库。

3、静态库和动态库的存在形式和使用区别

  存在形式:

 * 静态库

* 以".a"或者“.framework”为文件后缀名

  * 动态库

* 以".dylib"或者“.framework”为文件后缀名

 静态库

 * 平时我们用的第三方SDK基本上都是静态库。

 * 静态库在项目编译时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

 * 静态库很大的一个优点是减少耦合性,因为静态库中是不可以包含其他静态库的,使用的时候要另外导入它的依赖库,最大限度的保证了每一个静态库都是独立的,不会重复引用。

 * 静态库有.a 和 .framework两种形式。

 动态库

 * iOS平时使用的系统库基本是动态库,比如使用频率最高的UIKit.framework和Fundation.framework。

 * 动态库在程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

 * 动态库在制作的时候可以直接包含静态库,也能自动link所需要的依赖库。

 * 动态库有.dylib/.tbd 、.framework两种形式。

 * 苹果禁止iOS开发中使用动态库

 使用区别:

 1.静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。

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

二、打包静态库

1.新建静态库工程

   Create a New Xcode project -> Framework&Library -> Cocoa Touch Static Library

图1:

图2:

2、创建工程完毕后,再创建一个工具类StaticLibTool,添加一个方法用于测试

图3:

3、运行完毕后,我们会看到工程中Products文件夹下的libStaticLib.a文件由红色变成了黑色。这就是我们打包好的.a静态文件了。

图4:

三. 配置工程环境

3.1配置最低支持版本

图5:

3.2设置适配所有模拟器架构重要

project -> buildSeting -> Build Active Architecture Only 设为NO

图6:

3.2添加公开文件

3.2.1 点击“+” 新增”Header Phase” 并且 拖拽.h到 public中

图7:

最终结果如下:

图8:

4. 生成.a文件,把libSHStaticLibTool. a 静态包和 SHStaticLibTool.h文件拷贝到新的项目中

图9:

实现最终效果:

图10:

四、终端查看静态库所支持的架构

  终端->cd进入库文件路径->lipo -info 库名

  cd /Users/joyshow/Desktop/SHStaticLib/SHStaticLib

  lipo -info libSHStaticLibTool.a

图11:

谢谢!!!

上一篇 下一篇

猜你喜欢

热点阅读