1ca3f623bb872758445a540e9413bbb5
iOS_objc4-756.2 最新源码编译调试

本篇前言:很多小伙伴在探索底层的时候经常很苦恼,只能靠猜测!稍微灵活一点的小伙伴会通过 Apple 提供的源码来辅助看一下,但是很显然这不太直观!如果能够直接编译调试,像我们自己的代码直接 LLDB 调试,流程跟踪。那简直不要太爽,于是我编译了现在最新的iOS_objc4-756.2

一、准备工作

如果想先来体验一把的小伙伴可以直接 GitHub 源码 下载!

如果你也想亲自体验一把,请你准备条件:

  • mac OS 10.14
  • Xcode 10.1
  • objc4-756.2

以上资料都可以在 Apple source 获取到。

二、开始配置

i386 架构问题

首先你下载的iOS_objc4-756.2 直接编译会报错如下:

Showing Recent Messages
The i386 architecture is deprecated. You should update your ARCHS build setting to remove the i386 architecture.

解决: 将 objcobjc-trampolines 中的 Build Settings 选项 Architectures 中的值切换为 Standard Architectures(64-bit Intel)

文件查漏补缺

'sys/reason.h' file not found

这个资料我已经给大家找好了:

  • 大家可以通过 GitHub 源码 下载,路径在 objc-756.2编译资料/xnu-4903.241.1/bsd/sys/reason.h
  • 或者大家可以通过 Apple sourcexnu-4903.241.1/bsd/sys/reason.h 路径自行下载
  • 还可以通过谷歌中输入reason.h site:opensource.apple.com 定向检索

把找到的文件加入到工程里面。例如:

  • 我在根目录创建了一个 KCCommon 文件
  • 创建 sys 文件
  • reason.h 文件加入进去

目前还不行,一定给我们的工程设置文件检索路径

  • 选择 target -> objc -> Build Settings
  • 在工程的 Header Serach Paths 中添加搜索路径 $(SRCROOT)/KCCommon

'mach-o/dyld_priv.h' file not found

'os/lock_private.h' file not found

'os/base_private.h' file not found

'pthread/tsd_private.h' file not found

'System/machine/cpu_capabilities.h' file not found

'os/tsd.h' file not found

'pthread/spinlock_private.h' file not found

'System/pthread_machdep.h' file not found

'CrashReporterClient.h' file not found

'objc-shared-cache.h' file not found

'_simple.h' file not found

'Block_private.h' file not found

上面的报错情况处理方式都是和 'sys/reason.h' file not found 一样的解决

文件补漏情况如下图:

CrashReporterClient异常

我们如果直接导入 Apple source 下载的 CrashReporterClient 还是会报错:

'CrashReporterClient.h' file not found

解决:

  • 需要在 Build Settings -> Preprocessor Macros 中加入:LIBC_NO_LIBCRASHREPORTERCLIENT
top Created with Sketch.