It’s all the time necessary to make your app as intuitive as doable. Nevertheless, for some options, it could be useful to supply additional data to show customers the right way to use them successfully. That’s the place TipKit is available in. Launched in iOS 17, TipKit is a framework for displaying ideas in your app, permitting builders to supply extra steering and making certain customers to benefit from your app’s options.
On this tutorial, we are going to discover the TipKit framework and see the right way to create ideas for a demo app utilizing SwiftUI.
Utilizing the TipKit Framework
To make use of the TipKit
framework, it’s important to first import it into your undertaking:
Understanding the Tip Protocol
To create a tip utilizing the TipKit framework, you have to undertake the Tip protocol to configure the content material of the tip. Suggestions include a title and a brief description. Optionally, you possibly can embrace a picture to affiliate with the tip.

For instance, to setup the “Save as favourite” tip, you possibly can create a struct
that conforms to the Tip
protocol like this:
struct FavoriteTip: Tip { var title: Textual content { Textual content(“Save the photograph as favourite”) }
var message: Textual content? { Textual content(“Your favourite photographs will seem within the favourite folder.”) } } |
If you wish to add a picture to the tip, you possibly can outline the picture
property:
struct FavoriteTip: Tip { var title: Textual content { Textual content(“Save the photograph as favourite”) }
var message: Textual content? { Textual content(“Your favourite photographs will seem within the favourite folder.”) }
var picture: Picture? { Picture(systemName: “coronary heart”) } } |
Displaying Suggestions Utilizing Popover and TipView
The TipKit
framework gives the pliability to show ideas both as a popover or an inline view. Within the popover view, it seems over your app’s UI, which might be a button, a picture, or different UI components. However, the inline view behaves like different normal UI components, adjusting its place to suit round different views, making certain that no UI components are blocked.

To indicate the tip as an inline view, you possibly can create an occasion of TipView
and cross it the tip to show. Right here is an instance:
non-public let getStartedTip = GetStartedTip()
var physique: some View { . . .
TipView(getStartedTip)
. . . } |
If you wish to show a tip as a popover view, you possibly can connect the modifier popoverTip
to the button or different UI components:
non-public let favoriteTip = FavoriteTip()
Picture(systemName: “coronary heart”) .font(.system(measurement: 50)) .foregroundStyle(.white) .padding() .popoverTip(favoriteTip, arrowEdge: .high) |
To allow the looks of ideas inside your apps, the ultimate step is to configure the Suggestions
heart. Assuming your Xcode undertaking is called TipKitDemo
, you possibly can change over to TipKitDemoApp
and replace the struct like this:
@major struct TipKitDemoApp: App { var physique: some Scene { WindowGroup { ContentView() .activity { strive? Suggestions.configure([ .displayFrequency(.immediate), .datastoreLocation(.applicationDefault) ]) } } } } |
We are able to customise the show frequency and the info retailer location by using the configure
methodology of the Suggestions
heart. Within the code snippet above, the show frequency is about to instant
, which implies the information will likely be proven straight away. In the event you want the tricks to seem as soon as each 24 hours, you should utilize the .every day
choice. Furthermore, you could have the pliability to customise the show frequency to any desired time interval, as demonstrated within the following instance:
let threeDays: TimeInterval = 3 * 24 * 60 * 60
Suggestions.configure([ .displayFrequency(threeDays), .dataStoreLocation(.applicationDefault) ]) |
With the Suggestions
heart configured, it is best to have the ability to see the information when working the app within the simulator.
Previewing the Suggestions

If you wish to preview the information within the preview canvas, you additionally have to arrange the Suggestions
heart within the #Preview
block. Right here is an instance:
#Preview { ContentView() .activity { strive? Suggestions.resetDatastore()
strive? Suggestions.configure([ .displayFrequency(.immediate), .datastoreLocation(.applicationDefault) ]) } } |
An necessary level to notice is the inclusion of an additional line of code for resetting the info retailer. As soon as a tip is dismissed, it gained’t be displayed once more within the app. Nevertheless, in relation to previewing the app and making certain that the information are persistently proven, it is strongly recommended to reset the info retailer.
Dismissing the Suggestions
Customers have the choice to dismiss a tip by tapping the X image. If there’s a have to dismiss the tip view programmatically, you possibly can make the most of the invalidate
methodology and supply a particular purpose as demonstrated beneath:
getStartedTip.invalidate(purpose: .actionPerformed) |
The explanation actionPerformed
signifies that the consumer carried out the motion that the tip describes.
Specifying Show Guidelines
The Tip
protocol has an optionally available property so that you can set tup the show guidelines of the tip. It helps two forms of guidelines: parameter-based and event-based. Parameter-based guidelines are perfect for displaying ideas based mostly on particular Swift worth sorts. However, event-based guidelines allow you to outline actions that must be fulfilled earlier than a consumer turns into eligible to obtain a tip.
For example, the favourite tip ought to solely be displayed after the “Getting Began” tip. We are able to arrange the parameter-based rule like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
struct FavoriteTip: Tip {
var title: Textual content { Textual content(“Save the photograph as favourite”) }
var message: Textual content? { Textual content(“Your favourite photographs will seem within the favourite folder.”) }
var guidelines: [Rule] { #Rule(Self.$hasViewedGetStartedTip) { $0 == true } }
@Parameter static var hasViewedGetStartedTip: Bool = false } |
Within the code above, we introduce a parameter known as hasViewedGetStartedTip
utilizing the @Parameter
macro, initially set to false
. The guidelines
property incorporates a rule that validates the worth of the hasViewedGetStartedTip
variable, indicating that the tip ought to be displayed when the worth is true
.
When the picture is tapped, the “Getting Began” tip is dismissed. In the identical closure, we are able to set the worth of hasViewedGetStartedTip
to true
.
.onTapGesture { withAnimation { showDetail.toggle() }
getStartedTip.invalidate(purpose: .actionPerformed)
FavoriteTip.hasViewedGetStartedTip = true } |
Upon launching the app, solely the “Getting Began” tip is displayed. Nevertheless, when you faucet the picture to dismiss the tip, the app then presents the “Favourite” tip.

Abstract
On this tutorial, we lined the TipKit framework out there on iOS 17. It’s a useful device for showcasing hidden app options and instructing customers the right way to successfully make the most of them. With TipKit, you possibly can effortlessly create and show tricks to improve the consumer expertise. In the event you discover TipKit helpful, contemplate integrating it into your subsequent app replace for added advantages.
To be taught extra about different SwiftUI ideas, you possibly can try our Mastering SwiftUI guide.