Repository navigation
Releases: getfedo/fedo-ios
Releases · getfedo/fedo-ios
Release list
0.4.0
Breaking
- Min iOS bumped 16 → 17
- Public globals DEFAULT_NETWORK_TIMEOUT / DEFAULT_LOG_LEVEL removed. FedoConfig defaults unchanged
- FedoLogEntry initializer now internal. Hosts only receive entries
Added
- FedoConfig.logHandler — receive SDK logs as FedoLogEntry instead of OSLog
- Discard confirmation — when leaving feedback editor with unsaved title/details
Changed
- FedoConfig.networkTimeout now total per-request limit (hidden 60 s cap removed)
- Character limits counted in Unicode scalars like backend
- SDK strings rendered verbatim, never looked up in host bundle (always English)
- Blank setUserEmail("") now accepted so hosts can clear email
- FedoFeedbackView must be on NavigationStack; NavigationView / fullScreenCover unsupported
Fixed — user-visible
- Comment timestamps — "N days ago" up to 7 days (Android parity)
- Failed pull-to-refresh on detail shows error banner, keeps comments
- Feedback details screen — Pull-to-refresh no longer cancelled mid-flight
- Loaded comments stay visible when background reload fails
- Feedbacks screen — Pull-to-refresh failure with rows visible shows banner, not silent log
- Comments no longer flash spinner on every detail reload
- Stale refresh/comments errors cleared on successful load/post
- Comment count on list rows updates after post/delete
- Failed comment delete shows "Couldn't delete comment"
- Vote failure banner shows on detail screen, not hidden list
- Empty board shows board empty state + "Suggest a feature", not filter-empty
- Feedback posted before first successful load no longer dropped
- Delete only offered for own feedback in in_review/planned. Else "Can't Delete Feedback"
- Swipe-to-dismiss sheet with unsaved text asks to discard. Edit mode dismisses freely when unchanged
- Watermark bar matches white loading/error/thanks states on iOS
- Friendly "feedback isn't available" placeholder in Release when SDK not initialized
- .tint() now drives vote glyph, send button, comment highlight, avatar fallback
- Malformed feedback/comment item skipped + logged instead of failing whole list
- Unknown feedback status decodes as "Unknown", listed under Closed
Fixed — session / identity
- Session — app kill mid-write can't mix users' token+id
- Fresh anonymous session when API key changes
- Logout clears core token + cached feedback; drops previous user's in-flight responses
- Late token refresh after logout/user change no longer restores old user
- setUserID no longer replaced by queued anonymous-user creation
- User data no longer printed in logs
0.4.0-beta.3
- fix/vote-main-thread-publish: Deliver feedback and comment updates on the main thread, fixing the "Publishing changes from background threads" warning when voting from the feedback detail screen
- fix/buildWarnings: fix build warning - due to macos + xcode updates
- watermark-bar-all-screens: Pin the "Powered by Fedo" watermark as a bottom bar on every screen, with the iOS 26 scroll-edge fade
0.4.0-beta.2
0.4.0-beta.1
First public beta.
Added
Setup
Fedo.initialize(apiKey:config:)— one call at launch starts the SDK. A blank API key
is logged and ignored rather than crashing the host app.FedoConfigwithnetworkTimeout(seconds, default 30) andlogLevel(default
silent). Defaults live inDEFAULT_NETWORK_TIMEOUTandDEFAULT_LOG_LEVEL.FedoLogLevel— severity threshold for SDK logging, routed to the unified logging
system under thefedo.sdksubsystem.
Feedback UI
FeedbacksView— the feedback board: list, detail, comments, and composer. Pushes
onto the enclosingNavigationStack.presentFedoCreateFeedback(isPresented:)— aViewmodifier that presents a standalone
feedback composer as a sheet, for lightweight "Suggest a feature" entry points.- Feedback list with status filters, sorting by status then votes then recency, and
swipe-to-refresh. - Create, edit, and delete your own feedback; vote on anyone's.
- Comments on a feedback item: create, edit, and delete, with inline animations.
- Character limits with live counters — 200 for titles, 5,000 for details, 2,000 for
comments. - Empty, loading, and error states throughout, each with retry where a retry makes sense.
- A placeholder screen when the SDK is presented before
initializewas called (DEBUG
builds only).
User identity
setUserID(_:)— identifies the current user. Optional: until it's called, an
anonymous user is created automatically, and identifying later merges that anonymous
user's feedback, votes, and comments into the identified one.setUserDisplayName(_:),setUserEmail(_:), andsetUserProperty(_:value:)for
profile metadata.logout()— clears the session and starts a fresh anonymous user.- Device metadata (platform, model, OS version, locale, time zone, app version, SDK
version) is attached to the user profile to give feedback context on the dashboard.
Session handling
- Session tokens are stored in the Keychain, scoped to the device, and cleared on a
fresh install so a reinstall doesn't inherit the previous install's session. - Expired tokens are refreshed automatically on a
401and the original request is
retried once. Concurrent refreshes are collapsed into a single in-flight call.
Distribution
PrivacyInfo.xcprivacydeclaring collected data types and theUserDefaults
required-reason API. The SDK does no tracking and touches no advertising identifiers.- DocC documentation on the full public API.
- Swift 6 language mode, iOS 16+.
Data collected: see https://getfedo.com/privacy