Installation
From package install to a working feedback sheet in one flow — Swift Package Manager, configure, identify, drop in RequestComposeView, verify in the dashboard.
This page takes you from a fresh Xcode project to a working feedback submission landing in your Feddy dashboard. Read top-to-bottom; every section is a step in the same flow.
Requirements
| Item | Version |
|---|---|
| Xcode | 15+ |
| iOS deployment target | 15+ |
| macOS deployment target | 12+ |
| Swift | 5.9+ |
Add the package
The SDK ships through Swift Package Manager. There is no CocoaPods or Carthage variant.
dependencies: [
.package(url: "https://github.com/FeddyLab/feddy-ios", from: "0.7.1")
]Then list Feddy as a product dependency on the target that needs it:
.target(
name: "MyApp",
dependencies: [
.product(name: "Feddy", package: "feddy-ios"),
]
)- File → Add Package Dependencies…
- Paste
https://github.com/FeddyLab/feddy-iosinto the search field - Pick Up to Next Major Version with the latest tag pre-selected
- Click Add Package, then check the Feddy product against the target you want to integrate
Get your Project ID
- Sign up at feddy.app and create a workspace
- Open Settings → API Keys
- Copy the Project ID — it looks like
fed_xxxxxxxxxxxx(thefed_prefix followed by 12 alphanumeric characters)
Project ID vs API Key
The Project ID (fed_xxxxxxxxxxxx) is safe to embed in your client
app — it only grants ingest. The dashboard also generates API Keys
(fed_sk_xxxxxxxxxxxx); those are server-to-server secrets and must
never be shipped in a client. The SDK rejects anything starting with
fed_sk_.
Configure at app launch
Call Feddy.configure(...) exactly once at app launch. It is
synchronous, fire-and-forget, and never throws — errors (invalid key,
network failure) are logged to the console rather than surfacing as a
throw.
import SwiftUI
import Feddy
@main
struct MyApp: App {
init() {
Feddy.configure(apiKey: "fed_xxxxxxxxxxxx")
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}import UIKit
import Feddy
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
Feddy.configure(apiKey: "fed_xxxxxxxxxxxx")
return true
}
}Verify the install
Tap the button below in any view to confirm the SDK is wired up. It will present the bundled feedback sheet — submit a quick test message:
import SwiftUI
import Feddy
struct VerifyButton: View {
@State private var showFeedback = false
var body: some View {
Button("Send Feedback") {
showFeedback = true
}
.sheet(isPresented: $showFeedback) {
RequestComposeView()
}
}
}In the Feddy dashboard, navigate to Inbox — your test submission should appear at the top of the list within a second or two.
Offline retry
If the device was offline at submit time, the SDK queues the payload
locally and replays it on the next Feddy.configure(...) call. You
don't need to handle this manually — but it does mean test submissions
may take a moment to land if you're on a flaky network.
What's next
You're integrated. Continue with: