What changed in v8
SDK v8 is a major release focused on three goals:- Remove Realm — the cache layer is now powered by Core Data, restoring Xcode forward compatibility and removing a heavyweight dependency from your project.
- Modernise the API surface — constructors, async methods, and model objects follow consistent, Swift-idiomatic patterns.
- Expand product tagging and room capabilities — new APIs for product tags, room management, and co-host permissions.
Installation
SDK
Realm and RealmSwift are no longer required as of v8.UIKit
Global breaking changes
These patterns apply across the entire SDK. Per-class sections below only document changes beyond these rules.1. Client removed from constructors
All repositories and managers no longer accept anAmityClient parameter. The SDK manages the client internally.
2. Mutating methods return Void
Methods that previously returned Bool to indicate success now return Void. A successful call means success; any failure throws an error.
3. Completion handlers replaced with async/await
Use async/await directly instead of callback-based completion handlers when enabling features or reading settings.4. Model objects are immutable value snapshots
modelandclientproperties removed from all model classes.- All properties changed from
vartolet. Exceptions are noted per class. - Timestamp properties (
createdAt,updatedAt,editedAt, etc.) changed fromDatetoDate?.
5. AmityCollection observe callback signature changed
AmityCollectionChange has been removed. The callback no longer delivers per-change index information.
Renamed classes
New classes
Removed APIs
Per-class changes
Only changes beyond the global breaking changes are listed here.AmityChannel
AmityChannel
AmityChannelMembership
AmityChannelMembership
init(channelId: String) — no client parameter.AmityChannelModeration
AmityChannelModeration
init(channelId: String) — no client parameter.AmityChannelNotificationsManager
AmityChannelNotificationsManager
- Init signature changed:
init(channelId: String) getSettings()return type is nowAmityChannelNotificationSettings
AmityChannelQueryOptions (was AmityChannelQuery)
AmityChannelQueryOptions (was AmityChannelQuery)
AmityChannelRepository
AmityChannelRepository
AmityClient
AmityClient
editUser(_:) parameter type changed: AmityUserUpdateBuilder → AmityUserUpdateOptionsAmityComment
AmityComment
links: [AmityLink]addedisInvalidatedremoved
AmityCommentCreateOptions
AmityCommentCreateOptions
links: [AmityLink]? added.AmityCommentQueryOptions
AmityCommentQueryOptions
pageSize: Int = 20 added.AmityCommentUpdateOptions
AmityCommentUpdateOptions
links: [AmityLink]? added.AmityCommunity
AmityCommunity
user: AmityUser?added (the community creator/owner)eventproperty removed
AmityCommunityMembership
AmityCommunityMembership
- Init signature changed:
init(communityId: String) getMembers(...)andsearchMembers(...)gainexcludingRoles: [String] = []
AmityCommunityModeration
AmityCommunityModeration
init(communityId: String) — no client parameter.AmityCommunityNotificationsManager
AmityCommunityNotificationsManager
init(communityId: String)AmityCommunityRepository
AmityCommunityRepository
AmityFeedRepository
AmityFeedRepository
AmityFileRepository
AmityFileRepository
getFile(fileId:) return type changed: AmityRawFile → AmityFileAmityImageStoryCreateOptions
AmityImageStoryCreateOptions
tartgetId → targetId. Update all call sites.AmityLiveChannelCreateOptions (was AmityLiveChannelBuilder)
AmityLiveChannelCreateOptions (was AmityLiveChannelBuilder)
setVideoStreamId(_:) is deprecated. Use setRoomId(_:) instead.AmityMentionMapper (deprecated)
AmityMentionMapper (deprecated)
AmityMetadataMapper.AmityMetadataMapper also adds hashtags(fromMetadata:) -> [AmityHashtag].AmityMessageRepository
AmityMessageRepository
AmityPost
AmityPost
postDatatype renamed:AmityPost.Data→AmityPost.PostDatapinnedProductId: String?addedeventId: String?addedisInvalidatedremoved- Remaining mutable properties:
postData,analytics,syncState,mentionees,links
AmityPostQueryOptions
AmityPostQueryOptions
untilAt: Date? added.AmityPostRepository
AmityPostRepository
createXxxPost(...) and editPost(...) methods gain:productTags: [AmityTextProductTag]?attachmentProductTags: AmityAttachmentProductTags?(where applicable)
AmityRoom
AmityRoom
thumbnail: AmityImageData?addedliveThumbnailUrl: String?addedliveResolution: AmityRoomResolution?addedrecordedResolution: AmityRoomResolution?addedisInvalidatedremovedchannelandpostare now externally read-only (public private(set) var)
AmityRoomParticipant
AmityRoomParticipant
canManageProductTags: Bool added.AmityRoomPresenceRepository
AmityRoomPresenceRepository
init(roomId: String) — no client parameter.AmityRoomRepository
AmityRoomRepository
updateCohostPermissions(roomId:cohostId:canManageProductTags:) async throws -> AmityRoomAmityStreamRepository
AmityStreamRepository
disposeStream(withId:completion:) → disposeStream(withId:) async throws -> AmityStreamAmitySubChannelQueryOptions
AmitySubChannelQueryOptions
init(channelId:isDeleted:excludeDefaultSubChannel:) — both new parameters default to false.AmityUser
AmityUser
isBannedremoved- Added:
internalId: String,permissions: [String],path: String,blockedAt: Date?,avatar: AmityImageData?
AmityUserNotificationsManager
AmityUserNotificationsManager
enable(for modules:)returnsVoiddisableAllNotifications()returnsVoid
AmityUserRelationship
AmityUserRelationship
follow(withUserId:),unfollow(withUserId:),acceptMyFollower(withUserId:),declineMyFollower(withUserId:)— return type changed from(Bool, AmityFollowResponse)toAmityFollowResponseblockUser(userId:)andunblockUser(userId:)are now@MainActor
AmityVideoStoryCreateOptions
AmityVideoStoryCreateOptions
tartgetId → targetId. Update all call sites.