项目结构

CocoaPods做业务划分,每条业务线一个工程,每个工程依赖基础框架,业务线之间解耦依赖基础模块

纯Objective-C代码,没有引入Swift代码

独立服务器安装Xcode通过Jenkins打包,发布到fir.im

2C端目前代码量33W左右,2B端28W左右

打包时间

随着项目的逐渐增大打包时间越来越久。代码打包是放在独立的服务器上,因为只是用来做项目打包使用,因此性能配置较低。为了保证每次打包的代码的完整性,每次都会进行全量的更新(包含Pods私有库和公共库的更新)。代码更新和Pos更新的时间加上编译时间安装包上传时间,2C端项目完整的打包时间基本在800s左右,2B端项目在1200s左右。长久的等待实在让人有些崩溃。

解决方案

ccache is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again. Supported languages are C, C++, Objective-C and Objective-C++.

ccache是一个可以把编译中间产物缓存起来的工具,目前可以支持C、C++、Objective-C、Objective-C++,满足目前需求

安装ccache

如果已经安装过homebrew(Mac OSX上的软件包管理工具),可以通过以下命令直接安装:

brew install ccache

如果没有安装homebrew,需要先安装homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

创建ccache编译脚本

安装完ccache之后我们需要让它介入到整个编译过程,如果发现ccache就用ccache编译,如果没有就走原有的clang

新建一个空白文本文件

touch ccache-clang

保存如下内容:

#!/bin/sh

if type -p ccache >/dev/null 2>&1; then

export CCACHE_MAXSIZE=10G

export CCACHE_CPP2=true

export CCACHE_HARDLINK=true

export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches

exec ccache /usr/bin/clang "$@"

else

exec clang "$@"

fi

脚本比较容易理解,先判断ccache的执行路径是否存在,如果存在设置ccache的参数,并启动ccache编译,如果不存在走原有clang编译

修改touch ccache-clang的权限为可执行

chmod 755 ccache-clang

Xcode项目修改

定义CC常量

在项目构建设置(Build Settings)中,添加一个常量CC,Xcode编译时会调用该路径下的编译器

image

如果ccache-clang跟工程文件平级,CC常量值可以设置为

$(SRCROOT)/ccache-clang

关闭Clang Modules

因为ccache不支持Clang Modules,所以需要把Enable Modules关闭

image

关闭Enable Modules后需要修改@import 为 #import,如果用到了系统框架还需要在Target 的 Build Phrase -> Link Binary With Libraries手动引入

CocoaPods处理

CocoaPods会把项目打包成静态库或者动态Framework,也需要把 Enable Modules选项关闭,这个操作需要在Podfile文件中完成

在Podfile文件中增加如下配置

require 'fileutils'

post_install do |installer_representation|

installer_representation.pods_project.targets.each do |target|

target.build_configurations.each do |config|

#关闭 Enable Modules

config.build_settings['CLANG_ENABLE_MODULES'] = 'NO'

# 在生成的 Pods 项目文件中加入 CC 参数

config.build_settings['CC'] = '$(SRCROOT)/ccache-clang'

end

end

# 拷贝主工程的ccache-clang文件到Pods下面

FileUtils.cp('ccache-clang', 'Pods/ccache-clang')

end

查看编译结果

在第一次启动ccache编译时因为所有文件都没有做过编译缓存,因此是没有任何提升效果的,反而由于ccache自己的缓存策略会降低编译速度,从第二次开始编译速度就会有所提升

ccache -s

cache directory /Users/ecotech/.ccache

primary config /Users/ecotech/.ccache/ccache.conf

secondary config (readonly) /usr/local/Cellar/ccache/3.2.3/etc/ccache.conf

cache hit (direct) 5484

cache hit (preprocessed) 0

cache miss 3436

called for link 10

called for preprocessing 30

can't use precompiled header 1896

no input file 10

files in cache 15504

cache size 2.8 GB

max cache size 10.0 GB

2C项目 优化前:615s 优化后:266s 提升:56.7%

2B项目 优化前:902s 优化后:403s 提升:55.3%

