Swiftpack.co - Package - danielsaidi/Tutti

Version Platform Swift 5.1 License Twitter: @danielsaidi

About Tutti

Tutti is a Swift library that helps you create onboarding expericences, like quick hints and single- or multi-screen tutorials.

Tutti will only display a hint/tutorial once by default. You can reset the display state of a hint/tutorial if you want to display it multiple times.

Tutti also supports user-specific hints/tutorials. Just set the userId parameter and Tutti will display the hint/tutorial once for every new user.


Swift Package Manager

The easiest way to add Tutti to your project is to use Swift Package Manager:



pod 'Tutti'


github "danielsaidi/Tutti"


To manually add Tutti to your app without a dependency manager, clone this repository, add Tutti.xcodeproj to your project and Tutti.framework as an embedded app binary and target dependency.

Demo App

This repository contains a demo app that demonstrates different types of hints and tutorials. To try it out, open and run the Tutti.xcodeproj project.


Tutti comes with a set of built-in hint types that can be used for different purposes.

  • StandardHint - A basic hint with no specific behavior.
  • DeferredHint - Requires a certain number of presentation attempts before it is presented.
  • CorrectBehaviorHint - Can be used to show a hint when a user is not behaving as intended.

You can also create your own custom hint types by implementing the Hint protocol.

Check out this guide for more information on how to create and present hints.


Tutti comes with a set of built-in tutorial types that can be used for different purposes.

  • StandardTutorial - A basic tutorial with no specific behavior.
  • DeferredTutorial - Requires a certain number of presentation attempts before it is presented.
  • CorrectBehaviorTutorial - Can be used to show a tutorial when a user is not behaving as intended.

You can also create your own custom tutorial types by implementing the Tutorial protocol.

Check out this guide for more information on how to create and present tutorials.

Contact me

I hope you like this library. Feel free to reach out if you have questions or if you want to contribute in any way:


Tutti is available under the MIT license. See LICENSE file for more info.


Stars: 162


Used By

Total: 0


- 2019-09-25 09:00:56

This version makes Package use https references instead of ssh.

- 2019-09-16 09:21:38

This version adds Xcode 11 and iOS 13 support, including support for dark mode and high contrast color variants.

- 2019-03-26 12:49:20

This version upgrades Tutti to Swift 5. The version contains no breaking changes.

- 2018-12-14 08:06:41

In 1.5.0, I added a new way of bumping the build number, by using a time stamp instead of an incremental step. However, the first time I use this, it sets the "library version" flag, for which this format is invalid. This happened in 1.5.0, which meant that it could not be installed with Carthage, nor built in Xcode. This version fixes this error.

- 2018-12-14 08:04:28

This version has new hint and tutorial types. The CorrectBehaviorOnboarding is an onboarding experience that is triggered when a user performs a certain number of incorrect actions. CorrectBehaviorHint and CorrectBehaviorTutorial can be used to build user behavior-based onboarding experiences. There are, however, no demos for these new classes yet.

This version includes a bug fix by @sebbo176, that makes sure that callout hints are presented using the correct superview. This solves a problem where hints did remain on screen even when the main view controller changed.

This version has some breaking changes:

  • The DeferredHint protocol is removed and the StandardDeferredHint has been renamed to DeferredHint. This makes the class hierarchy a lot easier to manage.
  • The DeferredTutorial protocol is removed, and the StandardDeferredTutorial has been renamed to DeferredTutorial, just as the hints above.
  • The LocalizedTutorial class has been removed. Instead, this functionality is now accessible by using a new StandardTutorial initializer.

- 2018-10-04 11:43:15

This version removes presentation logic from hints/tutorials to their presenters. Instead of calling present on your hints and tutorials, now use the presenters.

The presenter protocols have also been refactored. The first parameter names are now implicit.

HintPresenter now has a dismissAllHints() function. It's implemented by some of the presenters, where applicable.

- 2018-10-04 11:35:06

This version extends the Hint and HintPresenter protocols to make presenting a hint from a UIBarButtonItem possible. If you have any custom implementations of these protocols, you must extend them.

CalloutHintPresenter has been improved, so that it can dismiss presented hints. This fixes issue #3.