聊聊 Xcode 编译工具链(ToolChain)

“民之失德,乾糇以愆;他山之石,可以攻玉。”- 《诗经》

绝大部分开发者开发iOS或者Mac APP 都会选择Xcode集成开发环境。Xcode是一款强大的GUI IDE,集开发、编译、调试和代码分析于一体,而在这背后,则是一系列工具的支撑,本文聊聊Xcode在编译过程涉及的工具及其作用。

一、编译ToolChain初窥

图1展示了在Xcode中选择Build时编译工程test-toolchain时的过程:

图1:Build工程test-toolchain时的过程

从图1中可以看见,在Xcode中点击Build后,Xcode首先调用工具mkdir创建product目录,然后调用clang编译源码文件和链接生成可执行文件,调用ibtool编译storyboard文件,调用actool编译Asset文件等。可能是考虑到GUI的简洁和局限,Xcode并没有给出所有的编译涉及到的工具,我们通过命令行的方式来探索下~~

二、“黑乎乎”版的Xcode:xcodebuild

2.1 xcodebuild命令行编译Xcode工程

xcodebuild是编译Xcode工程的命令行工具,比如可用如下命令编译test-toolchain工程:

xcodebuild -project test-toolchain.xcodeproj -configuration Debug build

上面的命令表示:编译debug版本的test-toolchain,xcodebuild支持众多的选项配置,不指定会使用默认的设置。

命令行的输出显示了更多的细节,如下部分片段:

=== BUILD TARGET test-toolchain OF PROJECT test-toolchain WITH CONFIGURATION Debug ===

Check dependencies

Write auxiliary files

write-file /Users/netease/Desktop/ForTestApp/test-toolchain/...

...

Create product structure /bin/mkdir -p /Users/netease/Desktop/ForTestApp/.../test-toolchain.app

...

** BUILD SUCCEEDED **

在其中,我们发现暴露了新的工具,如:builtin-productPackagingUtility打包工具、codesign签名工具等。那么,还有方法暴露更多的编译细节出来吗?请向下看~~

2.2 Patch版的xcodebuild编译Xcode工程

利用DYLD_INSERT_LIBRARIES实现对Mac程序的动态库注入已经广为人知,在执行文件加载时,会调用注入库的构造函数,我们可以在这里将执行文件的名字打印出来,从而获取xcodebuild编译更多的细节。

动态库代码(名字为test_injector)如图2:

图2:动态库test_injector代码

将injector编译,得到库:test_injector.dylib,然后注入到xcodebuild,如下:

DYLD_INSERT_LIBRARIES=./test_injector.dylib xcodebuild -project test-toolchain.xcodeproj -configuration Debug build

这次得到的信息如下:

2016-07-28 19:00:53.874 xcodebuild[2038:85610] tool name:xcodebuild

2016-07-28 19:00:53.904 xcodebuild[2038:85610] tool name:xcodebuild

=== BUILD TARGET test-toolchain OF PROJECT test-toolchain WITH CONFIGURATION Debug ===

Check dependencies

2016-07-28 19:00:54.396 sh[2042:85682] tool name:sh

2016-07-28 19:00:54.426 sh[2045:85685] tool name:sh

...

CompileC build/test-toolchain.build/Debug-iphoneos/...

2016-07-28 19:00:54.470 xcexec[2047:85693] tool name:xcexec

2016-07-28 19:00:54.481 clang[2047:85693] tool name:clang

2016-07-28 19:00:54.492 clang[2051:85701] tool name:clang

...

** BUILD SUCCEEDED **

可以看见,信息进一步丰富了,比如工具xcexec等。

三、Xcode编译Toolchain汇总

使用patch版的xcodebuild,我们获得了Xcode在编译一个工程时所涉及的工具图谱,总结的信息见下表1:

表1:Xcode 编译 ToolChain介绍

工具名称用途介绍

xcodebuild编译Xcode工程的命令行工具

shShell工具

mkdir创建目录

xcexec执行wrapper

clang编译器,内部封装了编译、优化过程

ld链接器

ibtoolnib资源文件本地化

ibtoold资源文件链接

actoolasset资源文件编译

builtin-infoPlistUtilityPlist文件编译工具

builtin-productPackagingUtility打包工具

touch文件创建

codesign创建、查看和修改签名

codesign_allocate为Mach-O文件增加签名数据

builtin-validationUtility校验工具

获得这些信息有什么好处呢,这个就是仁者见仁了,比如获取clang编译源码文件的时间,这儿也可当做一个切入点。

网易云捕-网易旗下最专业的APP质量跟踪平台

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

推荐阅读更多精彩内容