不同的 Mac 版别对应的可调试 Runtime 版别或许会不一样,这会导致你从网上下载别人编译调试好的 Runtime 源码在你的电脑上却无法正常调试。
所以,我收集并整理了一些不同版别已经编译调试的 Runtime 源码。
你要做的,便是对照下面的表格,找到你的电脑系统对应的 Runtime 版别,然后下载即可。
macOS | Runtime 版别 |
---|---|
14.0 ~ 14.1 | objc4-906 |
13.0 ~ 13.5 | objc4-866.9 |
12.3 ~< 13.0 | objc4-841.13 |
~ 表明左右都包含。例如 13.0 ~ 13.5 表明 13.0 至 13.1 而且包含 13.0 和 13.1。
~< 表明仅包含左面的版别。例如 12.3 ~< 13.0 表明 12.3 至 13.0 而且包含 12.3 但不包含 13.0。
补充:
Mac 版别号一般包含三段数字,例如 14.1.1;不必管第3个数字,只需要关怀前2个数字,也便是说 14.1.1 正常情况下能够运用 14.1 对应的 Runtime 版别。
有时候系统版别与我列出的版别号稍微有点差异也没关系。例如我写的是 objc4-866.9 能在 13.0 ~ 13.5 上运转,但我实践测验发现,在 13.6.1 上也能运转。
由于时刻和精力原因,我不或许整理出一切的 Runtime 版别,如果没有你需要的那个版别,请创立一个 Issues,我会尽快处理。
或许,你也能够参考这篇文章自行编译调试:编译 objc4-866.9 源码,编译好后欢迎 Pull requests,这能够帮助到更多的人。
怎么下载
现在我运用分支来办理不同的 Runtime 版别,分支名便是 Runtime 的版别名,这种方式能够节约你的流量并加速你的下载速度,你能够只下载你需要的那个版别而不是把一切版别都下载下来。
假定你要下载 objc4-866.9 这个版别的 Runtime,你需要这样做:
git clone --branch objc4-866.9 https://gitee.com/internetWei/ObjCRuntimes.git --depth=1
--branch objc4-866.9
用于指定你要下载的分支名;
--depth=1
表明你只需要下载这个分支的最后一次提交,留意,加了这个参数后 Git 就不会下载其它分支到本地了。
实践运用指令时,你只需要把 objc4-866.9 替换为你要下载的 Runtime 版别名就行了。
留意:如果你运用上面的指令下载了最后的一次提交的代码,这些代码或许会包含我写的一些注释,我只会往项目中增加注释,不会删去或调整项目中的原有代码,包含原来的注释;
这不会影响到你的正常调试,但如果你实在不想要这些注释的话;你需要下载该分支的初次提交,分支的初次提交能够经过标签获取,例如标签「v_objc4-866.9」记录的便是分支 objc4-866.9 的初次提交;或许你也能够经过观察注释信息得知哪次提交是初次提交,初次提交的 Git 提交信息是一个固定模板:编译调试 XXX 项目。
项目中我写的注释都会在注释后边增加一个标识符「:」以便区分,比方单行注释本来是
// ...
,我写的注释会是这样(留意//后边的:
)://: ...
;多行注释本来是/* ... */
,我的是这样:/*: ... */
。
运用办法
-
把代码下载到本地后,找到
objc.xcodeproj
并双击翻开。 -
挑选 Debug 这个 Scheme。
-
翻开 Debug 文件夹下的 main.m 文件。
-
这儿包含一个示例类 Person 以及一些示例代码,请在
+ (void)load
办法内打上断点,然后运转该项目。
之所以在 main 中创立 Person 而不是单独创立 Person 文件,完全是无法之举;由于如果创立了 Person 文件,就会导致 main.m 中的断点失效;
或许你知道能够经过调整 main.m 文件的编译次序在 Person 文件的前面,这样 main.m 文件的确能正常调试断点了,但 Person 文件中的断点又失效了。
现在我并没有找到更好的解决方案,也不清楚导致这个问题的详细原因;如果你知道详细原因或有更好的解决方案,请联系我的邮箱告知:internetwei@foxmail.com
- 观察函数调用栈,如果能看到如下调用次序(
不同版别的函数称号或许不一样
),则OK,反之,请创立一个 Issues。
0 +[Person load]
1 call_class_loads()
2 call_load_methods
3 load_images