<!--
{
  "availability" : [
    "iOS: 17.0 -",
    "iPadOS: 17.0 -",
    "macCatalyst: 17.0 -",
    "macOS: 14.0 -",
    "tvOS: 16.0 -",
    "visionOS: 1.0 -",
    "watchOS: 10.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "TipKit",
  "identifier" : "/documentation/TipKit",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "TipKit"
    ],
    "preciseIdentifier" : "TipKit"
  },
  "title" : "TipKit"
}
-->

# TipKit

Display tips that help people discover features in your app.

## Overview

Use TipKit to show contextual tips that highlight new, interesting, or unused features people haven’t discovered on their own yet.

![A conceptual image showing general tips added to general apps.](images/com.apple.TipKit/tipkit_hero@2x.png)

Define your tip content, and the conditions under which they appear, with the [`Tip`](/documentation/TipKit/Tip) protocol. Then draw attention to new features using the [`TipView`](/documentation/TipKit/TipView).

As you design tips for your app, ensure you don’t overwhelm your users. Use tips sparingly to highlight nonobvious features people haven’t discovered on their own. Similarly, avoid displaying tips each time someone uses your app. Tips can become distracting when they appear unnecessarily. Don’t use tips to guide people through your app, or for advertising and promotion purposes.

For design guidance on tips, see [Human Interface Guidelines > Offering help](https://developer.apple.com/design/human-interface-guidelines/offering-help).

> Related session from WWDC24: Session 10070: [Customize feature discovery with TipKit](https://developer.apple.com/videos/play/wwdc2024/10070/)

> Related session from WWDC23: Session 10229: [Make features discoverable with TipKit](https://developer.apple.com/videos/play/wwdc2023/10229/)

```swift
import SwiftUI
import TipKit

// Define your tip's content.
struct FavoriteLandmarkTip: Tip {
    var title: Text {
        Text("Save as a Favorite")
    }

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

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

@main
struct LandmarkTips: App {
    // Create an instance of your tip.
    var favoriteLandmarkTip = FavoriteLandmarkTip()

    var body: some Scene {
        WindowGroup {
            VStack {
                // Place the tip view near the feature you want to highlight.
                TipView(favoriteLandmarkTip, arrowEdge: .bottom)

                Image(systemName: "star")
                    .imageScale(.large)
                Spacer()
            }
            .task {
                // Configure and load your tips at app launch.
                do {
                    try Tips.configure()
                } 
                catch {
                    // Handle TipKit errors
                    print("Error initializing TipKit \(error.localizedDescription)")
                }
            }
        }
    }
}
```

## Topics

### Essentials

[Highlighting app features with TipKit](/documentation/TipKit/HighlightingAppFeaturesWithTipKit)

Bring attention to new features in your app by using tips.

### Content

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

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

[`TipGroup`](/documentation/TipKit/TipGroup)

A collection of tips that can be presented one at a time using a specific
order or based on the first tip eligible for display.

### Configuration

[`configure(_:)`](/documentation/TipKit/Tips/configure(_:))

Loads and configures the persistent state of all tips in your app.

[`cloudKitContainer(_:)`](/documentation/TipKit/Tips/ConfigurationOption/cloudKitContainer(_:))

Sets the CloudKit container used for syncing tips.

[`datastoreLocation(_:)`](/documentation/TipKit/Tips/ConfigurationOption/datastoreLocation(_:))

Specify a custom location for your tips datastore.

[`displayFrequency(_:)`](/documentation/TipKit/Tips/ConfigurationOption/displayFrequency(_:))

Customizes how often new tips are presented in your app after another tip has been displayed.

### Views

[`TipView`](/documentation/TipKit/TipView)

A user interface element that represents an inline tip.

  <doc://com.apple.documentation/documentation/SwiftUI/View/popoverTip(_:arrowEdge:action:)>

### UIKit Views

[`TipUIView`](/documentation/TipKit/TipUIView)

A user interface element that represents a tip in UIKit applications.

[`TipUIPopoverViewController`](/documentation/TipKit/TipUIPopoverViewController)

A view controller that displays a popover tip in UIKit applications.

[`TipUICollectionViewCell`](/documentation/TipKit/TipUICollectionViewCell)

A collection view cell that embeds a tip.

[`TipUICollectionReusableView`](/documentation/TipKit/TipUICollectionReusableView)

A UICollectionReusableView subclass that represents a tip.

### AppKit Views

[`TipNSView`](/documentation/TipKit/TipNSView)

A user interface element that represents a tip in AppKit applications.

[`TipNSPopover`](/documentation/TipKit/TipNSPopover)

A subclass of NSPopover that displays a popover tip in AppKit applications.

### Display rules

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

A condition to meet before displaying a tip.

[`Parameter`](/documentation/TipKit/Tips/Parameter)

A type that monitors the state of its wrapped value to reevaluate any dependent tip rules when the value changes.

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

A repeatable user-defined action.

### View Style

  <doc://com.apple.documentation/documentation/SwiftUI/View/tipViewStyle(_:)>

[`TipViewStyle`](/documentation/TipKit/TipViewStyle)

A type that applies custom appearance to all tips within a view hierarchy.

[`TipViewStyleConfiguration`](/documentation/TipKit/TipViewStyleConfiguration)

The container type that holds a tip’s configuration.

[`MiniTipViewStyle`](/documentation/TipKit/MiniTipViewStyle)

The default style for a TipView.

### Testing

[`showAllTipsForTesting()`](/documentation/TipKit/Tips/showAllTipsForTesting())

Show all tips regardless of their display rule eligibility or display frequency status for UI testing of tips.

[`showTipsForTesting(_:)`](/documentation/TipKit/Tips/showTipsForTesting(_:))

Show specified tips regardless of their display rule eligibility or display frequency status for UI testing of certain tips.

[`hideAllTipsForTesting()`](/documentation/TipKit/Tips/hideAllTipsForTesting())

Hide all tips regardless of their display rule eligibility for UI testing without tips.

[`hideTipsForTesting(_:)`](/documentation/TipKit/Tips/hideTipsForTesting(_:))

Hide specified tips regardless of their display rule eligibility for UI testing without certain tips.

[`resetDatastore()`](/documentation/TipKit/Tips/resetDatastore())

Resets the tips’ datastore to the initial state for re-testing tip display rules and eligibility.

### Common types

[`AnyTip`](/documentation/TipKit/AnyTip)

A type-erased tip value.

[`TipKitError`](/documentation/TipKit/TipKitError)

A localized tip kit error.

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

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



---

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)
