Common flows

Shayan TaslimUpdated

Once the SDK is set up, the most common work is presenting feedback, the roadmap, and updates from the right places in your app.

Show feedback

Use showFeedback() to open the default feedback experience:

Swift
UserJot.showFeedback()

Pass a board's slug to open that board directly:

Swift
UserJot.showFeedback(board: "features")

Show roadmap

Swift
UserJot.showRoadmap()

Show updates

Swift
UserJot.showUpdates()

Presentation styles on iOS

On iOS, UserJot surfaces are presented as native sheets.

The SDK currently supports multiple presentation styles:

Swift
UserJot.showFeedback()                                // default
UserJot.showFeedback(presentationStyle: .sheet)       // full-height sheet
UserJot.showFeedback(presentationStyle: .mediumSheet) // medium-height sheet

Choose the style that fits the surrounding app flow. For example, a medium sheet can work well for lightweight feedback entry, while the full-height sheet gives the content more room.

SwiftUI flow

For SwiftUI apps on iOS, the cleanest pattern is usually a state-driven modifier:

Swift
import SwiftUI
import UserJot

struct ContentView: View {
    @State private var showingFeedback = false

    var body: some View {
        Button("Send Feedback") {
            showingFeedback = true
        }
        .userJotFeedback(isPresented: $showingFeedback)
    }
}

Roadmap and updates have no SwiftUI modifier. Call showRoadmap() or showUpdates() from a button action instead.

Common product pattern

A typical settings or help screen might expose both:

Swift
struct SettingsView: View {
    @State private var showingFeedback = false

    var body: some View {
        List {
            Button("Send Feedback") {
                showingFeedback = true
            }

            Button("View Roadmap") {
                UserJot.showRoadmap()
            }
        }
        .userJotFeedback(isPresented: $showingFeedback)
    }
}

Use your own presentation container

If you do not want the SDK to control presentation, you can ask it for the underlying URLs and load them in your own WebView or app container. The URL methods are async because they wait for the SDK to load your board's address, and they return nil if the board is unavailable:

Swift
let feedbackURL = await UserJot.feedbackURL()
let roadmapURL = await UserJot.roadmapURL()
let updatesURL = await UserJot.updatesURL()

That is the better fit when:

  • your app already has a custom WebView shell

  • you need tighter control over navigation or chrome

  • you want UserJot inside an existing in-app presentation system

Choosing the right approach

  • Use showFeedback, showRoadmap, and showUpdates for the fastest path.

  • Use .userJotFeedback when feedback presentation should be state-driven.

  • Use the URL methods when you need full control over presentation.

Did this answer your question?