编译 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)