iOS底层原理:苹果开源 objc4-818 源码项目的编译和调试(二)

简介: 作为一名iOS程序员,探索OC底层原理永不止息,同时也是永远的痛,最开始只能靠猜测!后面慢慢找到了苹果官方开源的源码来辅助看一下,但是尽管这样,还是显得不太直观!如果objc源码能够像我们自己创建的项目一样直接编译调试,像我们自己的代码一样能够直接 LLDB 调试,流程跟踪,那简直不要太爽。废话不多说,开炮~ 哦,不是,是开干~!🚀
报错9:'os/tsd.h' file not found


同样是找到文件位置,tsd.h文件在xnu-7195.141.2/libsyscall/os目录下

解决方式:


  1. tsd.hxnu-7195.141.2/libsyscall/os目录下copy到JQDependencies/os/目录下
报错10:'System/pthread_machdep.h' file not found

同样是找到文件位置,pthread_machdep.h文件在Libc-825.40.1/pthreads目录下。

注意:经过一番探索,我发现pthread_machdep.h只在Libc-825.40.1及以下版本才有


image.png

解决方式:


  1. pthread_machdep.hLibc-825.40.1/pthreads目录下copy到JQDependencies/System/目录下


报错11:'CrashReporterClient.h' file not found


同样是找到文件位置,CrashReporterClient.h文件在Libc-825.40.1/include目录下。


解决方式:

  1. CrashReporterClient.hLibc-825.40.1/include目录下copy到JQDependencies/目录下


image.png


导入CrashReporterClient.h文件后,如果还报错,用以下两种方式解决:

  • 第一种:需要在 Build Settings -> Preprocessor Macros 中加入:LIBC_NO_LIBCRASHREPORTERCLIENT


image.png

第二种:在CrashReporterClient.h中添加如下宏定义

image.png


报错12:Typedef redefinition with different types ('int' vs 'volatile OSSpinLock' (aka 'volatile int'))

pthread_lock_t重复定义了

解决方式:

  • 注释掉 在*pthread_machdep.h文件中的定义


image.png

报错13:


Static declaration of '_pthread_has_direct_tsd' follows non-static declaration
和 Static declaration of '_pthread_getspecific_direct' follows non-static declaration

解决方式:

  • 把这些声明在*pthread_machdep.h文件中注释掉就行

image.png

报错14:/JQDependencies/os/lock_private.h:288:37: Expected ','


image.png

解决方式:


  • 把这个函数中的bridgeos(4.0)参数删除即可
报错15:Use of undeclared identifier 'dyld_fall_2020_os_versions'

** 解决方式:**

  • 注释掉就行



image.png


报错16:'objc-shared-cache.h' file not found


同样是找到文件位置,objc-shared-cache.h文件在dyld-852.2/include目录下。


解决方式:


  1. objc-shared-cache.hdyld-852.2/include目录下copy到JQDependencies/目录下
报错17:'objc-bp-assist.h' file not found

解决方式:


  • 注释掉objc-bp-assist.h这个文件的引用
报错18:Use of undeclared identifier 'dyld_platform_version_macOS_10_13'

解决方式:


  • 注释掉该段代码


image.png

报错19:Use of undeclared identifier 'dyld_platform_version_macOS_10_11'

解决方式:

  • 注释掉该段代码

image.png


报错20:Use of undeclared identifier 'dyld_fall_2018_os_versions'

解决方式:


  • 注释掉该段代码


image.png


image.png

报错21:'_simple.h' file not found


同样是找到文件位置,_simple.h'文件在libplatform-libplatform-220.100.1/private目录下。

解决方式:


  1. _simple.hlibplatform-libplatform-220.100.1/private目录下copy到JQDependencies/目录下
报错22:'os/linker_set.h' file not found

同样是找到文件位置,linker_set.h'文件在xnu-7195.141.2/bsd/sys目录下。

解决方式:

  1. linker_set.hxnu-7195.141.2/bsd/sys目录下copy到JQDependencies/os目录下
报错23:'Cambria/Traps.h' file not found

解决方式:


  • 文件开源网站找不到 ,选择注释头文件引用


image.png


报错24:'Block_private.h' file not foun


同样是文件缺失,Block_private.h这个文件在

libclosure-79/目录下


解决方式:


  1. Block_private.hlibclosure-79/目录下copy到JQDependencies/目录下
报错25:'kern/restartable.h' file not found

同样是文件缺失,restartable.h这个文件在

xnu-7195.141.2/osfmk/kern/目录下

解决方式:


  1. JQDependencies/目录下创建一个kern文件夹
  2. restartable.hxnu-7195.141.2/osfmk/kern/目录下copy到JQDependencies/kern/目录下


报错26:**Use of undeclared identifier 'oah_is_current_process_translated' 和

Use of undeclared identifier 'objc_thread_get_rip'**


image.png

解决方式:


  • objc_cache.mm文件中注释掉1121-1128行,保留1127行,如图:

image.png


报错27:'os/feature_private.h' file not found

解决方式:


  • 这个引用头文件直接注释掉

image.png

报错28:'os/reason_private.h' file not found

同样是文件缺失,reason_private.h这个文件在

xnu-7195.141.2/libkern/os/目录下


解决方式:


  1. reason_private.hxnu-7195.141.2/libkern/os/目录下copy到JQDependencies/os/目录下



相关文章
|
7月前
|
jenkins Unix 持续交付
个人记录jenkins编译ios过程 xcode是9.4.1
个人记录jenkins编译ios过程 xcode是9.4.1
102 2
|
7月前
|
iOS开发 开发者
【教程】苹果 iOS 证书制作教程
【教程】苹果 iOS 证书制作教程
|
7月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
92 0
|
5月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
159 3
|
4月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
28天前
|
存储 人工智能 安全
【通义】AI视界|苹果停止签署iOS 18.0.1,升级用户无法降级
本文由通义自动生成,涵盖24小时内精选的五条科技资讯:奥特曼谈OpenAI未来发展方向,ChatGPT新搜索功能上线遇故障,Perplexity AI选举搜索面临挑战,马斯克谈特斯拉造手机的可能性,以及苹果停止签署iOS 18.0.1。更多精彩内容,欢迎访问通通知道。
|
2月前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
59 5
|
4月前
|
iOS开发
IOS编译出现Command PhaseScriptExecution failed with a nonzero exit code
IOS编译出现Command PhaseScriptExecution failed with a nonzero exit code
294 2
|
4月前
|
iOS开发
IOS编译报错‘ZipArchive.h‘ file not found|Use of undeclared identifier ‘SSZipArchive‘
IOS编译报错‘ZipArchive.h‘ file not found|Use of undeclared identifier ‘SSZipArchive‘
66 1
|
5月前
|
人工智能 搜索推荐 iOS开发
苹果发布iOS 18 Beta 4,新增CarPlay 壁纸等多项功能改进
本文首发于公众号“AntDream”,探索iOS 18 Beta 4新功能与改进: CarPlay壁纸、iCloud设置访问优化、相机控制记忆、隐藏文件夹设计变更、深色/浅色模式图标同步、股票应用图标调整、iPhone镜像功能增强、控制中心蓝牙切换键、AssistiveTouch新增Type to Siri等,以及Apple Intelligence暗示。开发者可通过苹果计划提前体验。
104 12