Skip to main content
Xcode forward compatibility restored in SDK 8.0.0The Xcode 26 compatibility issue caused by RealmSwift binaries has been fully resolved in SDK 8.0.0. The cache layer has been migrated from Realm to Core Data, eliminating the Realm dependency entirely and restoring forward compatibility across Xcode versions. We recommend upgrading to 8.0.0 or later to remove any Xcode version constraints from your project.See the iOS SDK v8 Migration Guide for full upgrade instructions.
New Releases

🚀 New Features

GIF Attachments on Posts

Posts can now carry GIFs that your app picks from its own GIF provider. A GIF is a URL, not an uploaded file.
  • Create or edit: pass AmityGifData(url:width:height:) values to AmityMixedMediaPostBuilder.setGifs(_:). GIFs can sit beside images, videos, files and audio, up to 10 attachments in total. A post with only GIFs has the gif structure type; a post that mixes GIFs with other media is mixed.
  • Read: GIF child posts have the new AmityPostDataType.gif data type. Call AmityPost.getGifInfo() on a child post to get its AmityGifData, and AmityPost.PostData gains a gif(text:data:) case.
  • Editing: the GIF list you pass on edit is the full set to keep, so pass back each kept GIF from getGifInfo(). AmityMixedMediaPostBuilder.removeAllAttachments() removes every attachment and turns the post into a text post. Edit GIF posts with AmityMixedMediaPostBuilder, not AmityImagePostBuilder, which would drop the GIFs.

GIF Attachments on Comments

A comment or reply can now hold one GIF through AmityCommentAttachment.gif(url:width:height:), with the new AmityCommentDataType.gif data type.
  • Create, reply and edit send the GIF as an attachment. On edit, a new GIF replaces the old one, and an empty attachment list removes it while keeping the text.
  • Query filters: the .any and .exact data type filters accept .gif.
  • Validation: the URL must use https, end in .gif, and be at most 2,000 characters. Its host must be on the network’s allow list, or the call fails with AmityErrorCode.linkNotAllowed (400309).

🧩 Compatibility

📘 API Reference — 8.12.0

Improvements

🐞 Bug Fixes

  • Fixed the SDK sending unnecessary requests for the current user each time the realtime connection connected or reconnected.

🧩 Compatibility

📘 API Reference — 8.11.1

New Releases

🚀 New Features

Child Endangerment Report Reason

Added AmityContentFlagReasonType.childEndangerment, so users can report posts, comments, messages and user behavior for child endangerment. It is sent as “Child endangerment”, which the Console moderation feed can filter on.

Report Reason List from the SDK

AmityContentFlagReasonType.allCases is now the report-reason list in display order, with .childEndangerment second and .others last. Build your reason picker from it:
  • key: a stable snake_case identifier, the same on every platform. Use it to look up a translated label.
  • defaultLabel: the canonical English label, to show when no translation exists.
New reasons can arrive in minor releases, so add @unknown default to any switch over AmityContentFlagReasonType. The legacy AmityContentFlagReason is unchanged and does not get the new reason.

🧩 Compatibility

📘 API Reference — 8.11.0

New ReleasesImprovements

🚀 New Features

Flag Reasons with Optional Detail

Added AmityContentFlagReasonType, a reason category with no attached text, and new flag overloads that take it with an optional detail:
  • flagPost(withId:reason:detail:), flagComment(withId:reason:detail:) and flagMessage(withId:reason:detail:).
  • flagPost(withId:) flags a post without a reason, using .communityGuidelines, matching the comment and message calls. flagMessage(withId:) is no longer deprecated.
  • The overloads that take the legacy AmityContentFlagReason are deprecated. For .others(text), pass reason: .others, detail: text.

Separate User Profile and Behavior Reports

AmityUserRepository has two purpose-built user reports:
  • flagUserProfile(withId:field:comment:) reports a profile field, an AmityUserProfileField (displayName, description or avatar).
  • flagUserBehavior(withId:reason:comment:) reports behavior with an AmityContentFlagReasonType.
  • Both trim comment and omit it when blank. A comment over 300 characters fails with invalidParameter before any request is sent.
  • flagUser(withId:) files a report with no type. The four-parameter flagUser(withId:reportType:reason:comment:) is deprecated.

