由于在目前的公司从事iOS SDK开发和维护工作,所以打算用这篇文章回顾总结下相关方面的知识以及经验分享。
目前公司主要有很多年视频和直播类项目经验的积累。我的工作也就是维护这些视频和直播类的底层库,一起统一封装成静态库,然后提交给上层iOS端app开发人员直接进行调用。
我们公司主要的底层库包括播放库、RTMP库、下载库(p2p)、推流采集库、FFMpeg库以及protal查询库。
静态库与动态库的区别
静态库:以.a 和 .framework为文件后缀名。
动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名(系统直接提供给我们的framework都是动态库)
静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。
我们公司使用的是使用静态库的方式,提供给上层.a静态库和.h头文件。使用shell脚本进行快速统一打包,持续集成。
由于不同项目可能需要的底层库可能有所不同,所以SDK开了不同的分支以应对不同的项目。并在shell脚本中根本项目的不同来自动选择不同的依赖进行打包。每次打包都会打上SDK的版本号。
由于为了方便上层app端的开发,还在一般在开发过程中将模拟器的静态库和真机的静态库进行合并然后交给他们使用。并配以单独的release真机包以备发布时用。