编译 objc4-866.9 源码
编译环境
- macOS Ventura 13.3
 - Xcode 14.3
 - Apple M2 Pro
 
如果环境大体相同可用我已整理好的工程:objc4-866.9 源码编译
源码下载
建议到 Apple Open Source 下载对应版本的包,此处指列出本机环境所需要的包
- objc4-866.9
 - dyld-1042.1
 - Libc-1534.81.1
 - Libc-825.40.1
 - libclosure-84
 - libdispatch-1412
 - libplatform-288
 - libpthread-514
 - xnu-8792.81.2
 
工程修改
我们在 objc4 工程目录下新建一个 include 文件夹,用来存放修复编译问题的头文件。
修改脚本
修改 objc target 的 Run Script (markgc) 脚本,将 macosx.internal 改成 macosx:
修改Base SDK
在 Project -> build setting -> Base SDK,选择 macOS:
修改编译目标
设置 Header Search Paths
将我们刚才创建的 include 文件夹路径添加到 Header Search Paths 中
编译 objc 并修复错误
有关错误修复可查看这两篇文章,需要修复的错误有点多,这里不再罗列,只添加这两篇文章中没有的问题修复。
- iOS objc4-838编译流程,可在macOS Monterey运行
 - objc4-841.13可调试/编译源码更新(for M1)
 
‘sandbox/private.h’ file not found
错误如图,直接注释掉 #include <sandbox/private.h> 即可。
Use of undeclared identifier ‘SANDBOX_FILTER_PATH’
注释掉 #include <sandbox/private.h> 再编译会遇到如下错误:
解决方式同样是直接注释掉相关代码,如下图:
或者注释掉这个方法体也可。
创建调试 target
进行完上面的错误修复后,我们就可以创建一个用于调试的 target。如下图,我们创建一个 macOS 的命令行 target。
添加依赖和动态库
修复断点不走问题
设置 Enable Hardened Runtime 为 NO
在 Build Phases 的 Compile Sources 中,将 main.m 拖到最前面
参考文档:
Open Source at Apple
iOS objc4-838编译流程,可在macOS Monterey运行
objc4-841.13可调试/编译源码更新(for M1)