Per-Type User Flag Read-Back and Unflag

  • AmityUser.isFlaggedByMe: whether the current user has reported this user. The observed user updates if the answer changes.
  • AmityUser.getUserFlagsByMe(): returns an AmityUserFlagByMe with the current user’s reports on that user, one AmityUserFlag (report type, reason, comment, date) per report.
  • unflagUser(withId:reportType:): removes one type of report with an AmityUserReportTypeFilter (displayName, description, avatarFileId, behavior or untyped). Leave it nil to remove them all.
  • AmityUserRepository.isUserFlaggedByMe(withId:) is deprecated in favor of AmityUser.isFlaggedByMe and getUserFlagsByMe().

Sort Channels by Last Message

AmityChannelQueryOptions takes a new sortBy: AmityChannelSortBy. .lastActivity is the default and keeps today’s order. .lastMessage lists channels by newest message first, and only a new message moves a channel. AmityChannel.lastMessageAt exposes the time of the latest message.

✨ Improvements

  • Added a searchBy parameter to AmityChannelMembership.searchMembers(displayName:searchBy:filterBuilder:roles:includeDeleted:) to choose which user fields the keyword matches, for example display name only when looking up a user to mention in chat. Left empty, it matches all searchable fields as before.
  • Added AmityErrorCode.globalMute (400313), returned when a network-wide mute blocks an action, and AmityErrorCode.unsafeContent (400314), returned when a safety check rejects submitted content.

🐞 Bug Fixes

  • Fixed the “Sexual content or nudity” reason being sent with the wrong value when flagging posts, comments, messages and users.
  • Fixed a fetched community invitation missing its inviter and target community.

🧩 Compatibility

📘 API Reference — 8.10.0

New Releases

🚀 New Features

Module Settings

Read which product modules your network is entitled to, so your app can hide features the network does not have.
  • Read it: AmityClient.getModuleSettings() returns an AmityModuleSettings, or nil before the first successful fetch. The SDK fetches it after login and keeps the last value if a refresh fails, so it also works offline.
  • Check a module: availability(of:) takes an AmityModule, and availability(ofKey:) takes a raw key for modules this SDK version does not know yet. Each returns an AmityModuleAvailability with isAvailable and isGranted, and names any unmet prerequisites.
  • Enforcement: AmityModuleSettings.enforcement is an AmityModuleEnforcementMode (off, shadow, enforce). Under off, every module works even when it is not granted.
  • Updates: AmityModuleSettings.didUpdateNotification is posted on the main thread after each successful fetch.
  • Refused calls: when the network lacks a module a call needs, the call fails with AmityErrorCode.moduleNotEntitled (400325) as an AmityModuleNotEntitledError whose modules lists every missing module.

🧩 Compatibility

📘 API Reference — 8.9.0

New ReleasesImprovements

🚀 New Features

Comment Approval for Communities

A community can now require review before a new comment is visible. While a comment is pending, only its author, the community’s reviewers, and network admins can see it. It stays out of public comment lists and comment counts until a reviewer approves it. See Comment Review.
  • Turn it on: AmityCommunityDataBuilder.setNeedApprovalOnCommentCreation(_:) on create or update. Read it back with AmityCommunity.isCommentReviewEnabled.
  • Approval status: AmityComment.approvalStatus is an AmityCommentApprovalStatus (pending, approved, rejected).
  • Create without a local copy: AmityCommentCreateOptions(isOptimistic: false) skips the local comment, so the comment you get back carries the server’s approval status. The default, true, keeps today’s behavior.
  • Review queue: AmityCommentRepository.getCommentReviewQueue(with:) returns the community’s pending comments as an AmityCollection<AmityComment>. Narrow it to one post or a date range with AmityCommentReviewQueueQueryOptions.
  • Approve or decline: AmityCommentRepository.approveComment(withId:) and declineComment(withId:reason:). Declining deletes the comment. The optional reason (at most 250 characters) is kept for the moderation record only.
  • Permission: reviewers need AmityPermission.reviewCommunityComment.
  • Editing while pending: AmitySocialSettings.isAllowEditCommentWhenReviewingEnabled tells you whether an author may edit a pending comment.
  • Realtime: an approved comment appears as soon as it is approved, through the comment.approved event. A declined comment arrives as a deletion.

Curated Content

Fetch the posts selected for a topic configured in the Console, and build your own discovery surface around them. A pool is one bounded, ranked result with no pagination, and the SDK keeps the server’s order. See Topic-based Content Discovery.
  • Fetch a pool: AmityCuratedContentRepository.getPool(topicId:limit:) is an async throws call that returns an AmityCuratedContentPool. limit must be between 1 and 100.
  • Analytics: AmityCuratedContentTopic.analytics (AmityCuratedContentAnalytics) provides markAsViewed(), markPostAsViewed(postId:), and markPostClick(postId:).

