Installation

Install the Swift SDK with Swift Package Manager, then initialize it with your UserJot project ID during app startup.

Requirements

Before installing, make sure your app meets these minimum requirements:

  • iOS 15.0+ or macOS 12.0+
  • Swift 6.1+
  • Xcode 16.3+

Install with Swift Package Manager

In Xcode

  1. Open your project in Xcode.
  2. Go to FileAdd Package Dependencies.
  3. Enter this package URL:
https://github.com/UserJot/userjot-ios
  1. Add the package to your app target.

In Package.swift

If you manage dependencies in Package.swift, add UserJot to your package dependencies:

dependencies: [
    .package(url: "https://github.com/UserJot/userjot-ios", from: "0.3.0")
]

Verify the package is available

After installation, confirm the SDK imports correctly:

import UserJot

If the project builds, the package is installed correctly.

Find your project ID

You need your UserJot project ID before calling setup(...).

In your UserJot dashboard, open SettingsLogin and copy Project ID from the Secrets section. Keep it available to your app startup code.

Initialize the SDK

Call UserJot.setup(projectId:) once when the app starts:

import UserJot
 
UserJot.setup(projectId: "YOUR_PROJECT_ID")

SwiftUI example

import SwiftUI
import UserJot
 
@main
struct MyApp: App {
    init() {
        UserJot.setup(projectId: "YOUR_PROJECT_ID")
    }
 
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

UIKit example

import UIKit
import UserJot
 
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
    ) -> Bool {
        UserJot.setup(projectId: "YOUR_PROJECT_ID")
        return true
    }
}

Verify the integration

setup returns immediately and fetches the public URL in the background. There is no async result and no readiness callback. Calling showFeedback() on the same tick as setup can show nothing, because that URL is still nil.

Present from a later user action instead:

Button("Send Feedback") {
    UserJot.showFeedback()
}

If the view opens, the SDK is installed and initialized. UserJot.feedbackURL() stays nil until the background fetch finishes.

macOS note

For sandboxed macOS apps, enable outbound network access in your entitlements:

<key>com.apple.security.network.client</key>
<true/>

Without that entitlement, the SDK will not be able to load remote content.