iOS-objc4-781源码编译配置流程

前言

本文详细地讲述编译苹果源码objc4-781 的过程,过程中会有很多的报错问题,由于每个版本的报错问题可能不一致,所以仅仅针对objc4-781 版本。
文末附有下载链接,如果想要配置好的工程,直接下载即可。

当前环境 xcode 12.0 ;macos 10.15 ; objc4-781
注意:该源码仅支持在xcode 12.0以下(包括12.0)编译

去苹果开源网站找到缺失的文件reason.h,选择对应版本,然后按照这样的下载格式下载
路径:https://opensource.apple.com/source/xnu/
下载格式:https://opensource.apple.com/tarballs/xnu/xnu-6153.81.5.tar.gz


然后在根目录下创建一个文件夹,例如我这里创建一个文件夹LostFile,然后再嵌套一个子文件夹sys,把reason.h文件拷贝到sys里面,然后还要链接文件的搜索路径:Build Setting->Header Search Paths->添加$(SRCROOT)/LostFile

  • 运行,继续报错

    也是跟上面一样的报错,缺失文件,接下来还有一堆同样的缺失文件报错,所以我直接在这里放出所有缺失文件的下载地址供大家下载
    缺失文件目录整理如下

    文件寻找路径如下
    基路径:https://opensource.apple.com/tarballs/
Block_private.h // libclosure-76/Block_private.h
_simple.h // libplatform-220/private/_simple.h
restartable.h // xnu-6153.81.5/osfmk/kern/restartable.h
CrashReporterClient.h // Libc/Libc-825.40.1/include/CrashReporterClient.h
objc-shared-cache.h // dyld-750.6/include/objc-shared-cache.h
pthread_machdep.h // Libc/Libc-825.40.1/pthreads/pthread_machdep.h
cpu_capabilities.h // xnu-6153.81.5/osfmk/machine/cpu_capabilities.h
tsd_private.h // libpthread-416.40.3/private/tsd_private.h
spinlock_private.h // libpthread-416.40.3/private/spinlock_private.h
tsd.h // xnu-6153.81.5/libsyscall/os/tsd.h
lock_private.h // libplatform-220/private/os/lock_private.h
base_private.h // libplatform-220/private/os/base_private.h
dyld_priv.h // dyld-750.6/include/mach-o/dyld_priv.h
reason.h // xnu-6153.81.5/bsd/sys/reason.h

整个配置好的源码我已放上github,下载链接放在文末,其中缺失文件在
https://github.com/JimmyCJJ/objc4-781/tree/main/objc4-781/LostFile

  • mach-o/dyld-priv.h这个文件运行报错Expected ',',直接把报错的代码注释掉即可
  • lock_private编译报错Expected ',',解决方法:删掉报错的bridgeos(4.0)
  • pthread_machdep运行报错,一样注释掉(注意,一定要注释掉__inline__ static int,不然另外的文件会报错)
  • objc-os编译报错 注释掉
  • objc-errors编译报错
    解决方法:target -> Build Settings -> Preprocessor Macros Not Used In Precompiled He...添加LIBC_NO_LIBCRASHREPORTERCLIENT
  • 编译报错can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order
    解决方法:target -> Build Settings -> Order File
    更改为$(SRCROOT)/libobjc.order
  • 编译报错:Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_13'
    解决方法:在dyld_priv.h中添加下边代码:
#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
#define DYLD_MACOSX_VERSION_10_12 0x000A0C00
#define DYLD_MACOSX_VERSION_10_13 0x000A0D00
#define DYLD_MACOSX_VERSION_10_14 0x000A0E00
  • 编译报错:library not found for -lCrashReporterClient
    解决方法:target->BuildSettings->Other Linker Flags->Debug->删除lCrashReporterClient
  • 编译报错


解决方法:选择 target ->Build Phases -> Run Script(markgc)
把脚本文本 macosx.internal 改成 macosx

  • 编译通过

正式调试源码

  • 新增一个target项目
    Targets->"+"->macOS->Application->Command Line Tool->Next

  • 绑定二进制依赖关系


  • 前往刚刚创建的Target文件夹,创建一个Person类用于调试
  • 可能会遇到main.m文件中断点无效的问题,这时候需要到Targets->Build Phases->Compile Sources中把main.m移到第一位即可

配置好的源码下载链接
https://github.com/JimmyCJJ/objc4-781


参考文章
揭秘NSRuntime源码编译
iOS-底层原理 03:objc4-781 源码编译 & 调试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341