iOS 第三方库的常识简单总结

1.在一些比较大的项目中,经常会在一个主工程中导入其他.xcodeproj工程文件(动态库)或者导入一个.a文件(静态库)。然后在主工程中加入这些导入工程的头文件(没有头文件就不知道接口),然后在主工程中就可以根据头文件接口调用静态库或者动态库的功能。

2.导入静态库和动态库时需要设置项目属性,静态库比较容易,设置一下主工程的依赖库文件就行了。有些动态库可能还要设置一些头文件索引位置等等属性,具体看编译错误信息去修改。有些时候这种错误信息的修正是极其痛苦的,在此推荐另一种取巧方法:将动态库中的头文件和实现文件导入主工程的某个目录,但是删掉(不引入)动态库的xcodeproj文件。换句话说就是直接重用代码而不重用工程。

3.动态库和静态库其实某种程度上是统一的,动态库在编译时其实也是先被生成了.a文件再被主工程调用的。其实完全可以先打开动态库的工程,编译一次后将生成的.a文件再放入主工程去使用。这里需要注意的是静态库分真机版本和模拟器版本。模拟器编译出的就是模拟器版本的.a库文件。如果用模拟器将动态库工程先编译成.a静态库文件放入工程,然后用模拟器编译主工程成功后,再换真机编译工程是一定会失败的。可以用模拟器和真机分别编译出一个.a文件,然后将两个.a文件合并做成一个模拟器和真机通用的库文件:

  在终端输入lipo -create 指令,然后将两个库文件依次拖进终端,再输入-output “目标文件路径”。运行后就可以在指定位置得到通用库文件

4.和静态库相比,动态库方便根据项目需求进行细节修改比如增加接口等等。静态库具有较高保密性,除了头文件,主工程开发者不知道任何静态库实现部分,对于知名大公司开发一些比如微博分享接口等需要保密的公用sdk库是比较常用的。另外还有一种应用场景是某些公司为了实现代码权限管理而用静态库:将公司网络库、加密库等具有行业竞争力的核心代码编译成静态库,让实习生根据核心代码去做一些界面开发(对于某些公司的实习生这种做法是比较痛苦而且严重拖慢效率的,呃.....这其实就是skipop的苦难经历,因为公司核心代码通常是频繁变更的,实习生要在公司特定网站平台申请进行库文件生成,下载拿到新的静态库才能继续开发)。

5.对于主工程下的多个动态库,如果想在A动态库中使用B动态库功能,一般只需要把B动态库相关头文件拷贝一份引用到A动态库内(注意不能粘贴,添加引用即可)。然后A动态库就能根据接口去调用B动态库功能。

6.导入了第三方库的头文件,例如#import "XXX",但是却不能使用这个类,可以试着把“”改成<>(导入二维码扫描的zxing库的mutilformatreader时出现此问题)

7.有些第三方库是使用不少C++代码实现的,这个时候需要把import了库头文件的.m文件改名成.mm文件。

原文地址:https://www.cnblogs.com/mzdbskipop/p/3745357.html