UIKit is the framework that provides the building blocks of the graphical, event-driven user interface for iOS, iPadOS, and tvOS applications. Apple’s developer documentation describes it as the framework used to “construct and manage a graphical, event-driven user interface” for an app, supplying the window and view architecture, the event-handling infrastructure for touch and other input, and the app model that drives the application lifecycle.
At the center of UIKit is the view system. The class UIView “manages the content for a rectangular area on the screen,” and views nest into a hierarchy that defines what the user sees and touches. Controls such as buttons, sliders, text fields, switches, and table views are all UIView subclasses, while UIViewController objects manage screens of content and coordinate navigation between them, following the model-view-controller pattern inherited from Cocoa on the Mac.
UIKit is imperative: a developer writes code that explicitly creates views, sets their properties, lays them out, and mutates them in response to events and data changes. This contrasts with the later declarative approach of SwiftUI, where the UI is described as a function of state. For more than a decade UIKit was the primary way to build native Apple touch apps, and the framework remains fully supported and widely used.
UIKit arrived with the iPhone SDK in 2008, which for the first time let outside developers write native iPhone applications rather than web apps. It forms one half of Cocoa Touch, the iOS application layer, sitting alongside the Foundation framework that provides non-UI building blocks such as strings, collections, and system services. Together UIKit and Foundation gave the third-party iOS ecosystem its core API surface.
Because so many apps and frameworks are built on it, UIKit has evolved carefully across iOS releases, adding capabilities such as Auto Layout for adaptive interfaces, storyboards for designing flows in Interface Builder, and later interoperability so that UIKit and SwiftUI views can be embedded in one another. This lets teams adopt newer technology incrementally without rewriting an entire UIKit codebase at once.