iOS_bookmark

OC底层原理-objc818源码编译

2021-01-18  本文已影响0人  卡布奇诺_95d2

objc818编译

一、准备工作

Xcode:Version 12.3
macOS:Version 10.15.7
objc源码:objc4-818.2.tar.gz

二、开始配置

使用Xcode打开解压后的objc源码。直接编译objc,此时需要修改Xcode提示的错误。

//将含有bridgeos(3.0)的代码注释
//extern dyld_platform_t dyld_get_base_platform(dyld_platform_t platform) __API_AVAILABLE(macos(10.14), iOS(12.0), watchos(5.0), tvos(12.0), bridgeos(3.0));
//修改后的代码
extern dyld_platform_t dyld_get_base_platform(dyld_platform_t platform) __API_AVAILABLE(macos(10.14), iOS(12.0), watchos(5.0), tvos(12.0));
//        if (!dyld_program_sdk_at_least(dyld_platform_version_macOS_10_13)) {
//            DisableInitializeForkSafety = true;
//            if (PrintInitializing) {
//                _objc_inform("INITIALIZE: disabling +initialize fork "
//                             "safety enforcement because the app is "
//                             "too old.)");
//            }
//        }
//#if TARGET_OS_OSX
//        if (oah_is_current_process_translated()) {
//            kern_return_t ret = objc_thread_get_rip(threads[count], (uint64_t*)&pc);
//            if (ret != KERN_SUCCESS) {
//                pc = PC_SENTINEL;
//            }
//        } else {
//            pc = _get_pc_for_thread (threads[count]);
//        }
//#else
        pc = _get_pc_for_thread (threads[count]);
//#endif

至此,已经能完全编译成功了。

三、开始调试

注意:如果经过1、2步无法断点到源码中,需要完成以下两步:
* 找到“HQObjc -> Build Setting -> Enable Hardended Runtime”,将其设置为“NO”。
* 确保编译的源文件中,“main.m”处于第一位。

最终编译通过的源码路径为:objc4-818可编译源码

上一篇下一篇

猜你喜欢

热点阅读