组件27-二进制:二进制化-中级实践方案

上一篇的方案是:单独创建一个新的库,把它当做一个新的库来管理。这样的弊端是需要维护两个库,还要在宿主工程的Podfile中修改pod 'XMGDownLoad或XMGDownLoadLib'来切换源码和二进制。如果类似的库多了,工作量就大了。本篇将解决这个问题。

使用复合工程来解决这个问题

  1. 打开XMGDownLoad-Example源码工程;
  2. TARGETS处添加一个.framework库,修改该库的编译构架为所有、mach-O Type为static library、Headers暴露(拖入文件后再暴露)、release。
  3. 拖入源码到库所属文件夹中,注意是引用关系,不是复制拷贝关系,这样修改的都是同一处文件,操作如下图。然后暴露下头文件从Project到Public。
    1.设置编译所有构架
    2.mach-O Type 静态库
    3.暴露接口
    4.Edit Scheme——>release


    组件27-二进制:二进制化-中级实践方案_第1张图片
    Snip20170714_61.png
  4. 修改XMGDownLoad-Example工程的的podspec,注释s.source_files,改为:s.source_files = 'XMGDownLoad/Classes/*/.h'(只安装.h头文件,.m不能给,否则就起不到保护的作用);s.vendored_frameworks = 'XMGDownLoad/Products/XMGDownLoad. framework'(库的路径,根目录下新建个Products文件夹拷贝入编译好的framework库或者修改设置,在上一篇中讲到)
s.source_files = 'XMGDownLoad/Classes/**/*.h'
s.vendored_frameworks = 'XMGDownLoad/Products/XMGDownLoad.framework'
  1. 修改version,提交代码到远程库。

  2. 宿主工程,podfile文件中只需要 pod 'XMGDownLoad'即可,无需加Lib,因为podspec文件中指明了安装头文件和二进制库,tag指名了哪一份代码,s.source :git指名了源码地址。

    组件27-二进制:二进制化-中级实践方案_第2张图片
    Snip20170714_67.png

  3. 宿主工程,如果是pod install,是从Podfile.lock中找版本号,所以安装之后还是源码版本0.1.0不是二进制库版本0.1.1;所以应该用pod update --no-repo-update,从podfile中找版本号。

pod install不升级版本号——从podfile.lock找原有版本号version或tag


组件27-二进制:二进制化-中级实践方案_第3张图片
pod install不升级版本号——从podfile.lock找版本号

pod update升级版本号——从podfile找spec安装最新版本号version或tag


组件27-二进制:二进制化-中级实践方案_第4张图片
pod update升级版本号——从podfile找spec安装最新版本号

这个方案的好处

  1. 维护下载库XMGDownLoad,只需要维护一份代码就可以了。源码XMGDownLoad和库XMGDownLoadLib都在XMGDownLoad-Example工程中,只需要维护一份在Classes中的代码。
  2. 宿主Podfile只需pod 'XMGDownLoad'就可以安装二进制库。

这个方案的思路

XMGDownLoad-Example中Targets添加创建一个.framework库,该库代码引用原Classes有的,而不是复制一份。这样修改代码还是修改原来那一份的。

你可能感兴趣的:(组件27-二进制:二进制化-中级实践方案)