不管是OC还是Swift,都是采用Clang作为编译器前端,LLVM(Low level vritual machine)作为编译器后端;
编译器前端的任务是进行:语法分析,语义分析,生成中间代码(intermediate representation )。在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行。
编译器后端会进行机器无关的代码优化,生成机器语言,并且进行机器相关的代码优化
执行一次XCode build的流程
- 编译信息写入辅助文件,创建编译后的文件架构(name.app)
- 处理文件打包信息,例如在debug环境下
- 执行CocoaPod编译前脚本 ,例如对于使用CocoaPod的工程会执行
CheckPods Manifest.lock
- 编译各个.m文件,使用
CompileC
和clang
命令。 - 链接需要的Framework,例如
Foundation.framework
,AFNetworking.framework
,ALiPay.fframework
- 编译xib文件
- 拷贝xib,图片等资源文件到结果目录
- 编译ImageAssets
- 处理info.plist
- 执行CocoaPod脚本
- 拷贝Swift标准库
- 创建.app文件和对其签名