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.
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.
This repository contains a demo app that demonstrates different types of hints and tutorials. To try it out, open and run the
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.
You may find interesting
- 2020-09-09 09:20:40
This version adds a new
- 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.
Onboardinghas more logic.
Onboardinghas been disconnected from
Tutorialare now base classes instead of protocols.
Tutorialno longer implements
Onboarding, and are only data carriers.
StandardTutorialhave been removed.
DeferredOnboardinghas been renamed to
OnboardingPresenter, but add no extra logic.
Tutorialno 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.
AlertingHintPresenternow 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.
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:
DeferredHintprotocol is removed and the
StandardDeferredHinthas been renamed to
DeferredHint. This makes the class hierarchy a lot easier to manage.
DeferredTutorialprotocol is removed, and the
StandardDeferredTutorialhas been renamed to
DeferredTutorial, just as the hints above.
LocalizedTutorialclass has been removed. Instead, this functionality is now accessible by using a new
- 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
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.