<!--
{
  "availability" : [
    "iOS: 13.0.0 -",
    "iPadOS: 13.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.4.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "ImageCaptureCore",
  "identifier" : "/documentation/ImageCaptureCore/ICDevice",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "ImageCaptureCore"
    ],
    "preciseIdentifier" : "c:objc(cs)ICDevice"
  },
  "title" : "ICDevice"
}
-->

# ICDevice

An abstract object that represents a device.

```
class ICDevice
```

## Overview

The device browser uses the concrete subclasses [`ICCameraDevice`](/documentation/ImageCaptureCore/ICCameraDevice) and [`ICScannerDevice`](/documentation/ImageCaptureCore/ICScannerDevice) to represent the cameras and scanners it finds.

## Topics

### Identifying a Device

[`name`](/documentation/ImageCaptureCore/ICDevice/name)

The device’s name as reported by the device module, or if no device module is in control of this device, by the device transport.

[`productKind`](/documentation/ImageCaptureCore/ICDevice/productKind)

The device’s type.

[`icon`](/documentation/ImageCaptureCore/ICDevice/icon)

The device’s icon image.

[`uuidString`](/documentation/ImageCaptureCore/ICDevice/uuidString)

A string representation of the device’s universally unique identifier (UUID).

[`persistentIDString`](/documentation/ImageCaptureCore/ICDevice/persistentIDString)

A string representation of the device’s persistent ID.

[`serialNumberString`](/documentation/ImageCaptureCore/ICDevice/serialNumberString)

The device’s serial number.

### Inspecting a Device’s Type and Location

[`type`](/documentation/ImageCaptureCore/ICDevice/type)

A combination of the device’s type and its location type.

[`ICDeviceType`](/documentation/ImageCaptureCore/ICDeviceType)

The type of image capture device.

[`ICDeviceTypeMask`](/documentation/ImageCaptureCore/ICDeviceTypeMask)

Masks for detecting different device types.

[`locationDescription`](/documentation/ImageCaptureCore/ICDevice/locationDescription)

A nonlocalized location description for the device.

[`modulePath`](/documentation/ImageCaptureCore/ICDevice/modulePath)

The file system path of the device module associated with this device.

[`moduleVersion`](/documentation/ImageCaptureCore/ICDevice/moduleVersion)

The bundle version of the device module associated with this device.

[`ICDeviceLocationType`](/documentation/ImageCaptureCore/ICDeviceLocationType)

The location of the image capture device.

[`ICDeviceLocationTypeMask`](/documentation/ImageCaptureCore/ICDeviceLocationTypeMask)

Masks for detecting different device locations.

[`ICDeviceLocationOptions`](/documentation/ImageCaptureCore/ICDeviceLocationOptions)

Options for the location of the image capture device.

[`usbLocationID`](/documentation/ImageCaptureCore/ICDevice/usbLocationID)

The USB location that the device is occupying.

[`usbProductID`](/documentation/ImageCaptureCore/ICDevice/usbProductID)

The USB Product ID (PID) associated with the device.

[`usbVendorID`](/documentation/ImageCaptureCore/ICDevice/usbVendorID)

The USB Vendor ID (VID) associated with the device.

### Inspecting a Device’s Transport Type

[`transportType`](/documentation/ImageCaptureCore/ICDevice/transportType)

The hardware connection type the device is using.

[`ICDeviceTransport`](/documentation/ImageCaptureCore/ICDeviceTransport)

The hardware connection types a device can use.

### Inspecting a Device’s Capabilities

[`capabilities`](/documentation/ImageCaptureCore/ICDevice/capabilities)

The capabilities of the device as reported by the device module.

[`ICDeviceCapability`](/documentation/ImageCaptureCore/ICDeviceCapability)

Constants that describe the capabilities of a camera.

[`ICSessionOptions`](/documentation/ImageCaptureCore/ICSessionOptions)

Session options for altering the delivery of the device contents.

### Subscribing to Device Status Notifications

[`ICDeviceStatus`](/documentation/ImageCaptureCore/ICDeviceStatus)

The status types that a device might deliver while in use.

### Managing a Device

[`delegate`](/documentation/ImageCaptureCore/ICDevice/delegate)

The delegate to receive messages once a session is opened on the device.

[`ICDeviceDelegate`](/documentation/ImageCaptureCore/ICDeviceDelegate)

Methods for responding to device events and changes.

[`hasOpenSession`](/documentation/ImageCaptureCore/ICDevice/hasOpenSession)

A Boolean value that indicates whether the device has an open session.

[`requestOpenSession()`](/documentation/ImageCaptureCore/ICDevice/requestOpenSession())

Requests to open a session on the device.

[`requestOpenSession(options:completion:)`](/documentation/ImageCaptureCore/ICDevice/requestOpenSession(options:completion:))

Requests to open a session on the device, then executes the completion handler.

[`requestSendMessage(_:outData:maxReturnedDataSize:sendMessageDelegate:didSendMessageSelector:contextInfo:)`](/documentation/ImageCaptureCore/ICDevice/requestSendMessage(_:outData:maxReturnedDataSize:sendMessageDelegate:didSendMessageSelector:contextInfo:))

Asynchronously sends an arbitrary message with optional data to a device.

[`requestCloseSession()`](/documentation/ImageCaptureCore/ICDevice/requestCloseSession())

Requests to close an open session on the device.

[`requestCloseSession(options:completion:)`](/documentation/ImageCaptureCore/ICDevice/requestCloseSession(options:completion:))

Requests to close an open session on the device, then executes the completion handler.

[`requestEject()`](/documentation/ImageCaptureCore/ICDevice/requestEject())

Requests to eject the media if permitted by the device, or to disconnect from a remote device.

[`requestEject(completion:)`](/documentation/ImageCaptureCore/ICDevice/requestEject(completion:))

Requests to eject the media if permitted by the device, or to disconnect from a remote device, then executes the completion handler.

### Configuring a Device’s Characteristics

[`userData`](/documentation/ImageCaptureCore/ICDevice/userData)

A bookkeeping object for client convenience.

[`autolaunchApplicationPath`](/documentation/ImageCaptureCore/ICDevice/autolaunchApplicationPath)

The file system path of an application to launch automatically when this device is added.

[`isRemote`](/documentation/ImageCaptureCore/ICDevice/isRemote)

A Boolean value indicating whether the device is published by the Image Capture device-sharing facility.

### Deprecated Symbols

[`requestEjectOrDisconnect()`](/documentation/ImageCaptureCore/ICDevice/requestEjectOrDisconnect())

Requests to eject the media if permitted by the device, or to disconnect from a remote device.

[`requestYield()`](/documentation/ImageCaptureCore/ICDevice/requestYield())

Requests that device module in control of this device yield control.

[`moduleExecutableArchitecture`](/documentation/ImageCaptureCore/ICDevice/moduleExecutableArchitecture)

The executable architecture of the device module servicing the requests.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)