(一〇二)静态库(.a)的打包
库是代码的集合,根据代码公开程度,分为开源库和闭源库。
其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现。
静态库的拓展名是.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)的打包相关推荐
- iOS架构-静态库.framework手动打包及脚本化打包(5)
引用一张博客的图片来理解下基本知识(http://www.cnblogs.com/oc-bowen/p/7478461.html) 我们可以看出.a的封装和.framework的封装差不多,也有模拟器 ...
- iOS架构-静态库.a的打包及使用(2)
补充知识-框架分类: 模拟器架构: • i386 : 32位架构 4S ~ 5 • x86_64 : 64位架构 5S ~ 现在的机型 真机架构: • armv7: 在最老的支持iOS7的设备上使用 ...
- 【Linux】动态库与静态库,如何打包库,如何使用第三方库
文章目录 回顾基础 学会打包自己的库并使用 静态库 打包库 第三方库的使用 动态库 打包库 第三方库的使用 动态库加载以及周边问题 回顾基础 这篇文章主要对动静态库进行进一步的学习,关于动静态库的一些 ...
- iOS架构-静态库.framework之资源文件打包bundle(6)
iOS架构-静态库.framework手动打包及脚本化打包(5)中介绍了.framework的脚本化打包,虽然在iOS架构-静态库.a打包之资源文件打包成bundle(4)中已经演示过,其实是一样的. ...
- iOS架构-静态库.a打包之资源文件打包成bundle(4)
iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib.图片以及其他文件资源(json.string等).这里主要介绍 xib.图片.其他的 ...
- iOS架构-静态库.a的脚本化打包及使用(3)
接着iOS架构-静态库.a的打包及使用(一)继续研究静态库.a的打包 需求背景: 手动编译静态库工程是会生成模拟器和真机两个不同的.a包 终端合成 $:lipo -create 真机.a路径 模拟器. ...
- 【Linux】零基础学习动静态库打包
文章目录 一.软硬链接 二.动静态库 理解动静态库 静态库的打包使用 静态库打包Makefile编写 动态库的打包使用 动态库打包Makefile编写 对于小版本的理解 总结 一.软硬链接 站在先前的 ...
- iOS架构-静态库.framework脚本化打包补充(5)
静态库.framework脚本化打包打包已经在iOS架构-静态库.framework手动打包及脚本化打包(5)中讲过.这里补充是通过Xcode 配置Aggregate自动执行脚本打包Framework ...
- iOS架构-cocoapods打包静态库(依赖私有库、开源库、私有库又包含静态库)(14)
前言: iOS工程架构少不了cocoapods 对第三方库的管理,它有着很好的操作性和集中管理的特性.之前的写了不少Xcode 建静态库工程打包.a 和 .framework 的文章,但是我们要先建静 ...
- android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)
需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...
最新文章
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差
- NOIP2012 文化之旅
- ArcGIS三种方式打断相交线------Feature To Line工具
- C#三层架构第四课之DAL层
- PreparedStatement预编译的sql执行对象
- [ 转载 ] Java面试精选【Java基础第一部分】
- P3348-[ZJOI2016]大森林【LCT】
- mp4视频转gif图片
- Mybatis获取已经赋值,没有问号的Sql
- 【Elasticsearch】 elasticsearch中 rollover 的用法
- 两个文本框异动任何一个能即时更新计算结果
- 漫画:什么是一致性哈希?
- 一文回顾腾讯数字生态大会·微搭低代码专场
- 4针串口线接法图_串口通信RS232的基本接法,原来这么简单,今天终于弄明白了...
- c语言太极图编程语言,C语言画图之 画个太极图
- GBASE应用 | “天擎”出鞘 GBase 8a助力气象行业进入大数据时代
- 【三环集团logo】用Python 小海龟实现~
- 网络聊天室的分析与实现
- adb 查看手机闪存类型
- 【java生成批次号】