iOS/MacOS开发需要了解的苹果官方开源库
在我们印象中, Apple 和开源没有任何关系, 相比 Android 的各种定制和魔改, 苹果可谓是关闭之极, 开发者必须在苹果的结构下开发, 无法逾越一步。

关闭的商业形式在确保了极致的用户体会的一起也决议了苹果的开源无法想其他的公司相同, 被很多的开发者认识和了解

实际上苹果关闭的只有体系的用户体会层和商业软件,体系的底层库大部分是开源的,不论是体系内核Darwin Xnu、GCD仍是 Swift、OC runtime,亦或是 WebKit 这个重要的 Web 组件,无不证明苹果的开源精神, 苹果也在拥抱广大开源爱好者。

本文介绍苹果官方的一些开源网站和组件, 包含源码地址、文档和版别等信息, 作为iOS/MacOS开发您不容错失。

首先是Apple三个首要开源网站

  1. opensource.apple.com

    苹果专门规划的一个开源官网, 列出了苹果主导和参与的一些开源库

  2. github.com/apple

    包含 Swift言语和swift-package-manager swift-foundation swift-nio等Swift组件库, 苹果开源的主战场

  3. github.com/apple-oss-d…

    iOS/MacOS 体系组件库, 包括内核xnu、动态链接器dyldobjc4(runtime) GCD(libdispatch), 和各个体系组件库

下面介绍常用的组件和库

Swift

iOS/MacOS开发需要了解的苹果官方开源库

  • 官网: www.swift.org

  • 源码: github.com/apple/swift

  • 中文教程: www.cnswift.org

  • 最新版别: 5.9

目前苹果开源的中心, 最先进的生产力和现代开发言语, 让我们都能开发出众的 App。

旨在为开发者供给充沛的自在。Swift 易用并且开源,只要有主意,谁都能够创造非凡。

open and powerful

SPM

swift-package-manager

  • 源码: github.com/apple/swift…
  • 阐明文档: www.swift.org/getting-sta…
  • 最新版别: 0.6.0

协助Swift开发人员办理项目,以便复用代码及简化办理流程。

和 Cocoapods、Carthage 效果相似

支撑 iOS、macOS、watchOS 和 tvOS 体系

swift-nio

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/apple/swift…
  • 最新版别: 2.57.0

基于事情驱动的Swift for Server开发结构,用于快速开发高功用且易于维护的Server程序

为了提高功用,SwfitNIO 运用非阻塞 IO,不论是发送数据仍是接收数据,运用程序都无需等候,体系内核会在有可操作的 IO 时通知 SwfitNIO。

效果相似 Netty,但开发言语是 Swift。

支撑的渠道

Ubuntu 18.04+
macOS 10.14+
iOS 12+

swift-corelibs-foundation

  • 源码: github.com/apple/swift…

Foundation 结构是苹果 macOS 和 iOS 的中心结构,几乎一切的 Swift/OC 项目都运用 Foundation 结构, 供给了各种最基础的东西类和运用API。

运用 Swift 重新完成了 Foundation 结构, 不再需求 C 和 Swift 桥接,从而提高功用。该项目旨在为Server Side开发供给体量更小更方便的跨渠道开发结构。

objc4(OC Runtime)

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/apple-oss-d…
  • 官方文档: developer.apple.com/documentati…
  • 最新版别: objc4-876

Objective-C runtime 库源码,它是 Objective-C 面向对象和动态机制的基石

xnu

  • 源码: github.com/apple-oss-d…
  • 最新版别: xnu-8796.101.5

xnu is not unix

xnu内核是Mac和iOS的中心,是结合了微内核与宏内核特性的混合内核,它包括三个部分:Mach、BSD 和 I/O Kit

GCD

  • 源码: github.com/apple-oss-d…
  • 最新版别: libdispatch-1415.100.11

Grand Central Dispatch(GCD) 是 Apple 开发的多线程编程技术。优化App以支撑多核处理器。它在线程池形式的基础上执行的并发任务。支撑 iOS 和 MacOS体系

优势:

  1. 优化多核的并行运算
  2. 主动运用更多的 CPU 内核(比方双核、四核)
  3. 主动办理线程的生命周期(创建线程、调度任务、销毁线程)
  4. 只需求告诉 GCD 想要执行什么任务,不需求编写任何线程办理代码

dyld

  • 源码: github.com/apple-oss-d…
  • 最新版别: dyld-1066.8

dyld 全称 the dynamic link editor,即动态链接器,是专门用来加载动态库的库。

苹果体系的重要组成部分,在App被编译打包成可执行文件格式的 Mach-O 文件之后 ,交由 dyld 负责链接和加载程序。

Core Foundation

  • 源码: github.com/apple-oss-d…
  • 最新版别: CF-1153.18

Core Foundation和Foundation 功用根本一致, 区别是Core Foundation是由C言语完成的,而Foundation是 Objective-C 完成的, 为iOS和MacOS供给根本数据办理和服务功用。

distribution-macOS

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/apple-oss-d…
  • 最新版别: macOS 13.0

MacOS 体系的驱动结构、IOKit和各种底层库的调集

下面是苹果参与的开源项目

Webkit

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/WebKit/WebK…
  • 官网: webkit.org
  • 最新版别: WebKit-7615.3.12.11.3

WebKit是跨渠道的Web浏览器引擎, 是 Apple Web的中心

Safari、Mail、App Store 以及 macOS/iOS/Linux很多 App 都是基于WebKit来构建 web 服务的。

llvm/Clang

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/llvm/llvm-p…
  • 官网: llvm.org
  • 最新版别: LLVM 16.0.6

Apple一开始运用GCC作为编译器,GCC对Objective-C的言语特性支撑一直不行

所以苹果重新开发了LLVM这一整套编译前端后端的项目,llvm是这个项目的代号,

它是高度优化的编译器、优化器和运行时环境

Clang是LLVM的前端,用来编译CC++Objective-C代码,

sqlite

iOS/MacOS开发需要了解的苹果官方开源库

  • 源码: github.com/sqlite/sqli…
  • 官网: sqlite.org
  • 最新版别: version-3.42.0

SQLite 是开源跨渠道轻量级数据库, 是移动端数据库的标准, 完成了无服务器的、零配置的、业务性的 SQL 数据库引擎

优势:

  1. 不需求一个独自的服务器进程或操作的体系(无服务器的)。
  2. 不需求安装或办理。
  3. 跨渠道, 数据库文件一切渠道通用, 包括Android、iOS、Linux/Unix、Mac OS和 Windows
  4. 库非常小, 轻量级
  5. 没有任何外部的依靠
  6. 业务是完全兼容 ACID 的,答应从多个进程或线程安全拜访。
  7. 支撑 SQL92(SQL2)标准的大多数查询言语的功用。

GNU step(开源Cocoa)

  • 源码: github.com/gnustep/lib…
  • 下载地址: wwwmain.gnustep.org/resources/d…
  • 官网介绍: gnustep.github.io/resources/d…
  • 最新版别: base-1_29_0

GNU step是GNU方案的项目之一,它将Cocoa的OC库重新开源完成了一遍。运用GNUstep了解Cocoa结构的完成原理。

虽然GNU step不是苹果官方源码,但仍是具有必定的参考价值 !!

GNUstep Base

  • KVO: Source/NSKeyValueObserving.m
  • KVC: Source/NSKeyValueCoding.m
  • NSRunLoop: Source/NSRunLoop.m
  • NSThread: Source/NSThread.m
  • NSOperation : Source/NSOperation.m

GNUstep GUI

  • NSView
  • NSViewController