<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -",
    "macOS: 27.0.0 -",
    "visionOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "MetricKit",
  "identifier" : "/documentation/MetricKit/DiagnosticResult",
  "metadataVersion" : "0.1.0",
  "role" : "Enumeration",
  "symbol" : {
    "kind" : "Enumeration",
    "modules" : [
      "MetricKit"
    ],
    "preciseIdentifier" : "s:9MetricKit16DiagnosticResultO"
  },
  "title" : "DiagnosticResult"
}
-->

# DiagnosticResult

An enumeration that represents a single diagnostic event from a diagnostic report.

```
enum DiagnosticResult
```

## Discussion

`DiagnosticResult` unifies all diagnostic event types into a single enum. Each associated value is a typed diagnostic struct that carries a [`CallStackTree`](/documentation/MetricKit/CallStackTree) and additional event-specific properties such as hang duration, total CPU time, or launch duration.

Access the result through [`result`](/documentation/MetricKit/DiagnosticReport/result) after iterating over [`diagnosticReports`](/documentation/MetricKit/MetricManager/diagnosticReports). Switch over the result to handle each diagnostic type:

```swift
for await report in manager.diagnosticReports {
    switch report.result {
    case .crash(let diagnostic):
        handleCrash(diagnostic)
    case .hang(let diagnostic):
        handleHang(diagnostic)
    case .cpuException(let diagnostic):
        handleCPUException(diagnostic)
    case .diskWriteException(let diagnostic):
        handleDiskWriteException(diagnostic)
    case .appLaunch(let diagnostic):
        handleAppLaunchDiagnostic(diagnostic)
    @unknown default:
        break
    }
}
```

## Topics

### Call stack

[`struct CallStackTree`](/documentation/MetricKit/CallStackTree)

A tree structure representing a collection of call stacks captured during a diagnostic event.

### Diagnostic results

[`struct CrashDiagnostic`](/documentation/MetricKit/CrashDiagnostic)

A diagnostic report that describes a crash that occurred.

[`struct HangDiagnostic`](/documentation/MetricKit/HangDiagnostic)

A diagnostic for an app that was too busy to handle user input responsively.

[`struct CPUExceptionDiagnostic`](/documentation/MetricKit/CPUExceptionDiagnostic)

A diagnostic for a fatal or nonfatal CPU exception.

[`struct DiskWriteExceptionDiagnostic`](/documentation/MetricKit/DiskWriteExceptionDiagnostic)

A diagnostic for a disk write exception.

[`struct AppLaunchDiagnostic`](/documentation/MetricKit/AppLaunchDiagnostic)

A diagnostic report for an app launch.

[`struct MemoryExceptionDiagnostic`](/documentation/MetricKit/MemoryExceptionDiagnostic)

A diagnostic MetricKit generates when your app or extension terminates because it exceeds the memory limit.

### Enumeration Cases

[`case appLaunch(AppLaunchDiagnostic)`](/documentation/MetricKit/DiagnosticResult/appLaunch(_:))

[`case cpuException(CPUExceptionDiagnostic)`](/documentation/MetricKit/DiagnosticResult/cpuException(_:))

[`case crash(CrashDiagnostic)`](/documentation/MetricKit/DiagnosticResult/crash(_:))

[`case diskWriteException(DiskWriteExceptionDiagnostic)`](/documentation/MetricKit/DiagnosticResult/diskWriteException(_:))

[`case hang(HangDiagnostic)`](/documentation/MetricKit/DiagnosticResult/hang(_:))

[`case memoryException(MemoryExceptionDiagnostic)`](/documentation/MetricKit/DiagnosticResult/memoryException(_:))

## Relationships

### Conforms To

[`Sendable`](/documentation/Swift/Sendable)

[`Decodable`](/documentation/Swift/Decodable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

[`Encodable`](/documentation/Swift/Encodable)

---

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)