Objective-C Runtime

From Build To Did Launch

Subjects

  • Build, Compile & Archive

  • objc4 源码研读

  • Runtime 应用场景

Objective-C 语言

         Objective-C是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言,将Smalltalk式的消息传递机制加入到ANSI C中。目前主要支持的编译器有GCC和Clang(采用LLVM作为前端)。

Build Project

  • Compile

  • Link

  • Code Sign

Compiler

  • Clang(发音为/ˈklæŋ/) 是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端,采用了底层虚拟机(LLVM)作为其后端。
  • GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU项目的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。

预处理  Preprocessor

  • 标记化 (Tokenization)
  • 宏定义的展开
  • #include 的展开

词法预处理

语法和语义分析 Syntactic analysis

  • 将符号化后的内容转化为一棵解析树 (parse tree)
  • 解析树做语义分析
  • 输出一棵抽象语法树(Abstract Syntax Tree* (AST))

生成代码和优化

  • 将 AST 转换为更低级的中间码 (LLVM IR)
  • 对生成的中间码做优化
  • 生成特定目标代码
  • 输出汇编代码

汇编器 Assembler

  • 将汇编代码转换为目标对象文件 object code

链接器 Linker

将多个目标对象文件合并为一个可执行文件 (或者一个动态库)

dydl

https://github.com/opensource-apple/dyld

ImageLoader

Mach-O

        Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。

Mach-O 结构

Mach-O

Mach-O head

(__Text,__text) section

Archive

  • xcodebuild -project Hello.xcodeproj -target Hello -configuration Release
  • xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/TestImg.app -o ~/Desktop/TestImg.ipa
  • fastlane & Gym

objc4 open source

https://opensource.apple.com/tarballs/objc4/

Instance Object & Class Object

Method

Cache

getLoadMethod

class_getInstanceMethod

_class_getMethod

method_exchangeImplementations

class_addMethod

objc_msgSend

应用场景

  • AOP
  • 动态埋点
  • APM 

Thanks !