Cocoapod二进制化实践

1,786 阅读3分钟

(Carthage暂不考虑..., 略过)

简(fei)介(hua)

随着越来越多方便的第三方组件, 现在开发App基本十多个第三方依赖以上. 没有build cache或者打正式包的时候, 每次基本耗时10分钟以上.

主要原因是需要编译大量源文件(大概分为app和Cocoapods依赖库), 所以把可抽离代码编译好, 再去引用就能减少源文件编译时间

至于有没有其它更高级玩法, 暂时还不太清楚

想法(来自网络各种方法综合)

简单的平民解决方法: 建立私有二进制的repo

  • app

    • 抽离封装为一个库, 打包为二进制, 存到私有Cocoapods repo
  • Cocoapods依赖

    • 每个组件版本的源码打包为二进制, 存到私有Cocoapods repo

如果公司或者你有足够资源, 可以弄双私有源(两个私有repo, 一个二进制, 一个源码), 不然就简单点, 弄个私有二进制的repo也够用

思路

由于没机器和资源, 只实践了后面的简(diao)单(si)版. 有条件最好是做一套自动化的, 我是没机器和资源, 打包还是各种脚本在自己机器上手动打包, 好惨...

简单版思路:

  • 打包第三方源码

    • 每个tag打包二进制(只弄了打包framework, 不知道别人的static framework如何制作, 试了不成功)
  • 私有repo

    • 其实就是一个git仓库, 私有属性即可(虽然公有也行, 只是别人能看), 一般github, gitlab, gitee或者自建git创建一个仓库就可以了
  • 二进制文件存放

    • 打包出来的二进制文件, 需要找个地方提供下载, 有条件的话可以存CDN管理, 没的话在内网放个静态文件服务器存也行, 还有可以存git(需要有http(s)下载地址)...

实践

需要的一些辅助工具

步骤

  • 打包第三方源码

    1. git clone各种组件源码库
    2. 脚本打包

      • tag拉分支, 并切换(打包之后删除, 再回去master)
      • 使用pod gen根据podsec创建工程
      • xcodebuild打包framework(真机和模拟器)
      • 合并真机和模拟器的framework
      • 看上去是这么简单, 实践的时候会发现有些库是不能通用一个脚本的
    3. 上传framework(用了binary-server管理)
  • 二进制的podsec上传到私有的repo

    1. 使用pod bin spec create创建二进制版本的podsec

      • subsec的会要求提供template
      • 某些平台要求版本会低于8, 因为是使用framework, 需要平台版本需要改为8以上
    2. 上传生成的podsec
  • 使用

    • Podfile加上source {你的私有repo}, 然后再加一个官方的repo(例如: source 'https://cdn.cocoapods.org/').
    • 官方的一定要加在后面, 有相同的库会根据source的顺序获取依赖. 想切回源码注释私有库那一行就好了(因为只是简单的一个私有二进制repo)

某些坑

  • 不知道会有啥影响, AppStore的打包还是老老实实的用源码build
  • modulemap记得要把真机和模拟器的合一起
  • 真机和模拟器的DSYM文件保留(万一哪一天用上)
  • 有些第三方库是*.podsec, 有些是*.podsec.json
  • pod bin spec create创建的二进制podsec文件名是带加了binary, 需要去除, 不然和podsecname文件名对不上, 无法通过pod spec lint
  • pod repo push上传私有spec的时候, 记得加--use-json --allow-warnings
  • 或许还有其它...