IOSbugiOS高级应用程序员

Xcode动态链接库与静态链接库讲解及制作方式

2016-10-11  本文已影响1903人  纸简书生

静态库&&动态库

库分为静态库动态库两类。在动态库里,又分为动态链接库动态加载库

动态库

linux中静态库和动态库区别:

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。

iOS开发中静态库和动态库区别

优劣对比

静态库优点:

动态库优点:

Xcode中.framework和.a

语言支持情况

库类型/语言类型 OC Swift
静态库 iOS7+ 不支持
动态库 iOS8+ iOS8+

使用Swift开发动态库的方式提供SDK,所以只能支持到iOS8+。但这意味着所有使用我的SDK的客户的APP都必须到iOS8+,这点需要斟酌一下。

所以假如需要支持iOS7的话,只有使用OC语言开发.a静态库的一条路。

集成第三方库

原本SDK已经作为别人APP工程里的第三方了,假如SDK中需要引用AFNetworking类似的三方库。

库类型/引用 内部引用 外部引用
静态库 静态库无法再包含其他的.a静态库。只能把源码放进去一起编译。 静态库无法把第三方放在外部,否则就不叫“静态”了。只能打包进SDK内部,并修改类名,防止外部冲突。
动态库 如果用Swift可以直接引入源码,由于Swift含有命名空间,所以不会有冲突。 第三方库不打进去,放在外部,比如cocoapods的方式。别人编译的时候需要在他的环境里有该第三方依赖库。当提供给别人SDK的时候,你还需要给别人一个podfile。

创建静态库

在不同编译环境下编译会生成四种静态库,debug模拟器,debug真机,release模拟器,release真机,我们需要将运行环境调至不同的状态并生成如上四种形式的静态库。

查看静态库所支持的CPU环境

每一个手机都有属于自己的架构,不同CPU采用的是不同的CPU架构。 任何一个静态库都有它支持的CPU架构,如果是跑在不支持的CPU架构上面,那么就会报错。比如基于iPhone 6sPlus的架构来创建的静态库,如果运行在4s上 就会报错。

修改Build Settings -- >Build Active Architecture OnlyNO就解决了这个问题。

在终端中使用 lipo -info 静态库文件 查看文件支持的运行环境

合并静态库

lipo -create 静态库1 静态库2 -output 新静态库名称.a

最后


使用静态库

静态库使用中的一些注意点

动态库

动态库的查看与合并

这里有个注意点就是,我们所要查看和合并的并不是xxx.framework,而是xxx.framework目录下的xxx,以下图为例,我们想要查看或合并的文件就是libframework,对这个文件进行操作就可以了。

参考

制作篇

iOS XCode7制作.Framework动态库和.a静态库的总结

iOS:Xcode7下创建 .a静态库 和 .framework静态库

使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)

Xcode创建静态库和动态库

iOS - 静态库与动态库的制作

原理篇

Xcode 6 and iOS Static Frameworks

苹果官方介绍

Library vs Framework in iOS

iOS 开发中的『库』(一)

iOS 开发中的『库』(二)

上一篇下一篇

猜你喜欢

热点阅读