Xcode Build过程

一个按钮点一下,就可以build出整个app;xcodebuild一行命令,就可以产生一个app;在这个过程中,具体做了什么了?我们可以瞟一眼看看。

1. 编译的过程是什么?

如果又是 编译 -> 汇编 -> 链接 这个,不免感到有点无聊,我们可以从一个编译的实例日志来看看,具体有什么。我们做一个demo的工程,进行一次编译

image.png

image.png

这个流程看起来还是比较明确的,做一个流程图表示的话,就是这样


image.png

我们会编译 pod库 -> target依赖 -> 主target,这个流程比较明确,对于具体每一个步骤,也是比较清楚的。这篇文章不打算去深入到每一步骤的细节里,比如调用clang编译一个 oc 文件的详细过程,想说明的是在Xcode build这过程中,大致做了哪些事,用到了哪些工具,从开始n多个文件到最后一个xxx.app的过程。

2. 编译的流程在哪里定义?

通过对编译日志进行解析,我们基本明白发现了编译的过程大致每一步做了什么,用到了哪些工具,到最后 xxx.app的产出
接着,我们可以看看这个流程是在哪里定义的。

image.png

嗯,比较显然,是在 Build Phase这块定义的;
我们可以详细看看

"Target Dependencies" 这一步,显然是首先编译依赖的target
"Check Pods Manifest.lock" 这一步,是cocoapods生成的脚本,diff了下 Podfile.lock和 Manifest.lock
image.png
"Compile Sources"  没得说,这里定义了要编译的全部源码
image.png
"Link Binary With Libraries" 这里是把我们上一步编译,还有之前pod生成的静态库,动态库,都链接起来
image.png
"Copy Bundle Resources" 这块把静态的资源文件拷贝到app bundle中
image.png
"Run Script" 又是执行一个脚本文件,我们打开看看,是fabric生成的一个脚本,上传Dsyms文件用的
image.png

看到这里,其实我们应该已经比较熟悉这个流程了;这里既然Cocoapods, Fabric这些都可以生成自定义的脚本,那我们自己可以吗?当然可以了。
比如我们需要确认某次包是对应 commit id所处,我们可以动态解析当前head指针,写入Info.plist,最后编译查找问题。

3. 编译的参数选项设置

我们知道,每一步过程中,必然对应的很多的不同选项;这些参数怎么配置?

image.png

Build Settings里面可以找到全部的配置,这里有很多很多东西。比如,有签名部分的配置,有build 优化的,等等。这里最好的参考,其实还是Xcode文档
这是链接,有每项的说明,这是最好不过了。
https://help.apple.com/xcode/mac/10.1/index.html?localePath=en.lproj#/itcaec37c2a6

4. 配置落实到文件在哪里

不管是 Xcode Build Phase,还是Xcode Build Settings,都是我们在Xcode里面看到的,落实到文件上是在哪里呢?
我们可以找到一个 project.pbxproj 的文件,我们拖进 visual studio里面,一切似乎一目了然了。

image.png

我们可以慢慢看,这里就是 过程 + 参数配置的结合体,到这里,似乎一切都明了了。
最后,多说一句,pbxproj格式文件,还真古老,最早源自 " NeXT 的 OpenStep",具体的解析可以Google更多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • iOS学习之深入理解程序编译过程 https://juejin.im/post/5a352bb0f265da433...
    111浪子111阅读 1,709评论 0 2
  • 一、build 日志 在 Xcode 的 Report navigator 中可以看到 build 日志(如下图...
    ShannonChenCHN阅读 5,933评论 0 9
  • 卷首语 欢迎来到 objc.io 的第六期! 本月我们迎来了第一个小里程碑 —— objc.io 半岁啦! 在这个...
    评评分分阅读 879评论 0 4
  • 看到我们每一个组长,如此的付出,努力为自己的生命负责,为更多人的生命成长负起责任,大家都是非常卓越的,当你肩负的责...
    快乐天使_快乐飞翔阅读 163评论 0 0
  • 何炅曾唱过一首歌《栀子花开》。栀子花开如此可爱,挥挥手告别欢乐和无奈,光阴好像流水飞快,日日夜夜将我们的青春灌溉。...
    容姐心语阅读 299评论 0 2