Skip to content
PrinterArchive

Tools

ICA (Image Capture on macOS)

ICA is Apple's shorthand for the Image Capture Architecture, the macOS subsystem that lets applications discover and control image-input devices such as scanners, digital cameras, and multifunction devices over USB or the network. The name is shared by two things: the bundled Image Capture application, and the underlying frameworks and device-driver plug-ins ("device modules") beneath it. The current public programming surface is the ImageCaptureCore framework (headless) plus the ImageKit capture classes (ready-made UI), which Apple's documentation says replace the older Carbon-based Image Capture subframework introduced with OS X 10.6. For scanners the central class is ICScannerDevice. ICA gives macOS a single OS-level abstraction in place of fragmented per-vendor drivers, and increasingly brokers driverless network scanning (eSCL/AirScan) so many current scanners work with nothing installed.

By PrinterArchive EditorialEdited by PrinterArchive Editorial

Overview

On the Mac, "ICA" is Apple's shorthand for Image Capture Architecture — the operating-system subsystem that lets applications discover and control image-input devices (scanners, digital cameras, and multifunction devices) attached over USB or reachable on a network. Apple uses the exact phrase "Image Capture Architecture (ICA)" in its own developer material, notably the Technical Q&A titled "Launch Behavior Changes for Image Capture Architecture (ICA) Device Modules on macOS Sierra 10.12."

Two things share the "Image Capture" name and are easy to conflate:

  • The Image Capture application — a bundled macOS utility (Image Capture.app) that imports photos from cameras and performs scans, with no third-party software required for supported devices.
  • The Image Capture architecture / frameworks — the underlying APIs and device-driver plug-ins ("device modules") that the app, Preview, and third-party apps all sit on top of.

This dual usage is real and appears in vendor documentation as well: some sources expand "ICA" as "Image Capture Application," while Apple's own QA1946 uses "Image Capture Architecture." In current developer terms, the public programming surface is the ImageCaptureCore framework (headless/programmatic) plus the ImageKit capture classes (ready-made UI), which Apple's documentation states "replace the older Carbon-based Image Capture subframework." For scanners specifically, the central class is ICScannerDevice.

Colloquially, an "ICA driver" or "ICA scanner" refers to a scanner whose macOS driver is a device module written to this architecture, so the device works directly in Image Capture or Preview — as opposed to relying on the older, cross-platform TWAIN model.

History

Apple shipped an Image Capture application in an early Mac OS X release to import images from cameras and scanners. The specific first release is commonly reported as Mac OS X 10.1 (around 2001), but that date comes from secondary sources and is not confirmed against a primary Apple page; treat it as reported rather than established.

The original programming interface was a Carbon-based C API used both by applications and by driver authors writing device modules.

With OS X 10.6 "Snow Leopard" (2009), Apple introduced the modern ImageCaptureCore framework and the ImageKit capture classes. Apple's archived Image Capture Services Programming Guide states that these "replace the older Carbon-based Image Capture subframework," while keeping existing applications working. Legacy C entry points such as ICAObjectSendMessage() were deprecated in Mac OS X 10.6, superseded by the newer delegate-based messaging.

macOS Sierra 10.12 (2016) changed how device modules run. Apple states verbatim that "for performance reasons, on macOS Sierra 10.12 and later, device modules are only launched on-demand, when the user is interested in using the particular hardware."

macOS Catalina 10.15 (2019) removed the ability to run 32-bit software. Because many vendors' TWAIN drivers and scan utilities were 32-bit, this broke a large number of older scanners on macOS and pushed users toward ICA device modules, driverless (network) scanning, or third-party 64-bit tools. Brother's support documentation from that period notes that where a TWAIN scanner driver was not supported under 10.15, "an ICA … scanner driver may be available."

What problem it solved

Before a unified architecture, scanner and camera support on the Mac depended on per-vendor, often proprietary drivers and bundled utilities, and on the cross-platform TWAIN model (a working group founded in 1992 to standardize how applications acquire images from devices). That world was fragmented: capabilities varied by vendor application, drivers aged out with OS releases, and a 32-bit driver could stop working when the operating system moved on.

ICA gives macOS a single, OS-level abstraction: one device-discovery mechanism, one set of frameworks, and a common driver ("device module") model. The practical payoff for users is that supported cameras and scanners appear directly in Image Capture, Preview, and other applications — and for many modern network devices, with no vendor driver installed at all.

