库是代码的集合,根据代码公开程度,分为开源库和闭源库。

其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现。

静态库的拓展名是.a或者.framework,动态库则是.dylib和.framework。

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

动态库在链接时不复制,程序运行时系统会动态的加载,多个程序共享一个动态库,节省内存。

注意:项目中如果包含自制的动态库,上传到App Store会被拒绝,如果要上传App,应选择静态库。

静态库用于抽取核心代码来供给其他项目使用。

静态库的应用:MRC库(例如cocos2d-iphone)用于ARC项目,可以将MRC库打包成静态库。

下面以一个简单的例子来讲解创建静态库的过程。

这个例子实现一个类方法,用于获取一张图片。

①新建一个静态库项目:

②新建一个类,类中通过类方法实现读取一张图片。

需要注意的是,为了防止别人使用静态库时资源与库本身资源冲突,常把库的资源放到一个Bundle中,方法为新建文件夹,改名为拓展名为.bundle,右键显示包内容,放入资源即可,如下图创建了SGTool.bundle,放了一张用于获取的图片。

类的声明和实现如下,注意获取bundle中图片的方法:

//
//  SGTool.h
//  staticDemo
//
//  Created by 11 on 8/2/15.
//  Copyright (c) 2015 soulghost. All rights reserved.
//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>@interface SGTool : NSObject+ (UIImage*)getImage;@end
//
//  SGTool.m
//  staticDemo
//
//  Created by 11 on 8/2/15.
//  Copyright (c) 2015 soulghost. All rights reserved.
//#import "SGTool.h"@implementation SGTool+ (UIImage *)getImage{NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"button.png" ofType:nil inDirectory:@"SGTool.bundle"];return [UIImage imageWithContentsOfFile:imagePath];}@end

③点击工程配置的Build Phases,在Copy Files中加入打包时暴露的头文件,这些文件用于使用者调用方法和查看静态库内容,但.m不会暴露。

④在真机和模拟器下各编译一次工程,然后在Products文件夹下对.a文件点击右键选择Show in Finder,可以看到有用于真机和模拟器的静态库。

只需要导入其中的.a和include,然后把bundle也拖入工程,即可使用该静态库,一般把这三个文件打包命名为lib,如下图:

⑤因为真机和模拟器架构不同,真机一般是arm7、arm64,而模拟器是x86,因此静态库不同,为了能够制作二者都能使用的静态库,使用lipo命令合并静态库。

发布时请使用真机静态库。

lipo -create <file1.a> <file2.a> -output <mixfile.a>

lipo -create Debug-iphoneos/libstaticDemo.a Debug-iphonesimulator/libstaticDemo.a -output SGTool.a

此外,使用lipo -info <file.a>可以查看静态库支持的架构。

⑥区分Debug和Release的静态库:

默认是Debug,会有完整的符号信息方便调试,不会进行代码优化。

可更改为Release,会进行代码优化,不包含完整的符号信息,执行速度略有提高。

更改方法如下图所示:

转载于:https://www.cnblogs.com/aiwz/p/6154088.html

(一〇二)静态库(.a)的打包相关推荐

  1. iOS架构-静态库.framework手动打包及脚本化打包(5)

    引用一张博客的图片来理解下基本知识(http://www.cnblogs.com/oc-bowen/p/7478461.html) 我们可以看出.a的封装和.framework的封装差不多,也有模拟器 ...

  2. iOS架构-静态库.a的打包及使用(2)

    补充知识-框架分类: 模拟器架构: • i386 : 32位架构 4S ~ 5 • x86_64 : 64位架构 5S ~ 现在的机型 真机架构: • armv7: 在最老的支持iOS7的设备上使用 ...

  3. 【Linux】动态库与静态库,如何打包库,如何使用第三方库

    文章目录 回顾基础 学会打包自己的库并使用 静态库 打包库 第三方库的使用 动态库 打包库 第三方库的使用 动态库加载以及周边问题 回顾基础 这篇文章主要对动静态库进行进一步的学习,关于动静态库的一些 ...

  4. iOS架构-静态库.framework之资源文件打包bundle(6)

    iOS架构-静态库.framework手动打包及脚本化打包(5)中介绍了.framework的脚本化打包,虽然在iOS架构-静态库.a打包之资源文件打包成bundle(4)中已经演示过,其实是一样的. ...

  5. iOS架构-静态库.a打包之资源文件打包成bundle(4)

    iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib.图片以及其他文件资源(json.string等).这里主要介绍 xib.图片.其他的 ...

  6. iOS架构-静态库.a的脚本化打包及使用(3)

    接着iOS架构-静态库.a的打包及使用(一)继续研究静态库.a的打包 需求背景: 手动编译静态库工程是会生成模拟器和真机两个不同的.a包 终端合成 $:lipo -create 真机.a路径 模拟器. ...

  7. 【Linux】零基础学习动静态库打包

    文章目录 一.软硬链接 二.动静态库 理解动静态库 静态库的打包使用 静态库打包Makefile编写 动态库的打包使用 动态库打包Makefile编写 对于小版本的理解 总结 一.软硬链接 站在先前的 ...

  8. iOS架构-静态库.framework脚本化打包补充(5)

    静态库.framework脚本化打包打包已经在iOS架构-静态库.framework手动打包及脚本化打包(5)中讲过.这里补充是通过Xcode 配置Aggregate自动执行脚本打包Framework ...

  9. iOS架构-cocoapods打包静态库(依赖私有库、开源库、私有库又包含静态库)(14)

    前言: iOS工程架构少不了cocoapods 对第三方库的管理,它有着很好的操作性和集中管理的特性.之前的写了不少Xcode 建静态库工程打包.a 和 .framework 的文章,但是我们要先建静 ...

  10. android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)

    需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差
  2. NOIP2012 文化之旅
  3. ArcGIS三种方式打断相交线------Feature To Line工具
  4. C#三层架构第四课之DAL层
  5. PreparedStatement预编译的sql执行对象
  6. [ 转载 ] Java面试精选【Java基础第一部分】
  7. P3348-[ZJOI2016]大森林【LCT】
  8. mp4视频转gif图片
  9. Mybatis获取已经赋值,没有问号的Sql
  10. 【Elasticsearch】 elasticsearch中 rollover 的用法
  11. 两个文本框异动任何一个能即时更新计算结果
  12. 漫画:什么是一致性哈希?
  13. 一文回顾腾讯数字生态大会·微搭低代码专场
  14. 4针串口线接法图_串口通信RS232的基本接法,原来这么简单,今天终于弄明白了...
  15. c语言太极图编程语言,C语言画图之 画个太极图
  16. GBASE应用 | “天擎”出鞘 GBase 8a助力气象行业进入大数据时代
  17. 【三环集团logo】用Python 小海龟实现~
  18. 网络聊天室的分析与实现
  19. adb 查看手机闪存类型
  20. 【java生成批次号】

热门文章

  1. 黑马程序员—18-oc协议与block
  2. 禁止拖放对象文本被选择的方法
  3. 解决RPM包依赖的几种方法
  4. 利用shell脚本来监控linux系统的负载与CPU占用情况
  5. vc2005 seh新认识
  6. 暑期集训 Day2 简单博弈论
  7. 简易效率的抽奖算法(转)
  8. 用Scheme写Scheme编译器(三):一元运算
  9. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  10. leetcode 杨辉三角 III