Releases: FastComments/fastcomments-ios
Releases · FastComments/fastcomments-ios
1.5.0
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
.taskbefore media, so a task card with an image is reachable (matches Android'sdeterminePostType) - 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
onMediaClickconsumer is registered - FullImageSheet: TabView-based gallery, per-page zoom/pan state,
GestureMask-gated pan so it doesn't starve page swipe, content-derivedIdentifiableid, screen-fit asset selection,displayScale-based pixel target (no deprecatedUIScreen.main)
1.4.0
Adds follow/unfollow to feed posts.
Full Changelog: 1.3.2...1.4.0
1.3.2
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.
FastCommentsFeedViewnow pauses live updates ononDisappearand resumes them ononAppearwithout 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.
CommentInputBarandRichTextEditornow shareLayoutconstants (16pt horizontal, 10pt vertical) for a more comfortable tap target and consistent insets. - Cross-platform builds.
FeedPostCreateViewthumbnail generation andAnimatedImageViewnow compile on macOS via#if canImport(UIKit)/AppKitfallbacks, unblocking SwiftPM builds and tests outside iOS. - Dependency bump.
fastcomments-swiftupgraded to1.3.3to pick up an upstream deadlock fix.
Bug Fixes
loadMore()is now reentrancy-safe. Guards against duplicate concurrent calls, duplicate cursors, andhasMore == false. Posts already in the feed are de-duplicated, andhasMoreis now derived fromcount == pageSizerather
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 soloadIfNeeded()does the right thing after state restoration.
Testing
- New
FeedLifecycleUITests,FeedComposerUITests, andFeedIntegrationTestscovering pagination dependability, lifecycle re-entry, and composer flows. - Reliability fixes for
CommentCRUDIntegrationTests,SortingIntegrationTests, andVoteIntegrationTests. - New
UITestBaselifecycle helpers and a dedicatedUITestHarnessViewsharness in the example app.
Migration Notes
- Existing code calling
try? await sdk.load()inside.task { }should switch totry? await sdk.loadIfNeeded()to preserve scroll position and pagination across navigation. - If you previously called
sdk.cleanup()inonDisappear, you can remove it —FastCommentsFeedViewhandles pause/resume on its own. Only callcleanup()when discarding the SDK instance.
1.3.1
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
FeedImageCachewith cost-based eviction (~50MB limit) replaces per-view caches - Fixed crash from reference cycles in URLSession completions during image loading
- GIF support via native
UIImageViewanimation
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
feedMediaHeightandcornerRadius
Full Changelog: 1.3.0...1.3.1
1.3.0
1.2.0
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.descriptionfor 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
-benchmarkflag.
Live Chat
- Fixed live chat to start scrolled to bottom with upward infinite scroll.
1.1.0
What's Changed
- Fixes image uploads when creating feed posts.
- Image Uploads: Memory-efficient image handling: images are streamed to disk via
FileRepresentationinstead of loading fully into memory; thumbnails generated from disk viaCGImageSource - 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