---
title: StateReporting
framework: StateReporting
role: collection
role_heading: Framework
platforms: [iOS 27.0+, iPadOS 27.0+, Mac Catalyst 27.0+, macOS 27.0+, tvOS 27.0+, visionOS 27.0+, watchOS 27.0+]
path: statereporting
---

# StateReporting

Communicate your app’s state to the system to improve diagnostic actionability.

## Overview

Overview StateReporting lets you define named domains and emit structured state transitions from your app. MetricKit surfaces state context in both state-aggregated and interval-level metric entries. Instruments displays transitions in the Points of Interest instrument so you can cross-reference app state against other profiling data. Each domain holds up to one active state at a time, and you can combine states across domains. For example, your game can track its graphics configuration in one domain and its game mode in another, so you can compare performance across every state combination.

## Topics

### Essentials

- [Getting started with StateReporting](statereporting/getting-started-with-statereporting.md)

### Reporting

- [StateReporter](statereporting/statereporter.md)

### Defining metadata

- [ReportableMetadata](statereporting/reportablemetadata.md)
- [ReportableMetadataValue](statereporting/reportablemetadatavalue.md)

### Metadata type macros

- [ReportableMetadata()](statereporting/reportablemetadata().md)
- [ReportableMetadataKey(_:)](statereporting/reportablemetadatakey(_:).md)
- [ReportableMetadataIgnored()](statereporting/reportablemetadataignored().md)