ios系统脚本服务器加速,提高iOS项目的编译速度相关推荐

  1. ios系统脚本服务器加速,让iOS系统加速飞起来 speed intensifier插件让iOS系统加速

    由于系统的限制,在动画以及程序打开时间和速度方面基本上在iOS设备当中都是固定的,虽然默认的速度并不算太慢,基本上符合大多数用户的使用习惯,但是还是有一部分用户想方设法的想要让程序打开的速度变快一些, ...

  2. [贝聊科技]如何将 iOS 项目的编译速度提高5倍

    前言 贝聊目前开发的两款App分别是贝聊家长版和贝聊老师版,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60 ...

  3. ios更新了系统无服务器,iPhone更新iOS 12.0.1系统失败怎么办?

    iPhone更新iOS 12.0.1系统失败怎么办?有小伙伴反应说系统升级失败.该怎么办呢?下面,小编就为大家介绍下iPhone更新iOS 12.0.1系统失败处理方法. 很多人会选择使用手机直接进行 ...

  4. ios的vn服务器未响应,iOS应用程序导致内部服务器错误

    我有一个很奇怪的问题.我的应用程序正在导致我的服务器狂暴.iOS应用程序导致内部服务器错误 我的iOS应用程序使用TFHPPLE解析来自服务器上的PHP页面的数据.它从页面抓取一个名称,并检查该广告系 ...

  5. 华为鸿蒙系统与苹果IOS系统,华为鸿蒙与苹果iOS的两极之路

    原标题:华为鸿蒙与苹果iOS的两极之路 近段时间,关于华为自研操作系统鸿蒙的消息越来越多,而且此前余承东自信表示,鸿蒙最快今年底,最晚明年初就会推出市场,且近期在全球范围传出华为鸿蒙的版权注册等消息. ...

  6. android和ios系统的内存,为什么说IOS系统的2G运存相当于安卓手机的8G运存

    在手机圈里,苹果手机一直都是深受欢迎的,除了性能的强大,系统做的也是非常的好,这也是为什么苹果手机用户的黏性非常高的原因之一,而在流畅度这一块,苹果手机的2G运存基本上都堪比安卓的8G了,为什么这么说 ...

  7. 鸿蒙系统速度和ios,鸿蒙系统和ios系统区别-鸿蒙系统和ios系统哪个好

    鸿蒙系统和ios系统哪个更流畅,鸿蒙系统和ios系统哪个更好呢,鸿蒙OS2.0系统是很多朋友们感兴趣的华为系统,而ios系统有着出色流畅体验,为大家带来华为鸿蒙系统和苹果iOS系统的区别对比,一起来看 ...

  8. 提高安卓源码编译速度

    1.设置ccache 搭建编译环境 | Android 开源项目 | Android Open Source Project 使用 ccache 优化c/c++ 编译速度 2.使用make -jxx进 ...

  9. 异域公主连接iOS怎么修改服务器,公主连结ios账号在电脑端登录方法 模拟器使用技巧分享...

    公主连结ReDive游戏中有着非常多的客户端,很多的ios玩家们想要在电脑上登录自己的账号,那么ios账号要怎么在电脑上登录呢?ios账号在电脑上登录的方法是什么样的呢?就和小编一起去了解一下在电脑上 ...

最新文章

  1. IOS开发错误library not found for -lXXX
  2. 对比2个表mailbox_id字段的差集,然后做插入操作
  3. 谈谈产品开发团队的配置管理规则
  4. ISCC2014-reverse
  5. python怎么读取word文件大小_python操作word
  6. 从虚幻 4 中采集 360 度立体电影
  7. gulp——用自动化构建工具增强你的工作流程
  8. 前端多个圆圈均匀横向排列_web前端工程师必须掌握的24条宝贵经验!让你在前端路上更轻松!...
  9. LINUX 编译gluegen/jogl
  10. 190602每日一句
  11. 【读书笔记】终极算法
  12. 【Linux】Linux中755权限是什么意思
  13. Codeforces 106C Buns 【0-1背包】
  14. 信息系统项目管理师必背整体核心考点
  15. 期货交易品种基本面分析(期货品种技术面分析)
  16. c语言面试(c语言面试基础知识)
  17. openldap 集成 sssd
  18. 博世传感器调试笔记(一)----加速度传感器BMA253
  19. Web安全常见漏洞原理、危害及其修复建议
  20. 无线网络怎么设置,更加安全?

热门文章

  1. 菜鸟技术专家胡斌:技术架构的战略和战术原则
  2. 企业级低代码平台,Jeecgboot-Vue3 v1.0.0 版本正式发布
  3. docker安装rabbitmq延时队列插件
  4. 如何用好 Chrome devtools
  5. Linux 查看ERROR日志方法
  6. C++调用MATLAB函数
  7. Mac安装MATLAB 2017b
  8. Programming Computer Vision with Python【学习笔记】【第一章】
  9. JQ中使用FormData+Ajax发送请求及使用express接收处理FormData数据
  10. Redis-列表(List)基础