美文网首页框架解析及底层iOS
下载objc4787.1源码并调试TestDemo项目

下载objc4787.1源码并调试TestDemo项目

作者: iOS虞 | 来源:发表于2020-12-03 10:59 被阅读0次
    1. 找到苹果源码网址:https://opensource.apple.com/
    QQ20201202-094028.png
    1. 找到objc4点击下载

      QQ20201202-094343.png
      3.下载一些依赖的文件
      QQ20201202-104952@2x.png
      其中除了launchd-842.92.1需要在Mac OSX 10.9.5中下载,其它均可在最新的里面下载到
    2. 下载解压打开objc.xcodeproj,编译一下发现报错
      错误一: unable to find sdk 'macosx.internal'

      QQ20201202-095408@2x.png
    QQ20201202-095801@2x.png QQ20201202-100307@2x.png

    解决:Build Settings中搜索macosx.internal,选择macOS

    错误二:sys/reson.hfile not found

    QQ20201202-101029@2x.png

    解决:首先在objc4-787.1根目录下创建ZKCommon文件,同时在ZKCommon文件中创建sys文件,在事先下载的xnu-6153.141.1/bsd/sys/reason.h把reason.h拷贝到我们自己创建的ZKCommon/sys/

    QQ20201202-110931@2x.png
    选择target -> objc -> Build Settings找到Header Serach Paths 添加路径$(SRCROOT)/ZKCommon QQ20201202-111252@2x.png

    错误三:mach-o/dyld_priv.hfile not found

    QQ20201202-111849@2x.png

    解决:在ZKCommon文件中创建mach-o文件 dyld-750.6/include/mach-o/dyld_priv.h拷贝到自己创建的ZKCommon/mach-o

    QQ20201202-113333@2x.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

    QQ20201202-121249@2x.png

    解决:在ZKCommon文件中创建os文件,libplatform-220.100.1/private/os/lock_private.h , libplatform-220.100.1/private/os/base_private.h 2个都拷贝到os文件中

    QQ20201202-122302@2x.png

    错误五:bridgeos(3.0), bridgeos(4.0)

    QQ20201202-122717@2x.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

    QQ20201202-123753@2x.png QQ20201202-145201@2x.png

    解决:在ZKCommon文件中创建pthread文件,libpthread-416.100.3/private/tsd_private.h, libpthread-416.100.3/private/spinlock_private,h 2个文件都拷贝到pthread

    QQ20201202-145615@2x.png

    错误七:System/machine/cpu_capabilities.h file not found

    QQ20201202-125129@2x.png
    解决:在ZKCommon中创建System文件,再创建machine文件,xnu-6753.141.1/osfmk/machine/cpu_capabilities.h拷贝到创建的machine文件夹中 QQ20201202-144925@2x.png

    错误八:os/tsd.h file not found

    QQ20201202-144227@2x.png
    解决:xnu-6153.141.1/libsyscall/os/tsd.h 复制到先前ZKCommon中创建的os文件中
    QQ20201202-145016@2x.png

    错误九:System/pthread_machdep.h file not found

    QQ20201202-145757@2x.png

    解决:https://opensource.apple.com/tarballs/Libc/ 下载Libc-583版本,Libc-583/pthreads/pthread_machdep.h文件拷贝到ZKCommon/System/

    QQ20201202-152218@2x.png

    错误十:CrashReporterClient.h file not found

    QQ20201202-152755@2x.png QQ20201202-154717@2x.png

    解决:https://opensource.apple.com/tarballs/Libc/ 下载Libc-825,24版本 Libc-825.24/include/CrashReporterClient.h 拷贝到ZKCommon/
    如果还是报错需要Build Settings -> Preprocessor Macros 加入:LIBC_NO_LIBCRASHREPORTERCLIENT

    QQ20201202-154033@2x.png

    错误十一:kern/restartable.h file not found

    QQ20201202-155122@2x.png

    解决:在ZKCommon中创建kern文件,xnu-6153.141.1/osfmk/kern/restartable.h 拷贝到ZKCommon/kern/

    QQ20201202-155702@2x.png

    错误十二:_simple.h file not found

    QQ20201202-160202@2x.png

    解决:libplatform-220.100.1/private/_simple.h 拷贝到ZKCommon/

    QQ20201202-160837@2x.png

    错误十三:typedef int pthread_lock_t
    inline static int _pthread_has_direct_tsd(void)
    inline static void * _pthread_getspecific_direct(unsigned long slot)

    QQ20201202-161711@2x.png

    解决:注释掉报错的地方不要有漏掉地方

    错误十四:mismatch in debug-ness macros

    QQ20201202-162751@2x.png

    解决:注释掉objc-runtime.mm中的#error mismatch in debug-ness macros即可

    错误十五:objc-shared-cache.h file not found

    QQ20201202-163155@2x.png

    解决:将dyld-750.6/include/objc-shared-cache,h 拷贝到ZKCommon/

    QQ20201202-163607@2x.png

    错误十六:Block_prrivate.h file not found

    QQ20201202-163833@2x.png

    解决:libclosure-74/Block_private.h 拷贝到ZKCommon/

    QQ20201202-164200@2x.png

    错误十七:can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/AppleInternal/OrderFiles/libobjc.order 路径问题

    QQ20201202-164536@2x.png

    解决:target -> objc -> Build Settings Order File添加搜索路径$(SRCROOT)/libobjc.order

    错误十八:library not found for -lCrashReporterClient

    QQ20201202-165956@2x.png

    解决:TARGETS -> objc -> Build Settings 搜索Other Linker Flags找到lCrashReporterClient删除掉

    QQ20201202-170543@2x.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);
    
    QQ20201202-171042@2x.png QQ20201202-171619@2x.png

    解决:断言错误,网上找了好久没有找到解决办法,最后只能注释掉了,查看以前老的版本没有发现这个错误,有知道解决办法的可以留言告诉我一下

    错误二十:shell脚本问题

    QQ20201202-172043@2x.png

    解决:targets -> Build Phases -> Run Scriptmacosx.internal改成macosx

    QQ20201202-172414@2x.png

    到这里我把报错都解决了


    QQ20201202-172714@2x.png

    5.创建TestDemo

    QQ20201203-095926.png QQ20201203-095543.png QQ20201203-100126.png

    给TestDemo绑定依赖关系,TestDemo -> Build Phases -> Dependencies 添加objc

    QQ20201203-100701@2x.png QQ20201203-100912@2x.png

    给TestDemo添加库,TestDemo -> Build Phases -> Link Binary With Libraries添加libobjc.A.dylib

    QQ20201203-101601@2x.png QQ20201203-101447@2x.png

    6.开始调试了


    QQ20201203-102155@2x.png

    打印了Hello,World!,成功运行

    QQ20201203-102356@2x.png

    7.接下来就可以各种调试了,创建Person

    QQ20201203-103331@2x.png

    8.我们打断点调试发现断点无效


    QQ20201203-104207.png

    解决办法:TestDemo -> Build Phases -> Compile Sourcesmain.m拖到最上面

    QQ20201203-104453.png QQ20201203-105014.png
    1. 结束,虽然解决办法是在网上搜的,但也算是自己重头到尾做了一遍。

    参考:
    https://www.jianshu.com/p/d2f589e3e1ef
    https://www.jianshu.com/p/3db5d0bde015

    相关文章

      网友评论

        本文标题:下载objc4787.1源码并调试TestDemo项目

        本文链接:https://www.haomeiwen.com/subject/tfdywktx.html