How it works

At a high level, ICA works through a small number of coordinated pieces:

  • Discovery. An application uses a device browser (ICDeviceBrowser in ImageCaptureCore) to enumerate connected and networked devices. Discovery covers local USB devices and network devices; network scanner discovery uses Bonjour.
  • Device objects. Each device is represented by an ICDevice subclass — ICCameraDevice for cameras, ICScannerDevice for scanners. Applications communicate with devices through delegate callbacks rather than blocking calls.
  • Scanner capabilities. A scanner exposes functional units (flatbed, document feeder, transparency/film) via ICScannerFunctionalUnit. The application queries the available unit types, selects one, sets scan parameters (resolution, bit depth, color, scan area), and then issues a scan request. Apple's scanner API includes ICScannerDevice.requestScan(), described as starting a scan on the selected functional unit, and delegate callbacks such as scannerDevice(_:didScanTo:) that deliver progress and results. Note that the delegate family has evolved and includes deprecated members, so exact method availability should be checked per macOS version.
  • Device modules. The vendor- or Apple-supplied driver plug-in that actually talks to the hardware is a device module. Since macOS Sierra, these are launched on demand when a device is selected and terminate when no longer needed.
  • UI versus headless. Applications can drive everything programmatically with ImageCaptureCore (no built-in UI), or drop in Apple's ImageKit capture views for a standard scan/import interface.

Where it sits in the capture pipeline

ICA is the middle layer between the app-facing frameworks and the concrete device module and transport. Roughly:

` Application (Image Capture.app, Preview, 3rd-party) │ ImageKit (ready UI) / ImageCaptureCore (headless API) ← public frameworks │ Image Capture Architecture (ICA) core + device browser │ Device module (driver plug-in: ICA-native, or a bridge) │ Transport (USB, or network: eSCL / IPP-over-Bonjour) │ Scanner / camera hardware `

In this sense ICA is to scanning roughly what CUPS is to printing on macOS: the operating-system-level stack that applications sit on top of, rather than a piece of end-user software in its own right.

Relationship to operating systems

ICA is macOS-specific. It is Apple's answer to a job that other platforms solve differently:

  • Windows historically used TWAIN and WIA (Windows Image Acquisition), and has moved toward driverless network scanning.
  • Linux and Unix use SANE (Scanner Access Now Easy).
  • macOS uses ICA / ImageCaptureCore.

An ImageCaptureCore framework also exists on iOS/iPadOS for accessing cameras and external media, but the scanner-oriented ICScannerDevice story described here is the macOS scanning subsystem; cross-platform framework parity is version-dependent and should not be assumed.

Relationship to scanners

For scanners, ICA is the primary path on modern macOS:

  • A scanner is an "ICA scanner" when its macOS driver is an ICA device module, so it works in Image Capture or Preview without a separate vendor application.
  • ICA models scanner-specific concepts — functional units, feeders, scan area, resolution — through ICScannerDevice and ICScannerFunctionalUnit.
  • ICA increasingly reaches scanners without any vendor driver by speaking driverless network protocols directly. When a scanner supports eSCL/AirScan, it typically appears in Image Capture automatically.

Relationship to PDF and OCR

