# objc4 **Repository Path**: wild_wind/objc4 ## Basic Information - **Project Name**: objc4 - **Description**: 源码编译,可直接运行、调试,通过它可以更好的理解OC的本质 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-25 - **Last Updated**: 2021-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### OC源码编译,可直接运行、调试,通过它可以更好的理解OC的本质以及底层实现 本项目中使用的是苹果源码 [objc4-781](https://opensource.apple.com/tarballs/objc4/) 版本, 系统版本为```macos 10.15``` ,可以从 [苹果开源源码](https://opensource.apple.com/source/) 和 [官方tarballs](https://opensource.apple.com/tarballs) 查看相关源码和依赖库, 所使用的到的依赖库如下: ``` libdispatch、libpthread、dyld、Libc、libplatform、libauto、libclosure、xnu ``` 以上项目可直接编译使用!如需自己编译,可查看以下步骤!否则可忽略以下步骤! ### 苹果源码编译问题与解决方案 #### 1. macosx.internal 报错

``` unable to find sdk 'macosx.internal' ``` - 将 ```Build Settings``` -> ``` Base SDK``` 设置为 ``macos 10.15 `` - 将 ``` Valid Architectures ``` 删除 ``` i386 ``` 架构支持 #### 2. file not found 报错

- 在工程目录下新建 ```Common``` 文件夹 - 之后在 ```Xcode``` -> ```Build Setting``` -> ```Header Search Paths``` 添加 ```$(SRCROOT)/Common ``` - 在```Common```文件夹中新建```sys```文件夹,并从下载的其他的包中找到 ```reason.h``` ,放到```sys```文件夹中即可
- 以下同理
``` 'sys/reason.h' file not found 'mach-o/dyld_priv.h' file not found 'os/lock_private.h' file not found 'os/base_private.h' file not found 'pthread/tsd_private.h' file not found 'System/machine/cpu_capabilities.h' file not found 'os/tsd.h' file not found 'pthread/spinlock_private.h' file not found 'System/pthread_machdep.h' file not found 'CrashReporterClient.h' file not found 'objc-shared-cache.h' file not found '_simple.h' file not found 'kern/restartable.h' file not found 'Block_private.h' file not found 'objc/objc-block-trampolines.h' file not found ``` #### 3. bridgeos(3.0) 报错

- 删除```bridgeos(3.0)```即可 #### 4. OS_UNFAIR_LOCK_ADAPTIVE_SPIN 报错

``` Use of undeclared identifier 'OS_UNFAIR_LOCK_ADAPTIVE_SPIN' ``` 将此处修改为```os_unfair_lock_lock(&mLock)```; #### 5. Use of undeclared identifier xxx ``` Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_11' Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_14' Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_13' Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_12' ``` 定义以下宏即可 ```swift #define DYLD_MACOSX_VERSION_10_11 0x000A0B00 #define DYLD_MACOSX_VERSION_10_14 0x000A0E00 #define DYLD_MACOSX_VERSION_10_13 0x000A0D00 #define DYLD_MACOSX_VERSION_10_12 0x000A0C00 ``` #### 6. OrderFiles/libobjc.order 报错 ``` Can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order ``` 将 ```Build Settings``` - ```Order file``` 路径改为 ```$(SRCROOT)/libobjc.order``` 即可 #### 7. -lCrashReporterClient 报错 ``` ld: library not found for -lCrashReporterClient ``` 将 ```Build Settings``` - ```other link flags``` 删除 ```-lCrashReporterClient``` 即可 #### 8. Script 报错 ``` /xcodebuild:1:1: SDK "macosx.internal" cannot be located. /xcrun:1:1: sh -c '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk macosx.internal -find clang++ 2> /dev/null' failed with exit code 16384: (null) (errno=No such file or directory) /xcrun:1:1: unable to find utility "clang++", not a developer tool or in PATH ``` 将 ```Build Phases``` - ```Run Script(markc)``` 中 ```macosx.internal``` 改为 ```macosx``` #### 9. 新建target测试即可使用

依赖库图

### 附注 github 图片不显示配置(亲测可用) ``` sudo /etc/hosts ``` 将以下内容添加到 ``` hosts``` 文件即可 ``` 140.82.114.3 github.com 199.232.69.194 github.global.ssl.fastly.net 185.199.110.153 assets-cdn.github.com 140.82.114.3 gist.github.com 199.232.28.133 raw.githubusercontent.com 199.232.28.133 gist.githubusercontent.com 199.232.28.133 cloud.githubusercontent.com 199.232.28.133 camo.githubusercontent.com 199.232.28.133 avatars0.githubusercontent.com 199.232.28.133 avatars1.githubusercontent.com 199.232.28.133 avatars2.githubusercontent.com 199.232.28.133 avatars3.githubusercontent.com ```