Links

06.源代码到IPA

  • 进行编译
  • 生成DSYM文件
    • 储存了16进制的函数地址映射
    • 崩溃日志中的地址通过此文件由地址映射到具体的函数位置

1. 编译

Clang + LLVM
把源代码转换为更为地址的LLVM IR(Intermedia Represention) LLVM根据上面转换的IR进行二进制文件的产出
  • 预处理
    • 处理源文件中的宏定义,将代码中的宏用对应的定义的具体内容进行替换
  • 便已生成IR(中间代码)
  • 汇编器生成汇编代码
  • 生成机器码
  • 链接
  • 生成Image,也就是最后的可执行文件

2. 每次Command+B发生的事情(基于CocoaPod时)

  • 编译信息写入辅助文件,创建.app文件
  • 处理文件打包信息
  • 执行CocoaPod编译前脚本,checkPods Manifest.lock
  • 编译.m文件,使用CompileC和clang命令
  • 链接需要的Framework
  • 编译xib
  • 拷贝xib,资源文件
  • 编译ImageAssets
  • 处理Info.plist
  • 执行CocoaPod脚本
    • Run custom shell script 'Embed Pods Frameworks'
    • Run custom shell script 'Copy Pods Resources'
  • 拷贝标准库
  • 创建.app文件和签名

参考