iOS developer编译原理iOS学习

编译器之打包动态/静态库

2016-11-14  本文已影响288人  _凉风_

一、简介

I. 库的类型分类

静态库

动态库

II. iOS 设备的 CPU 架构

iOS 库的打包,根据 CPU 架构的不同而不同
架构不同,不能编译通过

模拟器的 CPU 架构

真机的 CPU 架构

二、打包静态库

I. .a 文件 静态库打包

  1. 创建静态库的工程
    创建后执行 运行 或 编译 ,都可以生成静态库「保存在项目的 Products 中」
Paste_Image.png
  1. 通过在不同架构的设备下 编译/运行 生成支持不同架构的静态库
Paste_Image.png
  1. 在 编译/运行 时,所有项目 都可以设置是 Debug 还是 Release
Paste_Image.png
  1. 设置库的接口 头文件
Paste_Image.png
  1. 通过设置不仅在当前运行的 CPU 架构上,适配所有的机型号架构
    一般 debug = no,release = yes 为了 debug 的时候编译更快「只编译连接当前的 CPU 架构所用的包」
    可以控制 测试版本 和 发布版本 是否都不仅仅能在真机上使用
Paste_Image.png

II. .framework 文件 静态库打包

  1. 前三步和 在 .a 文件 打包方式一致
  2. 设置库的接口 头文件
Paste_Image.png
  1. 设置打包的是 静态库,因为动态库也可以以 framework 的形式存在
    设为Static Library「这个默认选项是动态的」
Paste_Image.png

III. 使用静态库

1. 防止项目中的文件和 静态库的同名文件在运行时会覆盖,只保留一张图片

2. 在使用 category 静态库的工程中,调用方法时,会出现找不到该方法的运行时错误:selector not recognized

原因:

解决办法:

Paste_Image.png

3. 避免暴露过多的 .h 文件

使用

搜索头文件

Paste_Image.png

4. 拖拽项目/将项目当做静态库处理

Paste_Image.png

5. 其他

三、打包动态库

1. 制作、编译过程与静态库相同

2. 在 Embedded Binaries 中添加动态库

Paste_Image.png

3. 合并动态库文件

合并动态库文件并非合并的是 .framework 文件,而是其中的二进制代码文件

4. 动态库的使用注意

I. 自定义的 .a 静态库,不可以包含动态库

II. 自定义的 .framework 静态库,可以包含动态库文件

绕过 Xcode 的 UI 界面来连接动态库,步骤如下

Paste_Image.png

缺陷

上一篇下一篇

猜你喜欢

热点阅读