须知:
- 最开始部分是讲述整个配置 OBJC4-750.1 的整个过程
- 使用简单的例子来讲述,配合源码对项目就行调试
首先,我们需要下载 OBJC4 的源码
image- 我们点击最新的 10.14.1 加入下载源码界面(这里的源码比较多,你可以使用 Command + F )就行搜索,界面将会出来你想要的 objc4-750.1
此时你可以点击右边的下载,即可下载源码包。
或者你也可以点击进入
此时地址为:https://opensource.apple.com/source/objc4/objc4-750.1/
界面如下:
- 如果你想要查找所以的历史版本,那么只需要更改地址为
https://opensource.apple.com/source/objc4/
这样就可以出现历史版本的列表。
image- 如果你需要下载,各个版本的压缩包,你可以改变地址为
https://opensource.apple.com/tarballs/objc4/
把 Source
改成 tarballs
即可看到所有历史版本的列表
以上就是下载的整个过程。
下面我们来配置 OBJC4-750.1 的源码
-
接下来,我们打开项目,下载的初始项目是这样的。
image -
编译一下。它会提示我们
“Remove” i386 架构模式。
-
去掉 i386 架构的步骤
image -
然后提示我们少了
sys/reason.h
上网找了好久,终于在
https://opensource.apple.com/source/xnu/xnu-3789.21.4/bsd/sys/reason.h.auto.html
找到了文件
手动保存一下,命名为:reason.h
第五步输入为: $(SRCROOT)/CommondHeader 指向reason.h 所在地址
然后当你编译时,还有会有很多错误。我们依依按照这种方法来搞定。
- 接下来是
mach-o/dyld_priv.h
,我们依旧按照之前的方式来搞定。
- 搜索 mach-o/dyld_priv.h ,找到地址(https://opensource.apple.com/source/dyld/dyld-195.5/include/mach-o/dyld_priv.h.auto.html)
下载命名为:dyld_priv.h - 接下来是
lock_private.h
,下载地址(https://opensource.apple.com/source/libplatform/libplatform-125/include/os/lock_private.h.auto.html),
下载命名为:lock_private.h
- 接下来是
base_private.h
tsd_private.h
接下来是函数找不到,只需要去
Build Setting -> preprocessor Macros 加入
LIBC_NO_LIBCRASHREPORTERCLIENT
- 接下来编译会出现
ld: warning: -F path '/Users/kare/OC/OpenSource/objc4-750.1/libobjc.order' is not a directory
ld: can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/AppleInternal/OrderFiles/libobjc.order
image
- 然后是
ld: warning: -F path '/Users/kare/OC/OpenSource/objc4-750.1/libobjc.order' is not a directory
ld: library not found for -lCrashReporterClient
那么去 Build Setting 搜索 lCrashReporterClient
删除即可.
- 接下来是
最终是
set -x
/usr/bin/xcrun -sdk macosx clang++ -Wall -mmacosx-version-min=10.12 -arch x86_64 -std=c++11 "{BUILT_PRODUCTS_DIR}/markgc"
"{BUILT_PRODUCTS_DIR}/libobjc.A.dylib"
- 接上
error: no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'
image
把这里设置为 Errors Only
但是还会报这个错误
image暴力解法,直接把这里的东西全部删除掉。再编译,就可以成功了。
过程很漫长,但是还是很有意思的。
然后就是简历 target,使用源码调试了。
比如想看class_copyIvarList
内部实现,直接点击进入就好了哟。
快来试试吧,有源码,就直接怼个窟窿。不服就干。
另外,提供一份已经配置好的 Objc-750.1
可编译的源码。
网友评论