静态库打包
为什么把代码打包成库?
-
不想让别人看到.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]
新建工程 只需导入,不需要添加进Target 支持版本 导入完成 选择membership为public否则头文件异常 选择需要公开的的.h文件 默认动态库Dynamic Library,选择Static Library库 编译:动态库链接报错 tbd = 系统动态库新格式 = dylib的后辈。解决:.tbd删掉+add other再次添加 + 前往/usr/lib + 选择dylibFramework创造?
选择编译环境: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