Common flows

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

Show feedback

Use showFeedback() to open the default feedback experience:

UserJot.showFeedback()

Do not pass board: in 0.3.0. That helper builds /boards/{slug}, and the live route is /board/{slug}.

Show roadmap

UserJot.showRoadmap()

Show changelog

showChangelog() exists, but in 0.3.0 it opens /changelog. The public route is /updates, with no redirect, so this call does not work yet.

Presentation styles on iOS

On iOS, UserJot surfaces are presented as native sheets.

The SDK currently supports multiple presentation styles:

UserJot.showFeedback()                                // default
UserJot.showFeedback(presentationStyle: .sheet)       // full-height sheet
UserJot.showFeedback(presentationStyle: .mediumSheet) // medium sheet on supported versions

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, the cleanest pattern is usually a state-driven modifier:

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 has no SwiftUI modifier in 0.3.0. Call showRoadmap() from a button action instead.

Common product pattern

A typical settings or help screen might expose both:

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:

let feedbackURL = UserJot.feedbackURL()
let roadmapURL = UserJot.roadmapURL()

changelogURL() has the same /changelog path issue as showChangelog().

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 and showRoadmap for the fastest path.
  • Use .userJotFeedback when feedback presentation should be state-driven.
  • Use the URL methods when you need full control over presentation.