Skip to content

Releases: FastComments/fastcomments-ios

1.5.0

08 May 19:58

Choose a tag to compare

Full-screen image viewer for feed posts

Tapping any image in the feed (single-image, multi-image, or task card) now opens a swipeable full-screen pager with per-page pinch-to-zoom, double-tap-at-point zoom, and bounded pan. Mirrors the behavior of FullImageDialog on Android.

Changes

  • FeedPostType: links-bearing posts are now classified as .task before media, so a task card with an image is reachable (matches Android's determinePostType)
  • FeedPostRowView: task cards now render their optional media, and all image taps route through a single handler that presents the built-in viewer only when no onMediaClick consumer is registered
  • FullImageSheet: TabView-based gallery, per-page zoom/pan state, GestureMask-gated pan so it doesn't starve page swipe, content-derived Identifiable id, screen-fit asset selection, displayScale-based pixel target (no deprecated UIScreen.main)

1.4.0

14 Apr 00:31

Choose a tag to compare

Adds follow/unfollow to feed posts.

Full Changelog: 1.3.2...1.4.0

1.3.2

06 Apr 23:08

Choose a tag to compare

Highlights

  • New loadIfNeeded() API for feeds. Resumes live updates and preserves pagination on screen re-entry instead of resetting back to page 1. Use this in .task { } for any screen the user can navigate away from and back to.
  • Automatic pause/resume of live updates. FastCommentsFeedView now pauses live updates on onDisappear and resumes them on onAppear without tearing down loaded posts. cleanup() is reserved for when you are truly done with
    the SDK instance.
  • "New posts" banner moved to a safe-area inset. The banner now overlays the top of the feed correctly instead of pushing content down inside the scroll view.

Improvements

  • Configurable, larger input padding. CommentInputBar and RichTextEditor now share Layout constants (16pt horizontal, 10pt vertical) for a more comfortable tap target and consistent insets.
  • Cross-platform builds. FeedPostCreateView thumbnail generation and AnimatedImageView now compile on macOS via #if canImport(UIKit) / AppKit fallbacks, unblocking SwiftPM builds and tests outside iOS.
  • Dependency bump. fastcomments-swift upgraded to 1.3.3 to pick up an upstream deadlock fix.

Bug Fixes

  • loadMore() is now reentrancy-safe. Guards against duplicate concurrent calls, duplicate cursors, and hasMore == false. Posts already in the feed are de-duplicated, and hasMore is now derived from count == pageSize rather
    than "any results returned."
  • loadNewPosts() no longer drops posts that arrive mid-refresh. The buffered count is decremented by what was actually consumed instead of being zeroed.
  • restorePaginationState() now correctly marks the SDK as already-loaded so loadIfNeeded() does the right thing after state restoration.

Testing

  • New FeedLifecycleUITests, FeedComposerUITests, and FeedIntegrationTests covering pagination dependability, lifecycle re-entry, and composer flows.
  • Reliability fixes for CommentCRUDIntegrationTests, SortingIntegrationTests, and VoteIntegrationTests.
  • New UITestBase lifecycle helpers and a dedicated UITestHarnessViews harness in the example app.

Migration Notes

  • Existing code calling try? await sdk.load() inside .task { } should switch to try? await sdk.loadIfNeeded() to preserve scroll position and pagination across navigation.
  • If you previously called sdk.cleanup() in onDisappear, you can remove it — FastCommentsFeedView handles pause/resume on its own. Only call cleanup() when discarding the SDK instance.

1.3.1

04 Apr 03:58

Choose a tag to compare

Live Feed

  • The feed is now live via a "Show N New Posts" banner.
  • Comment count stats update without replacing post objects, preventing layout thrashing
  • Only replace posts in the feed when content actually changes (not stats-only updates)

Blocking UI

  • Blocked users now show "Blocked User" label with avatar, badges, vote controls, reply button, and flag button all hidden
  • Block/unblock actions use a confirmation alert dialog

Image & Memory Fixes

  • Unified FeedImageCache with cost-based eviction (~50MB limit) replaces per-view caches
  • Fixed crash from reference cycles in URLSession completions during image loading
  • GIF support via native UIImageView animation

Theme

  • New customizable properties: feedContentPadding, feedAvatarSize, feedMediaHeight, feedActionIconSize
  • Feed post layout now respects theme values instead of hardcoded dimensions

Bug Fixes

  • Fixed double URL-encoding of presence polling requests that broke online indicators
  • Presence polling now uses an isolated session with correct percent-encoding
  • Image carousel respects theme feedMediaHeight and cornerRadius

Full Changelog: 1.3.0...1.3.1

1.3.0

03 Apr 04:50

Choose a tag to compare

Bump fastcomments-swift to 1.3.0

1.2.0

01 Apr 04:00

Choose a tag to compare

What's New

Performance

  • Live chat scroll optimization: Added render windowing to LiveChatView — only the most recent 500 messages are rendered, with older messages loaded on demand as the user scrolls up. Scroll FPS at 100k comments improved from ~1 to ~47.
  • HTML parse caching: Added NSCache for parsed HTML content in HTMLContentView to avoid redundant WebKit-backed parsing on repeated content (capped at 500 entries).
  • Stable cache keys: HTML cache keys now use resolved RGBA color components instead of Color.description for deterministic behavior across iOS versions and appearance changes.

Benchmark

  • Added 100k comment benchmark demo in ExampleApp with FPS monitoring, memory tracking, and programmatic scroll stress testing. Launchable via -benchmark flag.

Live Chat

  • Fixed live chat to start scrolled to bottom with upward infinite scroll.

1.1.0

31 Mar 23:43

Choose a tag to compare

What's Changed

  • Fixes image uploads when creating feed posts.
  • Image Uploads: Memory-efficient image handling: images are streamed to disk via FileRepresentation instead of loading fully into memory; thumbnails generated from disk via CGImageSource
  • Image Uploads: Temp file cleanup: files are cleaned up on submit, cancel, and photo selection change
  • Post Comments: Fix feed post comments: comments widget now uses correct post: prefixed urlId
  • Comment count refresh: post stats are re-fetched when dismissing the comments sheet

v1.0.0

31 Mar 00:36

Choose a tag to compare

Initial Release