美文网首页iOS OC 学习手册
iOS 静态库&动态库

iOS 静态库&动态库

作者: zhimingcow | 来源:发表于2016-08-30 23:34 被阅读57次

一. iOS下的存在形式
静态库:.a和.framework
动态库:.dylib和.framework(系统提供给我们的framework都是动态库!)

二. 苹果的态度
iOS 8 之前,iOS 平台不支持使用动态 Framework,开发者可以使用的Framework 只有苹果自家的 UIKit.Framework,Foundation.Framework 等。
WWDC2014(iOS8)以后,苹果允许开发者自行开发动态库。突然间转变态度,唯一的理由大概是App Extension的出现,它可以为一个应用创建插件,Extension 和 App 是两个分开的可执行文件,同时需要共享代码,这种情况下动态库的支持就是必不可少的了。

三. app动态更新
开放了动态库的使用权限之后,开发者可以自定义创建framework实现软件的动态更新(即绕过apple store审核,从服务器发布更新版本),不过含有自定义的framework的app是无法在商店上架的,故只能用于企业内部应用。

四. 和库相关的几个命令
nm
display name list (symbol table),其实就是把对象文件中的相关符号标识都列出来
otool
otool,顾名思义就是object tool,比其nm来说,其功能更强大,可以查看对象文件的方方面面,比如展示对象文件的Mach Header,用到了哪些共享库(shared libraries),或者数据段内容等。
lipo
create or operate on universal files,此命令主要是帮你查看或者创建支持多平台的静态库的。比如将两台不同平台的静态进行合并。

五. Xcode8制作framework及使用
http://blog.csdn.net/dp948080952/article/details/52749120

注意:如果静态库中使用了caategory,调用的时候肯定会出现如下unrecognized selector sent to class错误提示,这时要设置other linker flag,生成静态库和调用静态库的工程都加上-all_load。

-------------------------2018年10月26日更新---------------------------
六. .a不支持Swift(苹果的限制)

七. 不能使用OC和Swift混编的方式实现静态库,因为想Swift调用OC需要<produceName-Bridging-Header.h>的桥接头文件,OC调用Swift需要produceName-swift.h桥接头文件,这两个文件都是隐藏的,无法暴露出来,因此也就不可能引用。

相关文章

网友评论

    本文标题:iOS 静态库&动态库

    本文链接:https://www.haomeiwen.com/subject/zlhqettx.html