The Apple Framework Family Tree

It has been almost 4 years since I started to develop iOS apps and recently I made Subault which allowed me to broaden my knowledge about Apple Frameworks. Nonetheless, what they have had to offer are numerous, and I bump into something new almost every single day. The other day, I got to use struct Morphology to handle the auto pluralization (It was easy thanks to it!).

What is trickier is that many frameworks are built on top of the other framework for the most part whether or not it is obvious. For example, SwiftUI. It is very easy to start with, and has been attracting many developers because of its nature, and I am one of them. However, you will soon notice there is hidden UIKit behind the back when your development progress in SwiftUI. This can be real confusing to me for those who started development in the SwiftUI era just like me.

So, I created the family tree for Apple Frameworks using GPTs. This simple chart illustrates the chronology of when some pivotal frameworks came out, and the relationship of them.

# C (1972)
├── Objective-C (1984)
│   ├── Foundation Framework (1994)
│   │   └── NSString, NSArray, NSDictionary, NSDate
│   ├── Core Foundation (1994)
│   │   └── CFNetwork, CFArray, CFDictionary, CFString
│   ├── AppKit (macOS, 1989)
│   │   └── NSWindow, NSView, NSButton, NSTableView
│   │   ├── Cocoa (macOS)
│   │       └── (Combination of AppKit, Foundation, and Core Data)
│   ├── CoreGraphics (2001, Quartz)
│   │   └── CGContext, CGPath, CGImage, CGColor
│   │   ├── Core Animation
│   │       ├── UIKit (iOS, 2008)
│   │       │   └── UIView, UIViewController, UITableView, UIButton
│   │       │   ├── SwiftUI (2019)
│   │       │       └── View, Text, Button, List
│   │       ├── AppKit (for macOS UI components)
│   ├── CoreAudio (2001)
│   │   └── AudioUnit, AudioComponent, AudioStreamBasicDescription, AudioBuffer
│   │   ├── AVFoundation (2010)
│   │       └── AVPlayer, AVAudioEngine, AVCaptureSession, AVAsset
│   ├── WebKit (2003)
│   │   └── WKWebView, WKNavigation, WKUserScript, WKScriptMessage
│   ├── Core Data (2005)
│   │   └── NSManagedObject, NSManagedObjectContext, NSFetchRequest, NSPersistentStore
│   ├── CoreLocation (2008)
│   │   └── CLLocationManager, CLLocation, CLGeocoder, CLRegion
│   │   ├── MapKit (2009)
│   │       └── MKMapView, MKAnnotation, MKOverlay, MKDirections
│   ├── Metal (2014)
│   │   └── MTLDevice, MTLCommandQueue, MTLBuffer, MTLTexture
│   │   ├── SceneKit (2012)
│   │   │   └── SCNView, SCNScene, SCNNode, SCNGeometry
│   │   ├── SpriteKit (2013)
│   │       └── SKScene, SKNode, SKSpriteNode, SKAction
│   ├── CoreML (2017)
│   │   └── MLModel, MLFeatureProvider, MLPredictionOptions, MLUpdateTask
│   │   ├── Vision (2017)
│   │       └── VNImageRequestHandler, VNDetectFaceRectanglesRequest, VNRecognizeTextRequest, VNDetectBarcodesRequest
│   ├── ARKit (2017)
│   │   └── ARSession, ARWorldTrackingConfiguration, ARFrame, ARAnchor
│   │   ├── RealityKit (2019)
│   │       └── RealityKit.Entity, RealityKit.AnchorEntity, RealityKit.ModelEntity, RealityKit.Scene

# Swift (2014)
├── Swift Standard Library
│   └── Array, Dictionary, Set, String
├── SwiftUI (2019)
│   └── View, Text, Button, List
│   (Built on top of UIKit for iOS and AppKit for macOS)
├── Combine (2019)
│   └── Publisher, Subscriber, Subject, Cancellable

This kinda helpled me see the overview of the Apple Frameworks and understand where to start when I get confused or want to look into some underlying technology. I am not an expert at all so I tried to make it as accurate as possible, but there might be possibilities for it to be wrong, so please let me know if you spot something inaccurate.