Feddy, plus three SwiftUI helpers for showing unread counts. Everything else is internal, so this page is the complete list of what you can call.
Requirements: iOS 15 or later, Swift 5.9 or later, no other packages. Package URL https://github.com/FeddyLab/feddy-ios, product Feddy.
Feddy.configure(projectId:apiURL:)
projectId: copied from Settings → Install in the dashboard. Public by design; see Create a project.apiURL: leave the default in production. Point it at a local server during development.
Feddy.present()
configure, it logs [Feddy] present() called before configure(projectId:) and does nothing.
Feddy.presentNewConversation()
present(), but opens straight onto the new-message screen.
Feddy.identify(userId:email:name:avatarUrl:attributes:)
configure. What happens on the server, including how records from different devices merge, is in Identify users.
userId: your own stable ID for the user, 1 to 128 characters.email: optional. Lets replies reach the user by email once your project has a verified email domain.name: optional. Shown in the inbox.avatarUrl: optional. Anhttp(s)URL of a picture you already have of the user, shown in the inbox. Anything else is ignored.attributes: optional facts about the user, such as their plan. Values may beString,Bool, any number, orDate; aDateis sent as text like2026-09-22T10:00:00Z. Other types are dropped on the device. Server-side limits are listed in Identify users.
Feddy.unreadCount(_:)
completion on the main thread.
Feddy.refresh()
Feddy.onUnreadCountChanged
Feddy.replyPopupsEnabled
false before a screen that must not be interrupted, such as a paywall or a game level, and back to true afterwards; a waiting reply then shows.
View.feddyUnreadBadge()
List, Form, and TabView; anywhere else the modifier does nothing.
FeddyUnreadDot
showsCount: true to draw the number inside the marker.
FeddyUnread
What happens on its own
- Identity: the first time the SDK runs, it creates an anonymous ID and stores it in the Keychain, so a user’s history survives reinstalls.
- Language: the sheet ships in English, Simplified Chinese, Traditional Chinese, Japanese, Korean, German, French, Spanish, Brazilian Portuguese, and Russian, and follows the device language. Other languages fall back to English. Text you write in the dashboard, such as topics, is translated on the server according to your project settings.
- Attachments: up to 5 images per message, resized so the longest edge is 3000 px before upload. The picker needs iOS 16; on iOS 15 the attachment row isn’t shown.
- Reply popups: when the app becomes active with a reply the user hasn’t seen, a card slides in at the top of the screen after about two seconds, saying who replied and showing the first two lines of the latest reply. Tapping it opens that conversation. Swiping up dismisses it, and it goes away on its own after 8 seconds (it stays while VoiceOver is on, with a Close action). If several replies are waiting, only the newest shows. Each reply shows at most once, only replies from the last 14 days, and never while the Feddy sheet is open. The SDK draws it over your screen; it isn’t a notification and needs no permission.
- Branding: the name, accent color, and logo users see come from the dashboard, not from code.
- Privacy manifest: the package ships a
PrivacyInfo.xcprivacythat declares what the SDK collects, so there’s nothing for you to add for App Store review.