<!--
{
  "availability" : [
    "watchOS: 2.0.0 - 27.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "ClockKit",
  "identifier" : "/documentation/ClockKit/CLKComplication",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "ClockKit"
    ],
    "preciseIdentifier" : "c:objc(cs)CLKComplication"
  },
  "title" : "CLKComplication"
}
-->

# CLKComplication

Metadata about a custom complication.

```
class CLKComplication
```

## Overview

ClockKit defines each complication by its [`family`](/documentation/ClockKit/CLKComplication/family) and [`identifier`](/documentation/ClockKit/CLKComplication/identifier) properties. Each pair represents a unique complication that the user can select when configuring a watch face. When creating timeline entries, check both properties before creating and filling the complication’s template.

You specify the possible [`family`](/documentation/ClockKit/CLKComplication/family) and [`identifier`](/documentation/ClockKit/CLKComplication/identifier) combinations in your data source’s [`getComplicationDescriptors(handler:)`](/documentation/ClockKit/CLKComplicationDataSource/getComplicationDescriptors(handler:)) method. Each of the [`CLKComplicationDescriptor`](/documentation/ClockKit/CLKComplicationDescriptor) objects you provide defines a unique identifier and the families that it supports.

In watchOS 6 and earlier, each app can have only one complication per supported family. When your app creates complication templates, determine the complication’s type from its [`family`](/documentation/ClockKit/CLKComplication/family) property only. For more information, see [Declaring complications for your app](/documentation/ClockKit/declaring-complications-for-your-app).

You don’t create instances of this class directly. Instead, you retrieve them from the [`CLKComplicationServer`](/documentation/ClockKit/CLKComplicationServer) object. Complication objects are only available when your complication is in use on the watch face.

In addition to getting information about the complication, you use complication objects to extend or replace the timeline data for one of your active complications. When calling the [`extendTimeline(for:)`](/documentation/ClockKit/CLKComplicationServer/extendTimeline(for:)) and [`reloadTimeline(for:)`](/documentation/ClockKit/CLKComplicationServer/reloadTimeline(for:)) methods of the shared [`CLKComplicationServer`](/documentation/ClockKit/CLKComplicationServer) object, pass the complication object you want to update.

## Topics

### Accessing Data About the Complication

[`family`](/documentation/ClockKit/CLKComplication/family)

The family to which the complication belongs.

[`identifier`](/documentation/ClockKit/CLKComplication/identifier)

An identifier that specifies a complication if your app supports multiple complications per family.

[`userActivity`](/documentation/ClockKit/CLKComplication/userActivity)

An object that represents the state of the app at a moment in time.

[`userInfo`](/documentation/ClockKit/CLKComplication/userInfo)

A dictionary of additional data associated with the complication.



---

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)