最近在尝试编译 objc 的源码,碰到的问题记录。
编译源码的过程,大致分为两步:
1.编译通过 objc
target
1.添加一些源文件,在官网提供的其他源代码包里找,然后在
header search paths
里添加这些 源文件的路径即可
2.源代码的一些改动,比如添加一些宏定义,注释一些条件判断等等
网上有很多很详细的教程,举个 参考
https://juejin.cn/post/7042624465175314445
2.编译自己创建的 target
1.build phases -> dependencies 添加
objc
的依赖
- build settings ->enable harden runtime -> NO(其实此为默认值,不知道为什么教程都强调这一点)
注意,坑来了
常规的坑:
1.编译自己的 target 成功以后,出现了打在自己的 target里的断点断不住的问题,
修改 compile sources ,把 main.m 提到最上面,解决
2.打在源码里的断点断不住的问题,要在自己的 target 里面添加objc
的依赖
但是我在添加了objc
依赖的情况下,依然断不住源码里的断点,改了enable harden runtime 为 NO 也是不行
测了半天,把自己target的 macOS Deployment Target
改成macOS 10.12,成功断住了源码
原因猜测:是与xxCommon/mach/dyld_priv.h新添加的宏定义有关,只有10_11~10_14,而我当前的Xcode12.5.1 创建的命令行项目,该项默认设置了macOS 11.3