![1306450-72f9fe4fdaf39a2f.png](https://upload-images.jianshu.io/upload_images/1306450-72f9fe4fdaf39a2f.png)
Xcode 10 中全新的构建系统完全采用 Swift 编写而成, 提供了更好的性能和稳定性。
对于 Xcode 中的构建过程,你是否有过这些疑问?
当你在 Xcode 中按下快捷键 Command + B 时,构建过程如何进行组织?
Xcode 如何根据项目中的文件信息来决定构建过程?
接下来,让我们一起进入编译器的国度并深入探索以下内容:
- Clang 和 Swift 如何将源代码构建成 object 文件
- headers 和 modules 如何工作
- 编译器如何在代码中寻找声明
- Swift 的编译模型和 C, C++, Objective-C 在本质上的区别
- symbols 是什么,及其如何与我们的源代码进行关联
- 为了构建你的应用或者框架,linker 如何将编译器产生的 object 文件黏结在一起并生成可执行文件
内容概览
- 构建系统
- Clang 编译器
- Swift
- Linker
我们将使用构建 PetWall App 的过程来作为示例。这个示例将贯穿整个讲解过程。
PetWall 是一个用来展示宠物照片的小应用。
![1306450-2d6d4e8cc805e299.png](https://upload-images.jianshu.io/upload_images/1306450-2d6d4e8cc805e299.png)
构建系统
![1306450-ffe14cb6f397c006.png](https://upload-images.jianshu.io/upload_images/1306450-ffe14cb6f397c006.png)
让我们先来理解什么是构建过程以及构建过程在 Xcode 中构建像 PetWall 这种典型应用时是如何运作的。
你可以看到项目中有 app target、 一个 framework 、以及用 Swift 和 Objective-C 编写的源代码。或许这看起来就像你自己的项目。
![1306450-f88517e93404b76d.png](https://upload-images.jianshu.io/upload_images/1306450-f88517e93404b76d.png)
你需要编译、链接源代码,还需要复制和处理资源文件,比如:头文件,assets 还有 storyboards。最后还需要对代码进行签名,甚至还要用脚本来做一些自定义的工作,或者为项目构建文档,执行代码检查工具等。
![1306450-dcb109aaf77bbaed.png](https://upload-images.jianshu.io/upload_images/1306450-dcb109aaf77bbaed.png)
现在,很多构建过程中的工作都需要通过命令行工具来完成。
比如:Clang, LD, AC 工具, IB 工具, 代码签名 等等。