iOS 静态库和动态库生成

文档中使用的Xcode版本:Xcode8 

考虑到安全和复用,如果一些代码已稳定,可以封装成库文件。

闭源库 主要分为:静态库、动态库两种

静态库: .a 和 .framework  后缀

动态库: .dylib 和 .framework

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

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

一、静态库

1.新建工程

iOS 静态库和动态库生成_第1张图片

2. 自动生成的类和 还没生成的库文件(红色) 

iOS 静态库和动态库生成_第2张图片

3. 完事之后 选择要公开的头文件

iOS 静态库和动态库生成_第3张图片

4. 适配所以机型

iOS 静态库和动态库生成_第4张图片
5. 模拟器和真机(或Generic iOS Device)下分别Run下,ShowInFinder库文件 会出现Debug模式(默认)下的模拟器和真机两个文件夹 ,包括使用时要用到头文件和库文件

6. 合并真机和模拟器库文件:(网上有用脚本执行的,但貌似是Xcode6,没试过) 

桌面新建一文件夹M,再在文件夹中建两个文件夹M1,M2,将真机和模拟器的.a文件,分别粘贴到对应文件夹下。

cd到M  执行 lipo -info M1/库名 M2/库名 -output 库名  新生成的库真机和模拟器都可以用了

二、动态库

1.新建

iOS 静态库和动态库生成_第5张图片
2. 初始会生成一个包名的.h主头文件 

iOS 静态库和动态库生成_第6张图片

3.选择公开的头文件,注意拖到 pulic下

iOS 静态库和动态库生成_第7张图片

4. 适配机型同 静态库一样

5. 合并 (要合并的是包名命名的白板文件 我的显示是可执行文件)


iOS 静态库和动态库生成_第8张图片

6. 合并的dylib 替换上一步 任意一个  ,最后要用的是.framework结尾的动态库


注:

1 . iOS设备的CPU架构

a. 模拟器:4s-5: i386      5s-7Plus: x86_64   

b. 真机:  armv7: iPhone 3GS ,4 ,4s ,iPad ,iPad2

armv7s:  iPhone5 ,5c ,

armv64: iPhone 5s , 6 ,6Plus ,6s ,6s Plus ,iPad Air ,Air2 , mini2 ,mini3

2. 查看库支持的机型(CPU架构)

cd 到所在目录 lipo -info 库名

3. 把用到的.h 都import动态库的主头文件中  如要用到StaticLibray这个类 #import

4. 使用中报Image not found 

如下把库添加进去

iOS 静态库和动态库生成_第9张图片

5. 使用动态库AppStore会拒,但发现包括苹果自身的framwork貌似也是动态库

iOS 静态库和动态库生成_第10张图片

应该是和这个选项有关,默认是Executable,可选值有动态和静态等,猜测动态库会转为静态库,没发AppStore试过。。。

iOS 静态库和动态库生成_第11张图片

你可能感兴趣的:(iOS 静态库和动态库生成)