Skip to main content
Version: Next ๐Ÿšง

iOS SDK changelog

All notable changes to the iOS SDK are documented here. This project follows Semantic Versioning.

Versioningโ€‹

Fedo versions are X.Y.Z. The X.Y part is shared across every part of the product โ€” Android SDK, iOS SDK, backend, and dashboard all move to the same X.Y together, so the same X.Y means the same feature set everywhere. The Z is per platform: each repo bumps its own patch number independently for fixes and platform-specific work.

That is why the iOS SDK starts at 0.4.0 rather than 0.1.0 โ€” it is not the third iOS release, it is the first one, shipping at feature parity with Android 0.4.x on the shared 0.4 line.

[0.5.0] - 2026-10-25โ€‹

Threaded replies, with the same feature set as Android 0.5.0.

Breakingโ€‹

  • FedoConfig(networkTimeout:logLevel:) removed (deprecated since 0.4.0). Use FedoConfig(networkTimeout:logHandler:) and filter on entry.level in the closure
  • FedoLogLevel.none removed. It was only the floor for that initializer; no log entry carries it

Addedโ€‹

  • Threaded replies โ€” Reply button on each comment and a "Replying to @name" strip whose โ“ง cancels the reply and keeps the draft. Unlimited nesting; past the indent cap a reply shows "โ†ณ Replying to @name"
  • Paged comments โ€” comments load in pages as you scroll, ending with "You're all caught up". Each thread shows its first replies inline, the rest behind "Show n more replies"
  • Deleted placeholders โ€” deleting a comment with replies leaves a "Comment deleted" placeholder and keeps the replies; a comment without replies is removed. The delete confirmation says which will happen
  • Plan availability โ€” replying needs a Plus or Pro plan. On Starter there is no Reply button and no strip; existing replies stay visible
  • Toasts โ€” confirm posting, deleting and copying, and explain failures ("This comment was deleted.", "This thread can't take more replies.", "Replies aren't available on this board."). Error toasts stay 4 s so they can be read. A failed reply keeps your text

Changedโ€‹

  • Header count ("1 COMMENT" / "N COMMENTS") includes replies and deleted placeholders
  • A failed comment delete shows a toast instead of the "Couldn't delete comment" alert

0.4.0 โ€” 2026-10-17โ€‹

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 โ€” 2026-10-11โ€‹

Addedโ€‹

  • iOS 27 support โ€” the SDK now runs on iOS 27.

Fixedโ€‹

  • Internal fixes and stability improvements.

0.4.0-beta.2 โ€” 2026-10-06โ€‹

Breaking Changesโ€‹

  • FeedbacksView renamed to FedoFeedbackView โ€” update your call sites to FedoFeedbackView().

Changedโ€‹

  • Status filter moved to a toolbar menu โ€” the filter tabs above the feedback list are replaced by a menu in the navigation bar showing the current status and its count (e.g. All ยท 63).
  • Single initialization โ€” calling Fedo.initialize again now logs an error and does nothing, instead of re-initializing the SDK.
Fedo feedback board on iOS 0.4.0-beta.2: feature request list with an All ยท 63 status filter menu in the toolbar

0.4.0-beta.1 โ€” first iOS releaseโ€‹

Feature parity with the Android SDK 0.4.0.

Addedโ€‹

  • Feedback board โ€” FeedbacksView(), a SwiftUI view with the full flow: list (All / Mine), details, threaded comments, voting, and the feedback editor. Pushes onto the enclosing NavigationStack.
  • Feedback sheet โ€” .presentCreateFeedback(isPresented:) view modifier, a submission-only sheet (title + details) driven by a Bool binding.
  • Setup โ€” Fedo.initialize(apiKey:config:) with FedoConfig (networkTimeout, logLevel).
  • Identity โ€” setUserID, setUserDisplayName, setUserEmail, setUserProperty(_:value:), logout. Anonymous users are created automatically and merged into the identified user.
  • Comment editing โ€” users can edit their own comments.
  • User device properties โ€” device information collected and attached to the user. See User Management.
  • Managed auth โ€” session tokens stored in the Keychain, refreshed automatically, request retried on expiry.
  • Requires iOS 16+, Swift 6.