- 找到苹果源码网址:https://opensource.apple.com/
![](https://img.haomeiwen.com/i2099539/d67c2d305b5b6b04.png)
-
找到objc4点击下载
QQ20201202-094343.png
3.下载一些依赖的文件
QQ20201202-104952@2x.png
其中除了launchd-842.92.1
需要在Mac OSX 10.9.5中下载,其它均可在最新的里面下载到 -
下载解压打开objc.xcodeproj,编译一下发现报错
错误一:unable to find sdk 'macosx.internal'
QQ20201202-095408@2x.png
![](https://img.haomeiwen.com/i2099539/20209a5b35db59cf.png)
![](https://img.haomeiwen.com/i2099539/35f873c4e6add45b.png)
解决:Build Settings中搜索macosx.internal
,选择macOS
错误二:sys/reson.h
file not found
![](https://img.haomeiwen.com/i2099539/285f7e1e42169c44.png)
解决:首先在objc4-787.1
根目录下创建ZKCommon文件,同时在ZKCommon文件中创建sys
文件,在事先下载的xnu-6153.141.1/bsd/sys/reason.h
把reason.h拷贝到我们自己创建的ZKCommon/sys/
中
![](https://img.haomeiwen.com/i2099539/91e88c740006e588.png)
选择
target -> objc -> Build Settings
找到Header Serach Paths
添加路径$(SRCROOT)/ZKCommon
![](https://img.haomeiwen.com/i2099539/3f822b6419656630.png)
错误三:mach-o/dyld_priv.h
file not found
![](https://img.haomeiwen.com/i2099539/29ebf6825cd1fa58.png)
解决:在ZKCommon文件中创建mach-o
文件 dyld-750.6/include/mach-o/dyld_priv.h
拷贝到自己创建的ZKCommon/mach-o
中
![](https://img.haomeiwen.com/i2099539/c9698bc5b7b1108e.png)
拷贝后还要修改
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
错误四:os/lock_private.h
file not found
![](https://img.haomeiwen.com/i2099539/e7bca56293b76687.png)
解决:在ZKCommon文件中创建os
文件,libplatform-220.100.1/private/os/lock_private.h
, libplatform-220.100.1/private/os/base_private.h
2个都拷贝到os文件中
![](https://img.haomeiwen.com/i2099539/11f0fcfe04f4072b.png)
错误五:bridgeos(3.0), bridgeos(4.0)
![](https://img.haomeiwen.com/i2099539/6884901abaad4aae.png)
解决:在
dyld_priv.h
文件中搜索bridgeson(3.0)
删除(可以用空格全部代替)在
lock_private.h
文件中搜索bridgeos(4.0)
删除
错误六:pthread/tsd_private.h
file not found
pthread/spinlock_private.h
file not found
![](https://img.haomeiwen.com/i2099539/963601de79aed957.png)
![](https://img.haomeiwen.com/i2099539/9e90cf709ad0c0cd.png)
解决:在ZKCommon
文件中创建pthread
文件,libpthread-416.100.3/private/tsd_private.h
, libpthread-416.100.3/private/spinlock_private,h
2个文件都拷贝到pthread
中
![](https://img.haomeiwen.com/i2099539/46988cc95803fa12.png)
错误七:System/machine/cpu_capabilities.h
file not found
![](https://img.haomeiwen.com/i2099539/d6917036c0e569e7.png)
解决:在
ZKCommon
中创建System
文件,再创建machine
文件,xnu-6753.141.1/osfmk/machine/cpu_capabilities.h
拷贝到创建的machine
文件夹中
![](https://img.haomeiwen.com/i2099539/a1d425ff27ed0839.png)
错误八:os/tsd.h
file not found
![](https://img.haomeiwen.com/i2099539/e43d8683bb65a497.png)
解决:
xnu-6153.141.1/libsyscall/os/tsd.h
复制到先前ZKCommon
中创建的os
文件中![](https://img.haomeiwen.com/i2099539/3c9bb98c5bc80f53.png)
错误九:System/pthread_machdep.h
file not found
![](https://img.haomeiwen.com/i2099539/0f9d5e8bdabcd975.png)
解决:https://opensource.apple.com/tarballs/Libc/ 下载Libc-583
版本,Libc-583/pthreads/pthread_machdep.h
文件拷贝到ZKCommon/System/
中
![](https://img.haomeiwen.com/i2099539/802eb12c648e0595.png)
错误十:CrashReporterClient.h
file not found
![](https://img.haomeiwen.com/i2099539/172d74c307f7cf3f.png)
![](https://img.haomeiwen.com/i2099539/3b64e10b36bfa9e7.png)
解决:https://opensource.apple.com/tarballs/Libc/ 下载Libc-825,24
版本 Libc-825.24/include/CrashReporterClient.h
拷贝到ZKCommon/
中
如果还是报错需要Build Settings -> Preprocessor Macros
加入:LIBC_NO_LIBCRASHREPORTERCLIENT
![](https://img.haomeiwen.com/i2099539/231ea6068cdfd818.png)
错误十一:kern/restartable.h
file not found
![](https://img.haomeiwen.com/i2099539/322dc6905724314a.png)
解决:在ZKCommon
中创建kern
文件,xnu-6153.141.1/osfmk/kern/restartable.h
拷贝到ZKCommon/kern/
中
![](https://img.haomeiwen.com/i2099539/f036a9a593f3f85c.png)
错误十二:_simple.h
file not found
![](https://img.haomeiwen.com/i2099539/f4f0595bdb16c901.png)
解决:libplatform-220.100.1/private/_simple.h
拷贝到ZKCommon/
中
![](https://img.haomeiwen.com/i2099539/9d8fa0da3454638f.png)
错误十三:typedef int pthread_lock_t
inline static int _pthread_has_direct_tsd(void)
inline static void * _pthread_getspecific_direct(unsigned long slot)
![](https://img.haomeiwen.com/i2099539/463693b51d427580.png)
解决:注释掉报错的地方不要有漏掉地方
错误十四:mismatch in debug-ness macros
![](https://img.haomeiwen.com/i2099539/4af038a8728a9076.png)
解决:注释掉objc-runtime.mm
中的#error mismatch in debug-ness macros
即可
错误十五:objc-shared-cache.h
file not found
![](https://img.haomeiwen.com/i2099539/72224e251a0ab16b.png)
解决:将dyld-750.6/include/objc-shared-cache,h
拷贝到ZKCommon/
中
![](https://img.haomeiwen.com/i2099539/cf5ab1e839b1ca9f.png)
错误十六:Block_prrivate.h
file not found
![](https://img.haomeiwen.com/i2099539/221a45c3da5994cc.png)
解决:libclosure-74/Block_private.h
拷贝到ZKCommon/
中
![](https://img.haomeiwen.com/i2099539/15b16cd8272d2ca8.png)
错误十七:can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/AppleInternal/OrderFiles/libobjc.order
路径问题
![](https://img.haomeiwen.com/i2099539/5f31c06f31b742a3.png)
解决:target -> objc -> Build Settings
Order File
添加搜索路径$(SRCROOT)/libobjc.order
错误十八:library not found for -lCrashReporterClient
![](https://img.haomeiwen.com/i2099539/539e3caa3b79adb7.png)
解决:TARGETS -> objc -> Build Settings
搜索Other Linker Flags
找到lCrashReporterClient
删除掉
![](https://img.haomeiwen.com/i2099539/ac6cf6df0ffcace8.png)
错误十九:objc-runtime-new.h
static_assert(bucketsMask >= MACH_VM_MAX_ADDRESS, "Bucket field doesn't have enough bits for arbitrary pointers.")
STATIC_ASSERT((~ISA_MASK & MACH_VM_MAX_ADDRESS) == 0 ||
ISA_MASK + sizeof(void*) == MACH_VM_MAX_ADDRESS);
![](https://img.haomeiwen.com/i2099539/c8d810ac3cc8027e.png)
![](https://img.haomeiwen.com/i2099539/3bd322aa63bdbdb3.png)
解决:断言错误,网上找了好久没有找到解决办法,最后只能注释掉了,查看以前老的版本没有发现这个错误,有知道解决办法的可以留言告诉我一下
错误二十:shell脚本问题
![](https://img.haomeiwen.com/i2099539/1ebdb801af792a7e.png)
解决:targets -> Build Phases -> Run Script
中 macosx.internal
改成macosx
![](https://img.haomeiwen.com/i2099539/cbe239e9cdc09b6c.png)
到这里我把报错都解决了
![](https://img.haomeiwen.com/i2099539/5784fb553169a0f8.png)
5.创建TestDemo
![](https://img.haomeiwen.com/i2099539/667513e8d0cef138.png)
![](https://img.haomeiwen.com/i2099539/858ee5541674344c.png)
![](https://img.haomeiwen.com/i2099539/0a6ecae306b0d521.png)
给TestDemo绑定依赖关系,TestDemo -> Build Phases -> Dependencies
添加objc
![](https://img.haomeiwen.com/i2099539/1cec9bcb9ecba14f.png)
![](https://img.haomeiwen.com/i2099539/b448b4678919b0a1.png)
给TestDemo添加库,TestDemo -> Build Phases -> Link Binary With Libraries
添加libobjc.A.dylib
![](https://img.haomeiwen.com/i2099539/cac8b41d3ea5d0c3.png)
![](https://img.haomeiwen.com/i2099539/e34e69bd99cd6f5a.png)
6.开始调试了
![](https://img.haomeiwen.com/i2099539/33dd1f80a7e846d8.png)
打印了Hello,World!
,成功运行
![](https://img.haomeiwen.com/i2099539/9f35ffdee77899c7.png)
7.接下来就可以各种调试了,创建Person
![](https://img.haomeiwen.com/i2099539/22358eef47bc319b.png)
8.我们打断点调试发现断点无效
![](https://img.haomeiwen.com/i2099539/aa14483e27e395b6.png)
解决办法:TestDemo -> Build Phases -> Compile Sources
中 main.m
拖到最上面
![](https://img.haomeiwen.com/i2099539/d6bdabadfc16061f.png)
![](https://img.haomeiwen.com/i2099539/da24228eab28863f.png)
- 结束,虽然解决办法是在网上搜的,但也算是自己重头到尾做了一遍。
参考:
https://www.jianshu.com/p/d2f589e3e1ef
https://www.jianshu.com/p/3db5d0bde015
网友评论