ICA is a capture subsystem: it delivers pixels — and, for document feeders, page-by-page images — not finished documents. PDF assembly and OCR sit above it.

  • Applications built on ICA (Image Capture, Preview, third-party scan tools) take the scanned images and use higher-level macOS features to save or combine pages as PDF.
  • OCR and searchable-PDF output are layered on by the application, typically using macOS text-recognition capabilities (for example the Vision framework's text recognition) or third-party engines. This is not a function of ICA or ImageCaptureCore itself.

Modern relevance

ICA remains the de facto scanning subsystem on macOS: essentially every scan through Image Capture, Preview, or an ImageCaptureCore-based application runs through it. Its role has shifted over time from hosting many bespoke vendor drivers toward brokering driverless network scanning (eSCL/AirScan), which is why so many current network scanners work on a Mac with nothing installed. For legacy USB-only devices, ICA device modules — and third-party bridges — keep older hardware usable after the 32-bit cutoff introduced in Catalina.

Advantages

  • Unified, OS-level model for scanners and cameras shared across applications.
  • Driverless operation for network devices via eSCL/AirScan — often no vendor software at all.
  • Headless or UI developer choices (ImageCaptureCore versus ImageKit).
  • A consistent scanner model exposing functional units, feeders, and scan parameters.
  • On-demand device modules (Sierra and later) that reduce background resource use.

Limitations

  • macOS-specific; not portable to Windows or Linux stacks.
  • Dependent on vendor device modules for USB-only or non-eSCL hardware. Vendors often stop updating ICA modules, so devices can break on new macOS releases.
  • The 32-bit cutoff in Catalina stranded many older scanners whose only drivers were 32-bit.
  • Not a document or OCR pipeline — PDF assembly and text recognition are the application's responsibility.
  • API evolution: legacy Carbon C entry points are deprecated, and individual ImageCaptureCore members have been deprecated across releases, so exact class and method availability must be checked per macOS version.
  • TWAIN — cross-platform image-acquisition standard from the TWAIN Working Group (founded 1992); driver-based. Its driverless successor, TWAIN Direct (a RESTful API), reached version 1.0 in September 2019 and is not part of Apple's stack.
  • eSCL — a Mopria Alliance driverless scan protocol (HTTP and XML discovered over Bonjour, working over Wi-Fi, Ethernet, and USB); Apple markets it as AirScan / AirPrint scanning.
  • IPP Scan — the PWG (Printer Working Group) driverless-scan standard, related to the IPP and Mopria work.
  • WIA — Windows Image Acquisition, the Windows analog.
  • SANE — Scanner Access Now Easy, the Unix/Linux analog; its sane-airscan backend implements eSCL there.
  • Bonjour / mDNS — Apple's zero-configuration networking, used to discover network scanners.

Timeline

  1. 1992

    TWAIN Working Group founded (Aldus, Caere, Hewlett-Packard, Eastman Kodak, Logitech); cross-platform image acquisition standardized.

  2. ~2001

    Apple ships an Image Capture application with early Mac OS X (reported as 10.1; not confirmed to a primary source).

  3. 2009

    OS X 10.6 "Snow Leopard": Apple introduces ImageCaptureCore and the ImageKit capture classes to replace the older Carbon-based Image Capture subframework; ICAObjectSendMessage() deprecated in 10.6.

  4. 2016

    macOS Sierra 10.12: ICA device modules launch on demand rather than persistently.

  5. 2019

    TWAIN Direct 1.0 (RESTful, driverless) finalized (September 19, 2019); separate from Apple's stack.

  6. 2019

    macOS Catalina 10.15 removes 32-bit support, breaking many 32-bit TWAIN scanner drivers and pushing users toward ICA modules, driverless scanning, or 64-bit third-party tools.

Frequently asked questions

Does ICA stand for Image Capture Architecture or Image Capture Application?
Both usages exist. Apple's own developer material — for example Technical Q&A QA1946 — uses "Image Capture Architecture (ICA)," referring to the OS-level subsystem and its device modules. Some vendor documentation instead expands "ICA" as "Image Capture Application," referring to the bundled Image Capture.app. On PrinterArchive we follow Apple's term for the architecture while noting that the app and the architecture share the name.
What is the difference between an ICA driver and a TWAIN driver on a Mac?
An ICA driver is a device module written to Apple's Image Capture Architecture, so the scanner works directly in Image Capture and Preview with no separate vendor app. TWAIN is a cross-platform, driver-based standard that requires a locally installed driver. macOS did not standardize on TWAIN long-term, and the removal of 32-bit support in Catalina (10.15, 2019) disabled many 32-bit TWAIN drivers, pushing users toward ICA modules or driverless scanning.
Why do some scanners work on a Mac with no software installed?
Many current network scanners support driverless scanning via eSCL, a Mopria Alliance protocol that Apple markets as AirScan/AirPrint scanning. It uses HTTP and XML discovered over Bonjour and works over Wi-Fi, Ethernet, and USB. When a scanner supports eSCL, macOS can discover and drive it through ICA without any vendor driver, so it appears in Image Capture automatically.
Does ICA create PDFs or run OCR?
No. ICA is a capture subsystem: it delivers scanned images, and for document feeders it delivers page-by-page images. Assembling those pages into a PDF and running OCR to produce searchable text are handled above ICA by the application, typically using higher-level macOS features such as the Vision framework's text recognition or third-party engines.

Source transparency (12 sources)

These references support claims made in this entry. The archive uses verified institutional and public-domain sources only; see Source policy.

Sources consulted (12)

Continue in the archive

Related reading