作为iOS开发,XCode一天编译几十上百遍是常事。cmd+B,两指一按,哗啦啦的就开始build了。但是,我们是否曾想过,这背后究竟做了哪些工作呢?工具会用是最基本的,但也要适当了解其原理。

作为iOS开发,XCode一天编译几十上百遍是常事。cmd+B,两指一按,哗啦啦的就开始build了。但是,我们是否曾想过,这背后究竟做了哪些工作呢?工具会用是最基本的,但也要适当了解其原理。

build一瞥

模拟器build过程如图。

process@2x.png

大致的过程是:

  • compile各个.m文件
  • copy静态资源,包括img,string,font。
  • compile xib
  • compile storyboard
  • compile asset catalogs
  • process info.plist
  • link storyboards
  • run custom script
  • touch app
  • sign app
  • validate app(真机build有)

另外,如果工程有第三方依赖库,首先会build依赖库target,然后build主target。

QQ20170106-5@2x.png

build过程

clang compile
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch x86_64 -W -c path/main.m -o path/main.o
  • -x 表示编译语言
  • -arch 表示编译的架构
  • -W 各种编译警告
  • -c 表示进行预处理,编译,汇编过程
  • -o 输出结果
copy静态资源

copy图片到app

/Applications/Xcode.app/Contents/Developer/usr/bin/copypng
-compress -strip-PNG-text path/MaskView/MaskView/en.lproj/icons.png path/MaskView.app/en.lproj/icons.png

copy strings

builtin-copyStrings
compile xib

编译xib,生成nib文件

/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
compile storyboard

编译storyboard,生成.storyboardc文件,打开包内容,是nib+plist。

/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
compile asset catalogs

生成Asset.car文件。

/Applications/Xcode.app/Contents/Developer/usr/bin/actool
process info.plist

处理info.plist

builtin-infoPlistUtility
link storyboards

链接storyboard

/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool
run custom script

执行脚本

/bin/sh
touch app
/usr/bin/touch
sign app

对app进行签名

/usr/bin/codesign
validate app

校验app

builtin-validationUtility

作者:我落泪_情绪零碎
链接:http://www.jianshu.com/p/b027a8c4c3a3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浅析XCode编译过程相关推荐

  1. 浅析Linux下gcc编译过程

    目录 1. gcc简介及基本用法 2. gcc编译过程 3. 静态链接和动态链接 4. 静态库和动态库 4.1 静态库的制作和使用 4.2 动态库的制作和使用 1. gcc简介及基本用法   GCC( ...

  2. linux编译poco静态库,iOS——为Xcode编译POCO C++静态库

    一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C+ ...

  3. 初步了解mac下C源码的编译过程

    初步了解mac下C源码的编译过程 参考: 请问Mac OS X (10.9.1)下创建和使用动态链接库的方法 cc.gcc.g++.CC的区别概括 - 今晚打酱油_ - 博客园 Linux 下 的 c ...

  4. iOS进阶--提高XCode编译速度、Xcode卡顿解决方案

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...

  5. iOS 编译过程的原理和应用

    来源:黄文臣 blog.csdn.net/hello_hwc/article/details/53557308 前言 一般可以将编程语言分为两种,编译语言和直译式语言. 像C++,Objective ...

  6. iOS编译过程的原理和应用

    阅读本文你将收获: iOS编译流程 明确 text.data 的含义 iOS dSYM 的作用和生成方式 明白iOS crash堆栈符号化解析流程 source: iOS编译过程的原理和应用 iOS ...

  7. iOS App 的编译过程

    在 iOS 开发的过程中,Xcode 为我们提供了非常完善的编译能力,正常情况下,我们只需要 Command + R 就可以将应用运行到设备上,即使打包也是一个相对愉快的过程. 但正如我们写代码无法避 ...

  8. xcode 编译提速

    1. 提高XCode编译时使用的线程数 代码如下:  defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认 ...

  9. Compiler编译过程

    Compiler编译过程 1.原理 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做"本地"编译器.另外,编译器也可以生成 ...

最新文章

  1. SVN文件库移植(转)
  2. ie浏览器怎么打开html,Win10系统IE浏览器不能打开HTML怎么办
  3. python 轮廓矩阵_python – 在3D numpy矩阵中绘制给定值的曲面轮廓
  4. 用pc浏览器打开手机页面
  5. recyclerview简单实现单选多选反选全选
  6. python偏最小二乘法公式,python3 偏最小二乘法实现
  7. HashSet判断重复项原理
  8. linux steam root,使用Lutris在Linux上安装Windows Steam
  9. 香港黄金配角吴孟达去世,80后程序员以轮播图来悼念达叔,达叔一路走好!
  10. 田老师书法工作室优秀学员获奖作品展(一)
  11. 详解【java实现】编写一个程序,从键盘读入一段英文(多行),找出其中所有的英文单词,统计每个单词出现的次数,并按照单词出现次数由大到小排序后输出。
  12. 4.1 数据仓库基础与Apache Hive入门
  13. mxd2 计算机内存不足,错误:无法将图元文件映射到内存中。 内存不足
  14. PTA——最佳情侣身高差
  15. 工业交换机与商业交换机区别对比
  16. 西交计算机科学与技术保研率,西北高校保研率:西交、西工大、西电前三
  17. PowerPoint中怎样设置多对象利用统一收获圣诞节ppt模板PPT
  18. 托福高频真词List03 // 附阅读真题
  19. “智农”农业元宇宙一体化管控平台
  20. 爬虫实例:正则表达式爬取微博热搜榜

热门文章

  1. 彻底解决EMI问题,只需8秒
  2. nvidia显卡的Exclusive Process模式
  3. 杰里之升级复位可以选择软复位跳转和绝对地址跳转【篇】
  4. 川大数学系和计算机系,这两所985高校北师大和川大,数学专业是A档,考生该如何选择...
  5. ccc4和ccc5的区别
  6. 在SpringBoot中添加发送邮件功能
  7. 区块链落地应用虚实待验,以人为本挖井为先
  8. 2019考研英语二真题词汇整理
  9. (待填坑)【字符串】manacher(马拉车)算法
  10. 百度云有关Token