Welcome to Brian Webster's Blog

The evolution of macOS frameworks over time

 | 

When reading Gus Mueller’s post about how the presence of Marzipan might interact with Apple potentially transitioning to ARM processors, he mentioned that moving to a new architecture is a nice time to drop legacy frameworks and make a clean break with backward compatibility. This got me curious: how many frameworks currently on macOS could actually be dropped altogether?

So I dove into the Frameworks folder in the latest macOS SDK and found a total of 147 frameworks listed there. Yikes! I went down the list and wrote down which ones I think could reasonably be jettisoned on an architecture switch (note that there would also be many APIs within various frameworks that could be tossed too, even if the framework as a whole sticks around). Here’s the full list of all the frameworks:

Accelerate.framework
Accounts.framework
AddressBook.framework
AdSupport.framework
AGL.framework
AppKit.framework
AppKitScripting.framework
AppleScriptKit.framework
AppleScriptObjC.framework
ApplicationServices.framework
AudioToolbox.framework
AudioUnit.framework
AudioVideoBridging.framework
Automator.framework
AVFoundation.framework
AVKit.framework
BusinessChat.framework
CalendarStore.framework
Carbon.framework
CFNetwork.framework
CloudKit.framework
Cocoa.framework
Collaboration.framework
ColorSync.framework
Contacts.framework
ContactsUI.framework
CoreAudio.framework
CoreAudioKit.framework
CoreBluetooth.framework
CoreData.framework
CoreDisplay.framework
CoreFoundation.framework
CoreGraphics.framework
CoreImage.framework
CoreLocation.framework
CoreMedia.framework
CoreMediaIO.framework
CoreMIDI.framework
CoreMIDIServer.framework
CoreML.framework
CoreServices.framework
CoreSpotlight.framework
CoreTelephony.framework
CoreText.framework
CoreVideo.framework
CoreWLAN.framework
CryptoTokenKit.framework
DirectoryService.framework
DiscRecording.framework
DiscRecordingUI.framework
DiskArbitration.framework
DrawSprocket.framework
DVComponentGlue.framework
DVDPlayback.framework
EventKit.framework
ExceptionHandling.framework
ExternalAccessory.framework
FinderSync.framework
ForceFeedback.framework
Foundation.framework
FWAUserLib.framework
GameController.framework
GameKit.framework
GameplayKit.framework
GLKit.framework
GLUT.framework
GSS.framework
Hypervisor.framework
ICADevices.framework
ImageCaptureCore.framework
ImageIO.framework
IMServicePlugIn.framework
InputMethodKit.framework
InstallerPlugins.framework
InstantMessage.framework
Intents.framework
IOBluetooth.framework
IOBluetoothUI.framework
IOKit.framework
IOSurface.framework
iTunesLibrary.framework
JavaFrameEmbedding.framework
JavaScriptCore.framework
JavaVM.framework
Kerberos.framework
Kernel.framework
LatentSemanticMapping.framework
LDAP.framework
LocalAuthentication.framework
MapKit.framework
MediaAccessibility.framework
MediaLibrary.framework
MediaPlayer.framework
MediaToolbox.framework
Message.framework
Metal.framework
MetalKit.framework
MetalPerformanceShaders.framework
ModelIO.framework
module.map
MultipeerConnectivity.framework
NaturalLanguage.framework
NetFS.framework
Network.framework
NetworkExtension.framework
NotificationCenter.framework
OpenAL.framework
OpenCL.framework
OpenDirectory.framework
OpenGL.framework
OSAKit.framework
PCSC.framework
Photos.framework
PhotosUI.framework
PreferencePanes.framework
Python.framework
QTKit.framework
Quartz.framework
QuartzCore.framework
QuickLook.framework
QuickTime.framework
Ruby.framework
SafariServices.framework
SceneKit.framework
ScreenSaver.framework
Scripting.framework
ScriptingBridge.framework
Security.framework
SecurityFoundation.framework
SecurityInterface.framework
ServiceManagement.framework
Social.framework
SpriteKit.framework
StoreKit.framework
SyncServices.framework
System.framework
SystemConfiguration.framework
Tcl.framework
Tk.framework
TWAIN.framework
UserNotifications.framework
VideoDecodeAcceleration.framework
VideoSubscriberAccount.framework
VideoToolbox.framework
Vision.framework
vmnet.framework
WebKit.framework

Out of those, I figure the following 27 can probably be chucked:

AddressBook (replaced by Contacts)

AGL (OpenGL deprecated)

AppleScriptKit (Part of AppleScript Studio, which let you write Cocoa apps in AppleScript. No, really.)

CalendarStore (replaced by EventKit)

CoreTelephony (replaced by CallKit)

DirectoryService (replaced by OpenDirectory)

DiscRecording (LOL disc burning)

DiscRecordingUI

DVDPlayback (they’re gonna add Blu-ray support any day now)

FWAUserLib

GLKit (OpenGL deprecated)

GLUT (OpenGL deprecated)

ICADevices (replaced by ImageCaptureCore)

IMServicePlugin

InstallerPlugins

InstantMessage

iTunesLibrary (hopefully they’d bring AssetLibrary.framework over from iOS)

JavaFrameEmbedding

JavaVM

MediaLibrary (hopefully replaced by AssetLibrary + PhotoKit)

OpenCL (OpenCL deprecated)

OpenGL (OpenGL deprecated)

QTKit

QuickTime (so long little buddy 😢)

SafariServices

Social

SyncServices (and you thought iCloud Core Data was bad! 🐝🐝🐝)

That’s actually not that many, all things considered! But then, looking through this rather long list of frameworks, I started wondering: how many frameworks were present in the initial release of Mac OS X 10.0? I couldn’t dig up a list for 10.0, but some enterprising individual created a repository on Github with all the macOS SDKs back to version 10.1.5. There were 41 frameworks in that SDK:

AGL.framework
AppKit.framework
AppKitScripting.framework
AppleScriptKit.framework
AppleShareClient.framework (no longer present, probably dumped during the PPC->Intel)
AppleShareClientCore.framework (no longer present)
AppleTalk.framework (no longer present)
ApplicationServices.framework
AudioToolbox.framework
AudioUnit.framework
Carbon.framework
Cocoa.framework
CoreAudio.framework
CoreFoundation.framework
CoreMIDI.framework
CoreMIDIServer.framework
CoreServices.framework
DVComponentGlue.framework
DirectoryService.framework
DrawSprocket.framework
ExceptionHandling.framework
Foundation.framework
GLUT.framework
IOKit.framework
InterfaceBuilder.framework
JavaEmbedding.framework
JavaVM.framework
Kerberos.framework
Kernel.framework
LDAP.framework
Message.framework
OpenGL.framework
PCSC.framework
PreferencePanes.framework
QuickTime.framework
ScreenSaver.framework
Scripting.framework
Security.framework
System.framework
SystemConfiguration.framework
vecLib.framework (got moved into Accelerate.framework)

You’ll notice a lot of big names missing from that list, including CoreData, CoreImage, AVFoundation, ImageIO, and WebKit, among others. It was definitely a simpler time!