Swiftpack.co - Package - danielsaidi/Tutti

Version Platform Swift 5.1 License Twitter: @danielsaidi

About Tutti

Tutti helps you create great 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 multiple users. Just specify userId and Tutti will display a hint/tutorial once for every user.


Swift Package Manager



pod 'Tutti'


In Tutti, the Onboarding class is at the core of the onboarding logic. It can be used to apply different onboarding rules and is what determines whether or not a hint or tutorial should be presented.

Check out this onboarding guide for more information on how to work with onboarding.


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

Check out this hint 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.

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

Demo App

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

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: 217

Used By

Total: 0


- 2020-09-09 09:20:40

This version adds a new ConditionalOnboarding type.

- 2020-09-07 13:45:21

This version adds support for macOS, tvOS and watchOS, with several breaking changes.

UIKit is now only required in UIKit-specific files, which means that the rest of the model supports watchOS and macOS.

New functionality:

  • Onboarding has more logic.

Breaking changes:

  • Onboarding has been disconnected from Hint and Tutorial.
  • Onboarding, Hint and Tutorial are now base classes instead of protocols.
  • Hint and Tutorial no longer implements Onboarding, and are only data carriers.
  • StandardOnboarding, StandardHint and StandardTutorial have been removed.
  • DeferredOnboarding has been renamed to DelayedOnboarding.
  • HintPresenter and TutorialPresenter now extend OnboardingPresenter, but add no extra logic.
  • Tutorial no longer have the resourceName(for:at:) logic, but is now built up by generic pages.
  • All hint presenters now require both a hint and an onboarding.
  • All tutorial presenters now require both a tutorial and an onboarding.
  • AlertingHintPresenter now only contains presentation logic.

The demo has been rewritten from scratch, but it still UIKit-based until Xcode 12 is released.

- 2020-06-29 07:44:55

This version updates all external test dependenies to the latest versions.

- 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.