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

image.png 在大家印象中, Apple 和开源没有任何关系, 相比 Android 的各种定制和魔改, 苹果可谓是封闭之极, 开发者必须在苹果的框架下开发, 无法逾越一步。

封闭的商业模式在保证了极致的用户体验的同时也决定了苹果的开源无法想其他的公司一样, 被众多的开发者认识和了解

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

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

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

  1. https://opensource.apple.com

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

  2. https://github.com/apple

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

  3. https://github.com/apple-oss-distributions

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

下面介绍常用的组件和库

Swift

image.png

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

旨在为开发者提供充分的自由。Swift 易用并且开源,只要有想法,谁都可以创造非凡。

open and powerful

SPM

swift-package-manager

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

和 Cocoapods、Carthage 作用类似

支持 iOS、macOS、watchOS 和 tvOS 系统

swift-nio

image.png

基于事件驱动的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)

image.png

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

xnu

xnu is not unix

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

GCD

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

优势:

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

dyld

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

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

Core Foundation

Core Foundation和Foundation 功能基本一致, 区别是Core Foundation是由C语言实现的,而Foundation是 Objective-C 实现的, 为iOS和MacOS提供基本数据管理和服务功能。

distribution-macOS

image.png

MacOS 系统的驱动框架、IOKit和各种底层库的集合

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

Webkit

image.png

WebKit是跨平台的Web浏览器引擎, 是 Apple Web的核心

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

llvm/Clang

image.png

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

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

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

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

sqlite

image.png

SQLite 是开源跨平台轻量级数据库, 是移动端数据库的标准, 实现了无服务器的、零配置的、事务性的 SQL 数据库引擎

优势:

  1. 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  2. 不需要安装或管理。
  3. 跨平台, 数据库文件所有平台通用, 包括Android、iOS、Linux/Unix、Mac OS和 Windows
  4. 库非常小, 轻量级
  5. 没有任何外部的依赖
  6. 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  7. 支持 SQL92(SQL2)标准的大多数查询语言的功能。

GNU step(开源Cocoa)

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

猜你喜欢

转载自juejin.im/post/7260875830199894072
今日推荐