FeedJar

iOS SDK

FeedJarKit is a small Swift package that ships a built-in feedback screen and a programmatic submit API. It works with iOS 14+ and supports both UIKit and SwiftUI integrations.

Install via Swift Package Manager

In Xcode go to File → Add Packages… and add the FeedJar SDK repository, or add it to your Package.swift:

.package(url: "https://github.com/feedjar/feedjar-sdk-ios", from: "0.1.0")

For local development, point Xcode at the feedjar_sdk_ios folder shipped with this repo.

Production API

FeedJarKit talks to the production ingest API over HTTPS. The base URL is embedded in the SDK — integrators only pass their app fjr_… key via configure.

Configure

import FeedJarKit

@main
struct MyApp: App {
    init() {
        FeedJar.configure(apiKey: "fjr_...")
    }
    var body: some Scene { WindowGroup { ContentView() } }
}

Server-side or custom clients use the same key over HTTP — see the Feedback API.

Use the built-in feedback UI (UIKit)

You choose which categories appear (e.g. only general feedback, or feedback plus feature requests). Use .featureRequest as an alias for .feature. Email is optional for feedback and feature requests (leave blank to omit); support requires a valid email—same rules as FeedJar.submit.

import UIKit
import FeedJarKit

// Default: all three types.
func openFeedback(from controller: UIViewController) {
    FeedJar.presentFeedback(from: controller)
}

// Only general feedback.
func openFeedbackOnly(from controller: UIViewController) {
    FeedJar.presentFeedback(from: controller, allowedTypes: [.feedback])
}

// Feedback + feature request segments.
func openFeedbackAndIdeas(from controller: UIViewController) {
    FeedJar.presentFeedback(
        from: controller,
        allowedTypes: [.feedback, .featureRequest],
        defaultType: .feedback
    )
}

Use the built-in feedback UI (SwiftUI)

import SwiftUI
import FeedJarKit

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

    var body: some View {
        Button("Send feedback") {
            showFeedback = true
        }
        .feedJarFeedbackSheet(
            isPresented: $showFeedback,
            allowedTypes: [.feedback, .featureRequest]
        )
    }
}

Submit programmatically (custom UI)

FeedJar.submit uses the same HTTP endpoint as the form.Support must include a valid email (validated in the SDK).

Task {
    do {
        try await FeedJar.submit(
            type: .featureRequest,
            message: "It would be great if you supported widgets.",
            email: "user@example.com",
            metadata: ["screen": "settings", "appVersion": "1.4.2"]
        )
    } catch {
        print("FeedJar error: \(error)")
    }
}

What gets sent