美文网首页
静态库打包

静态库打包

作者: Carden | 来源:发表于2017-04-26 15:16 被阅读56次

    为什么把代码打包成库?

    • 不想让别人看到.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创造?

    新建工程 只需导入,不需要添加进Target 支持版本 导入完成 选择membership为public否则头文件异常 选择需要公开的的.h文件 默认动态库Dynamic Library,选择Static Library库 编译:动态库链接报错 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

    相关文章

      网友评论

          本文标题:静态库打包

          本文链接:https://www.haomeiwen.com/subject/ismizttx.html