KCObjc4 debug
🌈可编译苹果官方源码objc!现在有objc4底层源码,以及libmalloc等可编译版本,大家可以自由LLDB调试!
------- > 🆕 2022年11月21日更新 `libmalloc-409.40.6可编译` > > 环境: `macOS 13.0 Xcode 14.1` ------- > 🆕 2022年11月7日更新 `objc4-866.9` > > 环境: `macOS 13.0 Xcode 14.1` The project is written primarily in C, distributed under the MIT License license, first published in 2019. It has gained significant community traction with 1,009 stars and 315 forks on GitHub. Key topics include: apple-source, libmalloc, libobjc, malloc, objc.
KCObjc_debug
可编译苹果官方源码 objc!可编译源码,LLDB调试,方便大家探索学习!

🆕 2022年11月21日更新
libmalloc-409.40.6可编译环境:
macOS 13.0 Xcode 14.1
🆕 2022年11月7日更新
objc4-866.9环境:
macOS 13.0 Xcode 14.1
🆕 2022年2月25 更新
objc4-838可编译源码环境:
macOS 12.1 Xcode 13.2
⚠️ 2021年4月26号更新 编译调试成功
libmalloc-317.40.8方便进行objc下层申请开辟内存情况调试⚠️ 2021年1月5号更新: 在苹果系统
bigSur(macOS 11)xcode 12.2源码编译报错的问题解决! 大家及时更新源码objc4-818.2

很多小伙伴在探索底层的时候经常很苦恼,只能靠猜测!稍微灵活一点的小伙伴会通过
Apple提供的源码来辅助看一下,但是很显然这不太直观!如果能够直接编译调试,像我们自己的代码直接 LLDB 调试,流程跟踪。那简直不要太爽,于是我编译了现在最新的objc4-源码
准备工作
如果想先来体验一把的小伙伴可以直接 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.
解决: 将
objc和objc-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 source 在
xnu-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 - 或者下载我给大家的文件
CrashReporterClient,这里面我们直接更改了里面的宏信息#define LIBC_NO_LIBCRASHREPORTERCLIENT
dyld_priv 文件修改
GitHub 源码 这是修改过的!下面板书我修改了什么
报错:Use of undeclared identifier ‘DYLD_MACOSX_VERSION_10_13
在 dyld_priv.h 文件顶部加入一下宏:
objc#define DYLD_MACOSX_VERSION_10_11 0x000A0B00 #define DYLD_MACOSX_VERSION_10_12 0x000A0C00 #define DYLD_MACOSX_VERSION_10_13 0x000A0D00 #define DYLD_MACOSX_VERSION_10_14 0x000A0E00
libobjc.order 路径问题
Can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order
- 选择
target->objc->Build Settings - 在工程的
Order File中添加搜索路径$(SRCROOT)/libobjc.order
lCrashReporterClient 编译不到
Library not found for -lCrashReporterClient
- 选择
target->objc->Build Settings - 在
Other Linker Flags中删除-lCrashReporterClient(Debug和Release都删了)
_objc_opt_class 无法编译
Undefined symbol: _objc_opt_class
这个问题是因为要适配新系统:MacOS 10.15, 因为现在笔者写这一篇文章的时候,还没有正式版本推送!这里我们向下兼容 MacOS 10.14
Xcode 脚本编译问题
/xcodebuild:1:1: SDK "macosx.internal" cannot be located.
/xcrun:1:1: sh -c '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk macosx.internal -find clang++ 2> /dev/null' failed with exit code 16384: (null) (errno=No such file or directory)
/xcrun:1:1: unable to find utility "clang++", not a developer tool or in PATH
- 选择
target->objc->Build Phases->Run Script(markgc) - 把脚本文本
macosx.internal改成macosx
ObjectiveC.apinotes 异常
no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'
- 选择
target->objc->Build Settings Text-Based InstallAPI Verification Model中添加搜索路径Errors Only
Other Text-Based InstallAPI Flags清空所有内容
编译成功
接下来你可以编译 - Build Succeeded - 恭喜你!💐
可能到这里你已经老血吐了一地了!的确配置过程还是相对来说有点恶心,尤其是文件的查漏补缺,但是我们享受编译成功的喜悦吧!
objc 编译调试
- 新建一个
Target: LGTest
- 绑定二进制依赖关系
- 运行代码进入源码,大家可以自由编译调试咯!
总结
iOS 现在更多的会偏向底层开发研究,可调式编译的 objc4 源码能够帮助更快速学习和更容易理解!博客持续更新中,谢谢大家的关注点赞!Thanks♪(・ω・)ノ
更多博客请关注:Cooci 掘金博客地址
Contributors
Showing top 1 contributor by commit count.

