Runtime 开篇

可编译版本

objc-709

前言

从源码的角度分析、学习iOS Runtime,这是第一篇,介绍编译和调试 Runtime源码

下载源码

下载

前往源码地址下载最新的Runtime源码,本文使用的是

Runtime 开篇_第1张图片
objc4-709版本

解压

双击下载好的obc4-709.tar.gz解压得到如下图的文件

Runtime 开篇_第2张图片

双击打开 objc.xcodeproj

Runtime 开篇_第3张图片

创建调试Target

创建target

创建一个 command line target 命名为 objc-debug

Runtime 开篇_第4张图片

添加依赖

将静态库工程objc添加为objc-debug的依赖,并在Link Binary With Libraries中添加libobjc.A.dylib

Runtime 开篇_第5张图片

编译

cmd+B编译,出现编译错误sys/reason.h

Runtime 开篇_第6张图片

创建头像文件目录

objc4-709目录中创建include目录,并在objc-debugobjc的Target中。Build Settings>Search Paths>Header Search Paths 添加 $(SRCROOT)/include

Runtime 开篇_第7张图片

下载缺失头文件

使用Google搜索reason.h site:opensource.apple.com,百度不行。由于reason.hsys目录下,所以在include目录中创建sys目录,并将reason.h放入sys目录中,重新编译。

以同样的方式下载并添加到include目录中,继续编译

以同样的方式下载并添加到include目录中,继续编译

以同样的方式下载并添加到include目录中,继续编译

把所有需要的头文件都加入include目录中。

修改部份头文件中的定义

修改CrashReporterClient.h 添加 #define LIBC_NO_LIBCRASHREPORTERCLIENT

修改objc-os.h#include "objc-config.h"下面添加#include

编译出现以下错误

Order File中添加$(SRCROOT)/libobjc.order

Runtime 开篇_第8张图片

继续编译出现以下错误

解决方式是在Other Linker Flags中删除-lCrashReporterClient

Runtime 开篇_第9张图片

编译成功

调试

通过修改部份代码,调整设置终于可以调试了。在NSObject.mm中添加如下断点。

Runtime 开篇_第10张图片

结语

通过一系列的调整,就可以调试runtime源码了。

你可能感兴趣的:(Runtime 开篇)