Pin Message in Live Channels

Pin one message in a live channel so it stays visible above the chat. Pinning a new message replaces the current pin. The server clears the pin when the message is deleted or its author is banned from the channel or globally. See Pin and Unpin Messages.
  • Pin and unpin: AmityMessageRepository.pinMessage(withId:) and unpinMessage(withId:).
  • Read the pin: AmityChannel.pinnedMessage holds the current pinned message, or nil when nothing is pinned.
  • Permission: AmityPermission.pinMessage. Channel moderators, and livestream hosts and co-hosts, have it by default. Channel role changes now update a member’s permissions in real time, so a promoted or demoted member’s pin permission changes immediately.
  • Realtime: the observed AmityChannel updates on every pin and unpin, driven by the channel.messagePinned and channel.messageUnpinned events.

Typed Network Activity Observation

Added AmityClient.observeNetworkActivities(_:), a typed observer that supports multiple observers and replaces the previous single-slot callback. It returns a cancellable AmityNetworkActivityToken and delivers AmityNetworkActivity records for HTTP, upload, download, and MQTT traffic. Each record is labeled with an AmityNetworkActivityType and carries real timings and byte counts. The previous observeNetworkActivities((URLRequest?, HTTPURLResponse?, Data?) -> Void) overload is deprecated but still works.

✨ Improvements

  • Added AmityPost.getLocalCommentCount(includePending:). By default, the count leaves out the current user’s own comments that are still awaiting approval. Pass true to include them. AmityPost.localCommentCount is now deprecated and equals getLocalCommentCount(includePending: true).

🧩 Compatibility

📘 API Reference — 8.8.0

New ReleasesImprovements

🚀 New Features

Configurable Search Fields

Added a search user type and a searchBy option to control which fields user search matches.

Livestream Viewer Configuration

Added livestream viewer configuration.

v4 Sessions

Updated the loginWithAccessToken API endpoint to use v4 sessions.

🐞 Bug Fixes

  • Fixed the avatar relationship not clearing when avatarFileId is emptied.

🧩 Compatibility

📘 API Reference — 8.7.0

New ReleasesImprovements

🚀 New Features

Event Posts

Added event-post support: an event shared to a community feed is delivered as a post (post dataType event), resolves through the event repository, and renders alongside regular posts.

🐞 Bug Fixes

  • Fixed a notification-tray seen-state issue.
  • Fixed staging regressions.

🧩 Compatibility

📘 API Reference — 8.6.0

Improvements

🐞 Bug Fixes

  • Fixed permission values to match the backend.

🧩 Compatibility

📘 API Reference — 8.5.4

Improvements

🐞 Bug Fixes

  • Fixed the query stream retaining objects that have left their context.

🧩 Compatibility

📘 API Reference — 8.5.3

Improvements

🐞 Bug Fixes

  • Fixed the query stream reactor incorrectly processing items from a foreign entity.

🧩 Compatibility

📘 API Reference — 8.5.2

Improvements

🐞 Bug Fixes

  • Fixed channel unread-count handling and channel data persistence.

🧩 Compatibility

📘 API Reference — 8.5.1

New ReleasesImprovements

🚀 New Features

Report User

Updated the report-user API to report a user profile with a reason.

✨ Improvements

  • Dropped the MQTT will message as part of the MQTT protocol alignment.

🐞 Bug Fixes

  • Fixed getArchivedChannels() to fetch and persist the channel list.
  • Fixed the sort order of the archived chats list.

🧩 Compatibility

📘 API Reference — 8.5.0

Improvements

🐞 Bug Fixes

  • Fixed issues with channel archiving.

🧩 Compatibility

📘 API Reference — 8.4.0

New ReleasesImprovements

🚀 New Features

For You Feed

Added the personalized For You feed. Query it with getForYouFeed() and gate the surface on the network setting so the feed only renders when For You is enabled for the network.

Bidirectional Block Visibility

Added the reverse direction of the blocking model — the ability to read the users who have blocked the current user, alongside the existing blocked-user list.Updated the shareable-link configuration API with a typed AmitySharableContentType, so links can be generated per content type (post, community, user, livestream, event) via isEnabled(_:) and generateLink(_:referenceId:).

🐞 Bug Fixes

  • Fixed a message reaction bug.
  • Fixed event community being lost when the payload omits it.
  • Fixed a notification-tray item “seen” state issue.

🧩 Compatibility

