静态库打包

为什么把代码打包成库?

  • 不想让别人看到.m文件

  • 直接Link编译好的二进制代码,节省编译时间

  • 方便代码的管理

  • Link代码的不同形式本质区分静态库和动态库

静态库和动态库的区别?

  • 系统库 = 动态库 = 编译APP时才载入 = 动态引用不拷贝到目标程序 = 节省应用大小 = 也称共享库。

  • .dylib和.tbd结尾 ∈ 系统动态库

  • 系统动态库即导即用 = 不需要Link依赖

  • 自定义动态库导入 = 必须在Embedded Binaries中导入 = 编译底层逻辑与静态库相同 = 会拷贝到目标程序中 = 其实就是个假的动态库,哈哈 = 而且自定义动态库苹果不让上架,自己悄悄玩

  • 编译APP时拷贝的二进制代码到目标程序 = 静态库嵌入

  • 手动添加依赖库 = 静态库Link。例如CoreVideo.framework

  • 静态库低耦合性 = 个个独立自动避免重复Link

Framework认识?

  • Framework = Headers + binary + bundle +(Info.plist + Modules)

  • Headers = .h文件集合

  • binary = .m文件编译成的二进制集合(不包含依赖库) = 正好解释为什么三方SDK非要我们自己去添加依赖,而不是一起打包到SDK里

  • bundle = 资源文件集合 = 资源提取用[NSBundle mainBundle]

Framework创造?

静态库打包_第1张图片
新建工程
静态库打包_第2张图片
只需导入,不需要添加进Target
静态库打包_第3张图片
支持版本
静态库打包_第4张图片
导入完成
静态库打包_第5张图片
选择membership为public否则头文件异常
静态库打包_第6张图片
选择需要公开的的.h文件
静态库打包_第7张图片
默认动态库Dynamic Library,选择Static Library库
编译:动态库链接报错
静态库打包_第8张图片
tbd = 系统动态库新格式 = dylib的后辈。解决:.tbd删掉+add other再次添加 + 前往/usr/lib + 选择dylib

选择编译环境:Debug:真机+模拟 Release:真机+模拟。终端命令:lipo -create 测试模拟库 测试真机库 发布模拟库 发布真机库。将四个文件合4为1

右击Product + show in finder + 拷贝到目标文件夹 + 第三方静态库也拷贝到文件夹

静态库版本(4种)

1.真机-Debug版本

2.真机-Release版本

3.模拟器-Debug版本

4.模拟器-Release版本

静态库的合并

1、 检测.a的类型

$ lipo -info libCZTools.a

2、 合并.a。好处:既可以在真机上调试,也可以在模拟器上调试;缺点:如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的

lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a

你可能感兴趣的:(静态库打包)