iOS二进制方案真实落地经验(30分钟降低到10分钟以内)

我们做iOS二进制化断断续续尝试了一年多了,来来回回换了三个架构师去尝试落地,今日完全落地,在此做个总结

背景

工程基于cocoapod的组件化开发,组件按照规范是可以独立运行的,但是我们的组件在上传cocoapod私有库的时候去掉了lint检查(为了更快的发布组件),因此,很多组件是做不到独立运行的,在此基础上我们要做二进制化来加速打包速度。

使用方是多个app多个业务线,我用最大的工程试了下最终收益:30分钟打包时间降到10分钟左右,在纯净环境的打包机下是25分钟降低到5分钟

失败的探索经验

之前有两个人做过前期尝试,思路都是双源策略,源码源+二进制源。最大的区别是如何把组件二进制化,之前的策略是使用cocoapod自带的binary扩展插件来实现,最终没落地是因为组件打出.a的成功率太低,基本没啥效果,而且cocoapod错误难以定位

我的尝试

站在前人的肩膀上做了升级

1,使用xcodebuild原生指令编译二进制文件

2,编译失败则使用源码podspec上传到二进制私有源中,保证二进制私有源可用

流程图如下:

以上流程关键点:

  • 增加了白名单机制,有些组件本身不需要执行二进制化;
  • 如果组件的这个版本号已经执行了二进制编译,则无需再次编译,直接跳过;(这里的判断方式是使用cocoapod源地址来搜索判断的,一开始使用的是sqlite来存储,但是无法跨多个打包机实现共享,而且需要自己维护,cocoapod自带的源地址就可以完美解决这个问题)

主要思路是:所有组件在更新发布出新版本号的时候,对应的版本号都有对应的二进制化版本;工程特性分支合并后也会产生新版本号,因此凌晨任务的时候执行组件编译

尝试过程中遇到的问题

组件编译的时候,组件的依赖组件版本号没指定,拉取的一定是最新版本号的,如果依赖的组件正在修改且编译失败,会导致当前组件编译失败;因此,第一版尝试是组件依赖的组件版本号去主工程的podfile.lock里取,以此达到主工程能编译成功则组件就可以编译成功。但是最终没落地,是因为有些组件依赖的其他组件,但是没在podspec里写依赖,而是直接import对应达到类来使用!(我们组件pod repo push 的时候去掉了lint检查,去掉原因是lint耗时)

最终落地方案

如图:

  • 流程关键点

    1,组件不再独立编译(独立编译成功率低)

    2,组件在开发过程中执行了更新发布(产生了新版本号),除了pod repo push到源码源之外,向二进制源也push一份(重点)

    2,主工程master分支在凌晨自动执行一次编译,编译出的组件.a直接拿来使用

    3,其他流程和老流程一样

成功落地分析

  • 首先二进制源要保证每个组件的版本号都能覆盖,就是流程关键点2起到主要作用
  • 壳工程依赖的一百多个组件,特性分支开发的时候最多也就十几二十个,其他组件都是二进制版本,保证了运行速度
  • 一期目标是在打包机落地,打包脚本中动态切换source源为静态源,不影响开发流程

iOS二进制方案真实落地经验(30分钟降低到10分钟以内)的更多相关文章

  1. 【腾讯Bugly干货分享】OCS——史上最疯狂的iOS动态化方案

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/zctwM2Wf8c6_sxT_0yZvXg 导语 在 ...

  2. 破解YunFile下载间隔10分钟/下载等待30秒

    [破解10分钟间隔] 可以采用断网重连等方法重新获取IP地址,就不用再等十分钟了 [破解30秒等待] 收藏一个书签,书签地址如下 javascript:var downpage_link = docu ...

  3. 用ab每隔30分钟并发一次休息10分钟

    linux脚本监控程序运行情况(重启程序)主要有两种情况:一种是一个可执行文件:如shell脚本文件:另一种是使用python打开的多个程序.第一种:它的进程名字由路径名字和程序名字组成,比如:我有个 ...

  4. 对iOS后台模式最多10分钟运行时间的进一步理解

    在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...

  5. AI开发者十问:10分钟了解AI开发的基本过程

    摘要:从AI开发模型.框架.工具,到提升开发效率的学习办法,为AI开发者逐一解答. 本文分享自华为云社区<10分钟了解AI开发的基本过程>,作者:简单坚持. 1.AI开发究竟在开发什么? ...

  6. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  7. 10 分钟实现一个自己的server监控器

    需求 近期须要给自己的server加入监控器.目的是监控server的内存.CPU.磁盘占用率,资源占用率过高的话能给自己发个提醒.当前主流的平台通常会提供邮件.短息.甚至会提供微信提醒,只是这类提醒 ...

  8. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  9. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

随机推荐

  1. 1、Redis简介

    一.NOSQL 1.什么是NOSQL? NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 指的是非关系型的数据库.NoSQL有时也称作Not On ...

  2. 使用 scipy.fft 进行Fourier Transform:Python 信号处理

    摘要:Fourier transform 是一个强大的概念,用于各种领域,从纯数学到音频工程甚至金融. 本文分享自华为云社区<使用 scipy.fft 进行Fourier Transform:P ...

  3. 学Java,Java书籍的最佳阅读顺序

    疫情以来,好久没出差了,今天出差去趟上海,早上 4 点多就起床了,到机场天都没亮.到登机口离起飞还一小时,趁着等飞机的时间,抓紧码字,把这篇文章收个尾. 今天和大家说说学 Java 的读书路线.路线中 ...

  4. 使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果

    本文是使用 WPF 做个 PowerPoint 系列的博客,本文来告诉大家如何解析 PPT 里面的文本描边效果,在 WPF 应用中绘制出来,实现像素级相同 背景知识 在开始之前,期望你了解了 PPT ...

  5. Table.ReverseRows反转…Reverse…(Power Query 之 M 语言)

    数据源: 任意五行两列 目标: 将原排列顺序颠倒 操作过程: [转换]>[反转行] M公式:  = Table.ReverseRows( 表 ) 扩展: 反转列表:= List.Reverse( ...

  6. LuoguP7784 [AC6-M15] “大吊灯”攻略作战 题解

    Content 你要把 \(n\times m\) 的一个矩阵划分成若干个矩阵,使得对于每一个矩阵: 不存在两个矩阵合起来是一个矩阵. 划分的矩阵个数不超过 \(10\). 请给出一个划分方案,或者报 ...

  7. LuoguP7019 [NWRRC2017]Auxiliary Project 题解

    Update \(\texttt{2021.6.24}\) 修改了一处格式上的错误和一处笔误. Content 已知用 LED 灯来显示 \(0\sim9\) 这十个数字分别需要 \(6,2,5,5, ...

  8. Excel数据导出功能

    HTML代码: <a id="aExportData" hidden><span>Export</span></a> <div ...

  9. JAVAWEB项目报"xxx响应头缺失“漏洞处理方案

    新增一个拦截器,在拦截器doFilter()方法增加以下代码 public void doFilter(ServletRequest request, ServletResponse response ...

  10. 使用iframe内嵌PC网站实现高度自适应

    加个样式 <style> iframe { display: block; border: none; height: 90vh;/*设置高度百分比,一直调到只有一个滚动调为止*/ wid ...