📘 API Reference — 8.3.0

Improvements

🐞 Bug Fixes

  • Fixed a SIGSEGV crash in PostCommentCountEngine.

🧩 Compatibility

📘 API Reference — 8.2.1

New ReleasesImprovements

🚀 New Features

Community Tag Filtering

Added tags parameter to AmityCommunityQueryOptions. Pass a list of tags to getCommunities() to narrow results to communities matching all specified tags.

Visitor Daily Usage Limit

Added detection for the visitor daily read quota (100 req/day, error code 400323). When a visitor exceeds this limit, the SDK detects the error and emits an event via AmityClient.getVisitorUsageLimitEvents() -> AnyPublisher<AmityVisitorUsageLimitEvent, Never>.

🐞 Bug Fixes

  • Fixed event bus observation not being torn down during AmityClient initialization, causing stale observers.

🧩 Compatibility

📘 API Reference — 8.2.0

Improvements

🐞 Bug Fixes

  • Fixed a crash when SDK APIs are called before AmityClient is set up.

🧩 Compatibility

📘 API Reference — 8.1.4

Improvements

🐞 Bug Fixes

  • Fixed analytic data sync issue in the SDK.

🧩 Compatibility

📘 API Reference — 8.1.3

Improvements

🐞 Bug Fixes

  • Fixed stale session data issue after secure logout.

🧩 Compatibility

📘 API Reference — 8.1.2

Improvements

🐞 Bug Fixes

  • Fixed issue where mentionees value becomes empty when multiple posts contain the same mentioned user.

🧩 Compatibility

📘 API Reference — 8.1.1

Improvements

🐞 Bug Fixes

  • Fixed issue where users couldn’t RSVP to some events.
  • Made timestamp properties createdAt and updatedAt non-optional for some models.

🧩 Compatibility

📘 API Reference — 8.1.0

New Releases

🚀 New Features

Core Data-Powered Cache Layer

Migrate the SDK’s local cache from Realm to Core Data, eliminating the Realm and RealmSwift dependencies. This fully restores Xcode forward compatibility — no more per-Xcode-version SDK variants are required.

🚨 Breaking Changes

Realm Dependency Removed

Realm and RealmSwift are no longer bundled with or required by the SDK. Remove these libraries from your project’s dependencies when upgrading to 8.0.0.See the iOS SDK v8 Migration Guide for a full list of breaking changes, renamed APIs, and upgrade steps.

🧩 Compatibility

📘 API Reference — 8.0.0

New ReleasesImprovements

🚀 New Features

Auto-Retry for MQTT Topic Subscriptions

Add an automatic retry mechanism for MQTT topic subscriptions, improving connection resilience when subscriptions fail due to transient network issues.

🐞 Bug Fixes

  • Fixed AmityCollection for posts emitting redundant updates when the underlying data had not changed.

Specific Xcode support

26.4 => 7.19.126.4.1 => 7.19.1-xcode26.4.126.3 => 7.19.1-xcode26.326.2 => 7.19.1-xcode26.2

🧩 Compatibility

New Releases

🚀 New Features

Live Thumbnail and Resolution in AmityRoom

Add liveThumbnailUrl, liveResolution, and recordedResolution fields to AmityRoom to expose server-generated thumbnail and stream resolution data.Add link detection support to comment create/update APIs, enabling automatic link parsing in comment text.

Root Comment and Latest Comment ID in Query

Add rootId and latestCommentId fields to the comment query API for improved comment threading and navigation.

Page Size for Get Comments

Add pageSize parameter to getComments API for more granular control over comment pagination.

Specific Xcode support

26.4 => 7.19.026.3=> 7.19.0-xcode26.326.2 => 7.19.0-xcode26.2

🐞 Bug Fixes

  • Fixed LiveCollection observation not being removed when an error occurs on loading the next page.

🧩 Compatibility

New Releases

🚀 New Features

Product Tagging in Posts

Introduce AmityProduct and AmityProductTag models with product search API, enabling users to tag up to 20 products per post via text mentions and per-media tags. Supports creating and updating posts with product tags.

Livestream Product Tagging

Introduce product management APIs for livestream(Room) post — tag, pin, and remove products across all broadcast phases.

Specific Xcode support

26.3 => 7.18.116.x => 7.18.1-xcode16.426.2 => 7.18.1-xcode26.2

🧩 Compatibility

New Releases

🚀 New Features

Get All Blocked Users

