在大家印象中, Apple 和开源
没有任何关系, 相比 Android 的各种定制和魔改, 苹果可谓是封闭之极, 开发者必须在苹果的框架下开发, 无法逾越一步。
封闭的商业模式在保证了极致的用户体验
的同时也决定了苹果的开源无法想其他的公司一样, 被众多的开发者认识和了解
实际上苹果封闭的只有系统的用户体验层和商业软件,系统的底层库大部分是开源的,不论是系统内核Darwin Xnu、GCD还是 Swift、OC runtime,亦或是 WebKit 这个重要的 Web 组件,无不证明苹果的开源精神, 苹果也在拥抱广大开源爱好者。
本文介绍苹果官方的一些开源网站和组件, 包含源码地址、文档和版本等信息, 作为iOS/MacOS开发您不容错过。
首先是Apple三个主要开源网站
-
https://opensource.apple.com
苹果专门设计的一个开源官网, 列出了苹果主导和参与的一些开源库
-
https://github.com/apple
包含
Swift
语言和swift-package-manager swift-foundation swift-nio等Swift组件库, 苹果开源的主战场
-
https://github.com/apple-oss-distributions
iOS/MacOS
系统组件库
, 包括内核xnu
、动态链接器dyld
、objc4
(runtime) GCD(libdispatch), 和各个系统组件库
下面介绍常用的组件和库
Swift
-
官网: www.swift.org
-
中文教程: 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
- 源码: 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
Foundation 框架是苹果 macOS 和 iOS 的核心框架,几乎所有的 Swift/OC 项目都使用 Foundation 框架, 提供了各种最基础的工具类和应用API。
使用 Swift 重新实现了 Foundation 框架, 不再需要 C 和 Swift 桥接,从而提高性能。该项目旨在为Server Side
开发提供体量更小更方便的跨平台开发框架。
objc4(OC Runtime)
- 源码: 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系统
优势:
- 优化多核的并行运算
- 自动利用更多的 CPU 内核(比如双核、四核)
- 自动管理线程的生命周期(创建线程、调度任务、销毁线程)
- 只需要告诉 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
- 源码: github.com/apple-oss-d...
- 最新版本: macOS 13.0
MacOS 系统的驱动框架、IOKit和各种底层库的集合
下面是苹果参与的开源项目
Webkit
- 源码: 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
- 源码: github.com/llvm/llvm-p...
- 官网: llvm.org
- 最新版本: LLVM 16.0.6
Apple一开始使用GCC
作为编译器,GCC对Objective-C的语言特性支持一直不够
所以苹果重新开发了LLVM这一整套编译前端
和后端
的项目,llvm是这个项目的代号,
它是高度优化的编译器、优化器和运行时环境。
Clang是LLVM的前端,用来编译C
、C++
和Objective-C
代码,
sqlite
- 源码: github.com/sqlite/sqli...
- 官网: sqlite.org
- 最新版本: version-3.42.0
SQLite
是开源跨平台轻量级数据库, 是移动端数据库的标准, 实现了无服务器的、零配置的、事务性的 SQL 数据库引擎
。
优势:
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- 不需要安装或管理。
- 跨平台, 数据库文件所有平台通用, 包括Android、iOS、Linux/Unix、Mac OS和 Windows
- 库非常小, 轻量级
- 没有任何外部的依赖
- 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- 支持 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