<!--
{
  "availability" : [
    "iOS: 17.0.0 -",
    "iPadOS: 17.0.0 -",
    "macCatalyst: 17.0.0 -",
    "macOS: 14.0.0 -",
    "tvOS: 17.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 10.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "TipKit",
  "identifier" : "/documentation/TipKit/Tip",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "TipKit"
    ],
    "preciseIdentifier" : "s:6TipKit0A0P"
  },
  "title" : "Tip"
}
-->

# Tip

A type that sets a tip’s content, as well as the conditions for when it displays.

```
protocol Tip : Identifiable, Sendable
```

## Overview

Use this protocol for setting a tip’s content, as well as defining the conditions for when it appears in a view.
You create custom tips by declaring types that conform to the `Tip` protocol.
Set your tip’s content by giving it a [`title`](/documentation/TipKit/Tip/title),  [`message`](/documentation/TipKit/Tip/message),  [`image`](/documentation/TipKit/Tip/image),
and a list of [`actions`](/documentation/TipKit/Tip/actions).

For example, to create a tip with a `title`, `message`, and `image`:

```swift
struct FavoriteBackyardTip: Tip {
    var title: Text {
        Text("Save as a Favorite")
    }

    var message: Text? {
        Text("Your favorite backyards always appear at the top of the list.")
    }

    var image: Image? {
        Image(systemName: "star")
    }
}
```

For a tip to be valid, you need to set its `title`.
To control when a tip displays, pass instances of [`Rule`](/documentation/TipKit/Tip/Rule) and [`Option`](/documentation/TipKit/Tip/Option) into the
[`rules`](/documentation/TipKit/Tip/rules) and [`options`](/documentation/TipKit/Tip/options) properties of the tip.

After you define your tip’s content, display it in either a [`TipView`](/documentation/TipKit/TipView) or a <doc://com.apple.documentation/documentation/SwiftUI/View/popoverTip(_:arrowEdge:action:)>.

## Topics

### Setting tip content

[`title`](/documentation/TipKit/Tip/title)

A title that names the tip.

[`message`](/documentation/TipKit/Tip/message)

A short description of how to use the tip’s feature.

[`image`](/documentation/TipKit/Tip/image)

The image associated with the tip.

[`id`](/documentation/TipKit/Tip/id)

The tip’s unique identifier.

### Controlling when tips appear

[`rules`](/documentation/TipKit/Tip/rules)

The rules that determine when a tip is eligible for display.
For more information on rules, see [`Rule`](/documentation/TipKit/Tips/Rule).

[`Rule`](/documentation/TipKit/Tip/Rule)

A condition to meet before displaying a tip.

[`Event`](/documentation/TipKit/Tip/Event)

A repeatable user-defined action.

### Customizing tip behavior

[`options`](/documentation/TipKit/Tip/options)

Customizations for a tip.

[`Option`](/documentation/TipKit/Tip/Option)

A type that represents the various customizations that you can make to a tip’s behavior.

[`IgnoresDisplayFrequency`](/documentation/TipKit/Tip/IgnoresDisplayFrequency)

Controls whether a tip obeys the preconfigured display frequency interval.

[`MaxDisplayCount`](/documentation/TipKit/Tip/MaxDisplayCount)

Specifies the maximum number of times a tip displays before the system automatically invalidates it.

[`MaxDisplayDuration`](/documentation/TipKit/Tip/MaxDisplayDuration)

Specifies the maximum amount of time a tip is displayed before it is invalidated.

### Providing actions

[`actions`](/documentation/TipKit/Tip/actions)

Buttons that help people get started or learn more about your feature.

[`Action`](/documentation/TipKit/Tip/Action)

A type that describes a control associated with a tip.

### Monitoring tip status

[`status`](/documentation/TipKit/Tip/status-swift.property)

The current status of a tip based on its rules and the configured [`displayFrequency(_:)`](/documentation/TipKit/Tips/ConfigurationOption/displayFrequency(_:)).

[`statusUpdates`](/documentation/TipKit/Tip/statusUpdates)

An asynchronous sequence for monitoring a tip’s status changes.

[`shouldDisplay`](/documentation/TipKit/Tip/shouldDisplay)

A Boolean value that determines whether to display a tip.

[`shouldDisplayUpdates`](/documentation/TipKit/Tip/shouldDisplayUpdates)

An asynchronous sequence for monitoring a tip’s display eligibility.

[`Status`](/documentation/TipKit/Tip/Status-swift.typealias)

A type that describes the current display eligibility status for a tip.

[`InvalidationReason`](/documentation/TipKit/Tip/InvalidationReason)

A type that describes why the system permanently invalidated a tip.

### Invalidating a tip

[`invalidate(reason:)`](/documentation/TipKit/Tip/invalidate(reason:))

Permanently invalidates a tip and prevents it from displaying.

[`resetEligibility()`](/documentation/TipKit/Tip/resetEligibility())

Reset a previously invalidated tip.



---

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)