Introduce getAllBlockedUsers(completion:) on AmityUserRepository — returns the full list of blocked users (up to 100) as a non-paginated, one-shot async result with a 5-minute TTL cache.

Excluding Roles in Community Member Queries

Add excludingRoles parameter to getMembers() and searchMembers(). Members holding any of the specified roles are excluded from the live collection result.

Time-Bounded Post Pagination

Add untilAt parameter to getPosts, getCommunityFeed, and getUserFeed queries. When provided, the SDK stops fetching and collecting posts beyond the given datetime boundary.

Specific Xcode support

26.2 => 7.17.016.x => 7.17.0-xcode16.426.1 => 7.17.0-xcode26.1

26.3 => 7.17.0-xcode26.3

🧩 Compatibility

New Releases

🚀 New Features

Thread Safety

All of CRUD API, AmityObject and AmityCollection API are now safe to be called from any actors.

Authentication

Introduce an ability to login with a pre-fetched accessToken.

Comment Count

Introduce a local calculated comment count based on incoming real-time events.

Community Post Query by Tags

Introduce an ability to community posts with matching tags.

Specific Xcode support

26.2 => 7.15.016.x => 7.15.0-xcode16.426.1 => 7.15.0-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Thread safety

  • Introduce two new static initializer method in AmityClient to initialize client safely in any thread
  • Mark AmityClient as @unchecked Sendable

Specific Xcode support

26.2 => 7.14.1-beta416.x => 7.14.1-beta4-xcode16.426.1 => 7.14.1-beta4-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Livestream analytics

Introduce AmityRoomAnalytics for the purpose of tracking watch minute

Specific Xcode support

26.2 => 7.15.016.x => 7.15.0-xcode16.426.1 => 7.15.0-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Thread safety

  • Enable LiveObject/Collection to be initialized from any actors
  • Ensure thread safety on AmityClient props and functions.

Specific Xcode support

26.2 => 7.14.1-beta316.x => 7.14.1-beta3-xcode16.426.1 => 7.14.1-beta3-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Thread safety

  • Ensure thread safety on topic subscription.

Specific Xcode support

26.2 => 7.14.1-beta216.x => 7.14.1-beta2-xcode16.426.1 => 7.14.1-beta2-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Thread safety

  • Enable CRUD functions to called from any actors
  • Ensure public model(except AmityClient) properties are thread-safe.

Specific Xcode support

26.2 => 7.14.1-beta116.x => 7.14.1-beta1-xcode16.426.1 => 7.14.1-beta1-xcode26.1

🧩 Compatibility

New Releases

🚀 New Features

Livestream Post with Room

Introduce Room service, an upgrade and a replacement forstream

Event

Introduce Event service, enabling event scheduling

Community Member Query

Introduce lastJoin sorting option

Specific Xcode support

26.1 => 7.14.016.x => 7.14.0-xcode16.426.2 => 7.14.0-xcode26.2

🧩 Compatibility

New ReleasesImprovements

🚨 Compatibility Changes

Xcode 26.1 support

  • The binary is now built with Xcode 26.1, ensuring compatibility with Xcode 26.1 and later. The minimum toolchain version is now Xcode 26.1. Earlier Xcode versions are no longer supported.

🧩 Compatibility

New ReleasesImprovements

🚨 Compatibility Changes

Xcode 26 support

  • The binary is now built with Xcode 26, ensuring compatibility with Xcode 26 and later. The minimum toolchain version is now Xcode 26. Earlier Xcode versions are no longer supported.

🧩 Compatibility

New Releases

🚀 New Features

Mixed Attachments Post

  • Support mixed structure post where a post can contains multiple datatypes such as image, video, file, and audio.

Audio Content Support

  • Support audio file upload.
  • Introduce audio dataType for post.

🧩 Compatibility

New Releases

🚀 New Features

Public Access

  • Added loginAsVisitor() function, enables user to interact as a visitor.

🧩 Compatibility

New Releases

🚀 New Features

Child stream

  • Support child stream creation where a child stream can be linked to a parent stream.

Poll

  • Added unvotePoll() function, enables user to update poll answer.

Preview members

  • Added getPreviewMembers() on AmityChannel, enables access upto 4 members of converation and community channel.

🧩 Compatibility

New Releases

🚀 New Features

PII detection

  • Added detected PII data to post, comment, and message.

Hashtag

  • Support adding hashtag to a post.
  • Support post search by hashtag.

User feed

  • Support new sources of posts on user feed. feedSources can be selected on user.

Post title

  • Support optional title on post creation.

🧩 Compatibility