iOS通过封装Framework解决静态库冲突

6
回复
1789
查看
[复制链接]

5

主题

6

帖子

28

安币

初级码农

Rank: 1

发表于 2018-3-14 14:02:00 | 显示全部楼层 |阅读模式


因工作原因,去年开始写了插件版SDK,提供带UI的静态库给客户使用,降低集成难度,使用过程中发现静态库冲突非常普遍,于是研究了一下framework的封装和使用,得到了一些经验,下面跟大家分享一下。
静态库和Framework的不同之处:
(1) 静态库的输出是一个.a文件,为二进制执行文件。分发给用户时,头文件、静态资源文件需要另外提供。
(2)Framework看起来是一个文件,其实是一个文件夹,其中包含代码签名、头文件、二进制执行文件、静态资源文件等。
(3)头文件搜索路径的区别:静态库需要设置头文件搜索路径,而Framework不需要。
(4)静态库能够只引用外部库的头文件,调用外部库的公开方法,而不引入其库实现,实现与引用库的分离部署;Framework:要引用一个外部库,就必须要将此外部库的实现放入Framework内编译才可以。
(5)库冲突问题,静态库因为共享运行环境,如果运行环境中包换库中同一个类,会发生代码冲突,必须剥离其中一方的此类,然后共享此类,如果无法共享则必须改变其中一个类的类名,这就是我们经常遇到的静态库冲突;而采用Framework的话,各个Framework与其运行环境隔离,如其运行环境中包含库中同一个类,不会发生冲突,同名的两个类会在各自的环境中独立运行,互不干扰,哪怕是单例类。
(6) 态库是static library,而framework默认为dynamic library, 不过可以将Framework工程中build settings中的mach-o type改为static library。前提是在实现的Framework中未引用其他的原生dynamic library。如:libsqlite3.0.tbd等,否则编译无法通过。
如何制作Framework:
首先shift+command+N新建project,选择Cocoa Touch Framework
next后,新页面里起个名字,比如testFramework,然后next保存project完成。
然后设置工程,去掉bitcode,把之前静态库使用的代码、静态库、资源图片、xib等都拖进工程中。
最重要的一步,将要公开的.h拖到public中,然后编译,生成。
被静态库困扰的小朋友们都试试吧,相当方便,完全无痛,半小

时解决静态库冲突问题。


容联IM产品研究中心

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

1万

帖子

2404

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-14 14:03:21 | 显示全部楼层
感谢分享,楼主V5~

9

主题

9434

帖子

1813

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2018-3-14 14:05:51 | 显示全部楼层
不错不错,楼主辛苦了。。。

2

主题

9654

帖子

2092

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2018-3-14 14:11:31 | 显示全部楼层
感觉楼主很用心,辛苦啦~

451

主题

1149

帖子

1957

安币

手工艺人

发表于 2018-3-14 14:17:12 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

7

主题

9588

帖子

1969

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-14 14:18:12 | 显示全部楼层
不错不错,楼主辛苦了。。。

92

主题

9590

帖子

1971

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-14 14:36:14 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )