First production release of Feedi, a lightweight, headless, privacy-first feedback SDK for iOS. Your app owns all UI; the SDK handles local validation, minimal metadata, delivery, and receipt decoding.
Features
- Headless submission:
Feedi.configure(apiKey:)plusFeedi.submitFeedback(message:userEmail:customMetadata:). No built-in UI, screenshots, analytics, device identifiers, offline queue, or persistent logging. - Testable surface: depend on the
FeediFeedbackSubmittingprotocol and injectFeedi.shared, or useFeediClientdirectly. - Local validation: message (≤5,000 chars), optional email (basic shape, ≤320 chars), and up to 10 custom metadata entries are validated before any network request.
- Minimal metadata: app version, build number, iOS version, and locale, plus the app's bundle identifier so the backend can bind a write key to a single app.
- Named error model:
FeediErrorcoversnotConfigured, validation failures,appIdentifierMismatch(HTTP 403),rateLimited(429),serverUnavailable(503),requestFailed(statusCode:),transportError, anddecodingError.CancellationErrorpropagates unwrapped. - Swift 6 strict concurrency:
Sendablethroughout,Mutex-backed thread safety, safe to call from any actor. - Fast-failing networking: fixed 15-second request timeout.
- Privacy manifest included (
PrivacyInfo.xcprivacy), no tracking domains, no required-reason API usage.
Requirements
- iOS 18+, Swift 6 (Xcode 26), Swift Package Manager
Install
.package(url: "https://github.com/getfeedi/feedi-ios-sdk", from: "1.0.0")