noun: a place for presenting something favourably to general attention
It's a way to embed easily some view controllers in your application in order to showcase what you've done.
You can showcase simple views with dummy data as well as you can showcase complete flows. It's all up to you.
The general idea is to be able to showcase something your working on before you finish the whole feature, that way you can still merge it in your mainline branch - that's what we call real Continuous Integration.
- iOS 8.0+
- Xcode 9.0+
- Swift 4.1+
Add the following to your Podfile
:
pod "ShowcaseKit"
https://github.com/heetch/ShowcaseKit
using Xcode 11 SPM integration
All you have to do is to create a new class conforming to Showcase
.
The only required implementation is makeViewController()
.
final class MyAwesomeFeatureShowcase : Showcase {
func makeViewController() {
// Setup any kind of view controller here and return it
}
}
ShowcaseKit comes with a handy ready-to-use showcase browser allowing you to easily order your showcase. You can present this browser as a modal in a single line:
ShowcasesViewController.present(over: self)
Or you can simply init it to embed it the way you want (in an exisitng navigation controller, or a tab bar controller):
let browser = ShowcasesViewController(showcases: .all)
ShowcasesViewController
must be in a UINavigationController
at some point, because it needs to push
some other controllers
You can override 3 defaults showcase properties.
static var title: String { get }
By default, the title is inferred from the Showcase class name by the Showcase
suffix and turning the camel case string into a capitalized string.
MyAwesomeFeatureShowcase → My Awesome Feature
But you con override this in your showcase to give a custom name.
final class MyAwesomeFeatureShowcase : Showcase {
static let title = "My Awesome Feature (empty state)"
func makeViewController() {...}
}
static var path: ShowcasePath { get }
By default, showcases are all added the root of the browser, in an unnamed section. But you can customize that with the following code.
static let path = ShowcasePath.root
.underSection(named: "Sign Up")
.inFolder(named: "Onboarding")
Here, to access the showcase we'll have to go the the Sign Up
table view section, and open the Onboarding
folder.
static var presentationMode: ShowcasePresentationMode { get }
By default, showcase are pushed to the current navigation controller. But sometimes you need to control presentation and dismiss. So you can change the presentationMode
to .modal
. But you will have to handle the dismiss of your showcase.
SwiftUI Previews and Showcases work so well together. You can leverage the power of SwiftUI Previews during the development phase, and make these previews available in your app as Showcases so everyone in your team (QA, Product Managers, etc...) can try them once you're done.
For that, you just have to make your Showcase conforming to PreviewProvider
and implement the static var previews: some View
requirement with at least one call to preview()
.
import SwiftUI
final class MyAwesomeFeatureShowcase : Showcase, PreviewProvider {
//...
@available(iOS 13, *)
static var previews: some View {
preview()
}
}
But you can also group multiple calls to preview()
so you can preview your showcase on multiple environments at once.
import SwiftUI
final class MyAwesomeFeatureShowcase : Showcase, PreviewProvider {
//...
@available(iOS 13, *)
static var previews: some View {
Group {
preview(on: "iPhone SE")
preview(on: "iPhone X")
preview(on: "iPhone X").environment(\.colorScheme, .dark)
}
}
}
This framework is provided under the MIT license.