# 2.x iOS Changelog

> \[!NOTE]
>
> If you are starting out with Twilio's Programmable Chat SDK for iOS, we highly recommend starting with version 4.x. Version 4.x is our latest SDK and it brings many new features and improvements to the 1.x and 2.x versions. And it will be much easier to [migrate to Twilio Conversations](/docs/conversations/migrating-chat-conversations).

> \[!WARNING]
>
> **Not using 4.x? You should migrate ASAP**
>
> If you are already using 2.x, we highly recommend planning your migration to 4.x as soon as possible.
>
> **End-of-Life for 1.x occurred on June 30, 2019.**

### Programmable Chat iOS 2.6.6 *(February 5, 2020)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.6/twilio-chat-ios-2.6.6.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.6/docs/)

#### Changes

* Fixed crashes on early deinitialization of a chat client.
* Errors are now more human-readable for debugging purposes.
* Fixed a bug related to `joinChannel` callback. Sometimes it was not called.
* Improved logging.

***

### Programmable Chat iOS 2.6.5 *(November 26, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.5/twilio-chat-ios-2.6.5.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.5/docs/)

#### Changes: \[#changes-2]

* Fixed memory leaks in SDK.
* Fixed a crash in `makeUserDescriptor`.
* Fixed an issue when `isOnline` and `isNotifiable` methods in `TCHUserDescriptor` could return the wrong value.
* Fixed double callbacks call while offline for `addByIdentity:completion:` and `inviteByIdentity:completion` in `TCHMembers`.
* Fixed an issue when SDK could hang on multiple calls of `channelWithCompletion:`.

***

### Programmable Chat iOS 2.6.4 *(October 29, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.4/twilio-chat-ios-2.6.4.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.4/docs/)

#### Changes: \[#changes-3]

* Fixed a bug where `member.subscribedUser(completion)` was not working after calling `unsubscribe()` method.
* Added minimum required iOS version to the start page.
* Added documentation about semi-realtime counters.

***

### Programmable Chat iOS 2.6.3 *(October 11, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.3/twilio-chat-ios-2.6.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.3/docs/)

#### Changes: \[#changes-4]

* Fixed a bug that caused an excessive subscription retry loop on failure, which would lead to an increased network and battery consumption.

***

### Programmable Chat iOS 2.6.2 *(deprecated, please use 2.6.3)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.3/twilio-chat-ios-2.6.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.3/docs/)

#### Changes: \[#changes-5]

* Fixed retrieving member attributes when invoked immediately after client initialization.
* Fixed handling device token in order to correctly support push notifications on iOS 13.

***

### Programmable Chat iOS 2.6.1 *(September 3, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.1/twilio-chat-ios-2.6.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.1/docs/)

#### Changes: \[#changes-6]

* Fixed loading of the framework from an extension.

***

### Programmable Chat iOS 2.6.0 *(August 6, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.0/twilio-chat-ios-2.6.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.6.0/docs/)

#### Changes: \[#changes-7]

* Added the new `type` property to `TCHMember`
* Added new error messages and codes dependent on member's type for `userDescriptorWithCompletion` and `subscribedUserWithCompletion` from `TCHMember`
* Fixed parameter validation for `subscribedUserWithIdentity:completion:` and `userDescriptorWithIdentity:completion:` from `TCHUsers`

> \[!NOTE]
>
> `userDescriptorWithCompletion` and `subscribedUserWithCompletion` from `TCHMember` are available only for members of type `chat`

***

### Programmable Chat iOS 2.5.1 *(July 31, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.5.1/twilio-chat-ios-2.5.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.5.1/docs/)

#### Changes: \[#changes-8]

* Fixed handling of members with empty identity
* Fixed a bug when calling `removeMember` from `TCHMembers`
* Fixed a race condition when invoking `typingStartedOnChannel` / `typingStartedOnChannel` from `TwilioChatClientDelegate`

***

### Programmable Chat iOS 2.5.0 *(July 10, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.5.0/twilio-chat-ios-2.5.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.5.0/docs/)

#### Changes: \[#changes-9]

* Added member and memberSid properties to `TCHMessage`
* Added support for member attributes
* Fixed crash on rapid logging reinitialization, if multiple clients are in use
* Enabled passing nil options when creating a channel
* Improved input parameter validation for channel create operation

***

### Programmable Chat iOS 2.4.8 *(June 28, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.8/twilio-chat-ios-2.4.8.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.8/docs/)

#### Changes: \[#changes-10]

* Improved stability on shutdown, fixed crash issue.
* Fixed memory leaks in media upload
* Fixed crash on media download in bad networking conditions
* Enabled full bitcode support for the framework
* Added debug information and symbols to the framework to enable better diagnostics and troubleshooting

> \[!NOTE]
>
> Features above lead to a significant increase in the size of the distributable. The increased size of the framework has no negative effect on installable applications distributed through App Store, they would remain of a similar size.

***

### Programmable Chat iOS 2.4.6 *(April 11, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.6/twilio-chat-ios-2.4.6.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.6/docs/)

#### Changes: \[#changes-11]

* Improved connection reliability under bad network conditions.
* Fixed unexpected connectivity errors with code 1401: Unable to establish connection to Twilio Sync service.

***

### Programmable Chat iOS 2.4.5 *(February 15, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.5/twilio-chat-ios-2.4.5.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.5/docs/)

#### Changes: \[#changes-12]

* SDK size reduction - it gained over the course of the year, so we sent it to the gym. Native libraries are now repackaged and optimized for size.

***

### Programmable Chat iOS 2.4.4 *(January 31, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.4/twilio-chat-ios-2.4.4.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.4/docs/)

#### Changes: \[#changes-13]

* Fixed strong reference to TCHChannel's delegate that could prevent Chat library from properly shutting down
* Improved stability

***

### Programmable Chat iOS 2.4.3 *(January 21, 2019)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.3/twilio-chat-ios-2.4.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.3/docs/)

#### Changes: \[#changes-14]

* Fixed crash on restoring after disconnected or backgrounded state
* Fixed memory leaks in media upload

***

### Programmable Chat iOS 2.4.2 *(December 6, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.2/twilio-chat-ios-2.4.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.4.2/docs/)

#### Changes: \[#changes-15]

* Introduced Push Notification Muting, with per-channel user notification preferences. A channel's `notificationLevel` can be either `TCHChannelNotificationLevelDefault` to receive notifications or `TCHChannelNotificationLevelMuted` to suppress them.
* added `TCHChannelUpdateUserNotificationLevel` to `TCHChannelUpdate` enum - this update is triggered when channel's notification level is changed.
* NOTE: You need to grant EditNotificationLevel permission to the user roles to be able to change this setting. See [the Chat Permissions documentation](/docs/chat/permissions).
* Added new token lifecycle management delegate callbacks which reduce the need for TwilioAccessManager integration when only using one Twilio client SDK:
  * `chatClientTokenWillExpire:` is called when a token has 3 minutes or less left until expiry and should be refreshed
  * `chatClientTokenExpired:` is called when a token is already expired and must be refreshed to reconnect to the service
* New logging level, `TCHLogLevelTrace`, which provides the most verbose logging level for diagnostics. Use this value to generate logs when reporting SDK issues to Twilio. As before, default log setting is `TCHLogLevelSilent`, producing no SDK debug output at all.
* Added `TCHMemberUpdateAttributes` to `TCHMemberUpdate` enum. There's currently no way to query member attributes, it will be added in the following SDK version.
* Overhauled transport and communication layer, significantly reducing network traffic overhead and improving client performance.
* Provided numerous fixes for improving client stability, focusing on runtime and shutdown crashes.

***

### Programmable Chat iOS 2.3.3 *(July 19, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.3/twilio-chat-ios-2.3.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.3/docs/)

#### Changes: \[#changes-16]

* Updates to shutdown procedure to prevent crashes in rare cases during client disposal.

***

### Programmable Chat iOS 2.3.2 *(July 3, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.2/twilio-chat-ios-2.3.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.2/docs/)

#### Changes: \[#changes-17]

* TwilioChatClient now ships with the dSYM package for each release. See the [extra debugging information for iOS SDKs](/docs/chat/extra-debugging-information-ios-sdks) documentation for more details. In particular we encourage Crashlytics users to review [uploading framework dSYM files](/docs/chat/extra-debugging-information-ios-sdks#uploading-dsym-files-to-fabrics-crashlytics) and [including Twilio SDK version information](/docs/chat/extra-debugging-information-ios-sdks#extended-diagnostic-details-for-fabric-crashlytics-users) in our documentation.
* Updates to internal certificate authority trust store.

***

### Programmable Chat iOS 2.3.1 *(June 19, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.1/twilio-chat-ios-2.3.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.1/docs/)

#### Changes: \[#changes-18]

* Resolved an issue where calling one of the `getMessages*` could result in a crash if called while client was shutting down.

***

### Programmable Chat iOS 2.3.0 *(June 6, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.0/twilio-chat-ios-2.3.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.3.0/docs/)

#### Changes: \[#changes-19]

* Added metadata about the most recently sent message to `TCHChannel`:
  * `lastMessageDate` - the `NSDate` timestamp of the most recent message on the channel
  * `lastMessageIndex` - the index of the most recent message on the channel
* Added method to return a sorted list of the user's subscribed channels:
  * `- (nonnull NSArray<TCHChannel *> *)subscribedChannelsSortedBy:(TCHChannelSortingCriteria)criteria order:(TCHChannelSortingOrder)order`
* Added sorting criteria and order enumerations for new sort method:
  * `TCHChannelSortingCriteriaLastMessage`
  * `TCHChannelSortingCriteriaFriendlyName`
  * `TCHChannelSortingCriteriaUniqueName`
  * `TCHChannelSortingOrderAscending`
  * `TCHChannelSortingOrderDescending`
* Added new `TCHChannelUpdateLastMessage` update type for `chatClient:channel:updated:` delegate method
* Resolved an issue where calling one of the `getMessages*` methods for a channel whose last remaining message was deleted could cause a crash
* Added additional protections against crashes when the client is disposed during startup
* Bug fixes and performance updates

***

### Programmable Chat iOS 2.2.3 *(May 15, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.3/twilio-chat-ios-2.2.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.3/docs/)

#### Changes: \[#changes-20]

* Privacy by default in logging for GDPR. A new logging level has been introduced, `TCHLogLevelSilent`, which is also the new default level. We strongly encourage customers use this logging level for production builds especially if serving European customers.
* Fix for crashes related to logging while the chat client was being disposed.
* Fix for crashes related to delegate events while the chat client was being disposed.
* Fix for notifications where channel SID would sometimes be invalid.

***

### Programmable Chat iOS 2.2.2 *(April 17, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.2/twilio-chat-ios-2.2.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.2/docs/)

#### Changes: \[#changes-21]

* Addressed possible issue where the Chat Client is disposed during startup.

***

### Access Manager iOS 1.1.2 *(April 17, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.1.2/twilio-accessmanager-ios-1.1.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.1.2/docs/)

#### Changes

* Addressed issue where Access Manager could try to call methods on disposed delegate objects.

***

### Programmable Chat iOS 2.2.1 *(March 23, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.1/twilio-chat-ios-2.2.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.1/docs/)

#### Changes: \[#changes-22]

* Resolved issue where passing nil to push token method parameters could lead to a crash.
* Resolved issue where user parameter returned by TCHUserDescriptor's subscribe method could be nil.
* Resolved potential memory leak when uploading media.

***

### Access Manager iOS 1.1.1 *(March 14, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.1.1/twilio-accessmanager-ios-1.1.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.1.1/docs/)

#### Changes \[#changes-2]

* Added static helper methods for evaluating token expiry:
  * `+ (BOOL)isExpired:(nonnull NSString *)token`
  * `+ (BOOL)isExpiring:(nonnull NSString *)token`
* Resolved an issue with some identities containing '?' resulting in not getting token expiry events

***

### Programmable Chat iOS 2.2.0 *(December 21, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.0/twilio-chat-ios-2.2.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.2.0/docs/)

#### Changes: \[#changes-23]

* Dates would sometimes not parse correctly for some locales depending on the date format, resulting in `nil` date objects - they parse consistently now.
* The `body` attribute of messages containing media included the placeholder message intended for legacy client versions, potentially incorrectly inferring the client version did not support media attachments. `body` will now be `nil` if the `TCHMessage` has media content.
* Expanded callbacks delivered from `TwilioChatClient` to support three new notifications:
  * Added to channel notification: `- (void)chatClient:(nonnull TwilioChatClient *)client notificationAddedToChannelWithSid:(nonnull NSString *)channelSid`
  * Invited to channel notification: `- (void)chatClient:(nonnull TwilioChatClient *)client notificationInvitedToChannelWithSid:(nonnull NSString *)channelSid`
  * Removed from channel notification: `- (void)chatClient:(nonnull TwilioChatClient *)client notificationRemovedFromChannelWithSid:(nonnull NSString *)channelSid;`
* `chatClient:notificationNewMessageReceivedForChannelSid:messageIndex:` now consistently returns message index when a new message is received.
* Added `.sid` identifier to `TCHMember` objects.

***

### Programmable Chat iOS 2.1.0 *(November 9, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.1.0/twilio-chat-ios-2.1.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.1.0/docs/)

#### Changes: \[#changes-24]

* BEHAVIORAL CHANGE: Bug-fix for calling TCHChannel's `joinWithCompletion:` or TCHMember's `addByIdentity:completion:` will now correctly return with a failure result if the user/identity is already a member of the channel instead of success.
* Updating the consumption horizon now provides the updated unconsumed message count.

The following methods have been deprecated and for now have the same effect as passing null/nil to the optional completion parameters introduced below:

```bash
- (void)setLastConsumedMessageIndex:(nonnull NSNumber *)index;
- (void)advanceLastConsumedMessageIndex:(nonnull NSNumber *)index;
- (void)setAllMessagesConsumed;
- (void)setNoMessagesConsumed;
```

These methods are replaced with versions that take an optional completion block:

```bash
- (void)setLastConsumedMessageIndex:(nonnull NSNumber *)index completion:(nullable TCHCountCompletion)completion;
- (void)advanceLastConsumedMessageIndex:(nonnull NSNumber *)index completion:(nullable TCHCountCompletion)completion;
- (void)setAllMessagesConsumedWithCompletion:(nullable TCHCountCompletion)completion;
- (void)setNoMessagesConsumedWithCompletion:(nullable TCHCountCompletion)completion;
```

The completion block will convey the newly updated unread message count for the channel for the current user.
These operations will also affect the value returned by TCHChannel's `getUnconsumedMessagesCountWithCompletion:` method, causing the value returned by it to be up to date as of the consumption update the user just performed.

***

### Programmable Chat iOS 2.0.1 *(October 11, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.0.1/twilio-chat-ios-2.0.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.0.1/docs/)

#### Changes: \[#changes-25]

* Both chat client creation and `updateToken:completion:` once again give feedback if the provided token is expired or otherwise invalid.
* Re-connection to the chat server will occur faster when bringing the application to the foreground or the device's network connection recovering while in the application.
* Fixed an issue where the completion for `joinChannel` sometimes was not called.
* Fixed an issue where properties of `TCHMessage` were sometimes not fully populated by the time `sendMessage`'s completion was called.
* Fixed an infrequently occurring crash on chat client startup.

***

### Programmable Chat iOS 2.0.0 *(September 18, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.0.0/twilio-chat-ios-2.0.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/2.0.0/docs/)

*Important:* The behavior of not-present optional data, such as friendlyName, uniqueName, etc, has changed with this release of Programmable Chat iOS to match the REST API and improve usability in Swift. We no longer return an empty string on missing data, returning instead nil. If you are relying on the previous behavior of empty string to be able to directly display these values in your application, you will need to check for the value instead.

With 2.x, we are moving Programmable Chat iOS releases to the global CocoaPods repository. We will no longer be posting non-beta releases for this SDK to the [https://github.com/twilio/cocoapod-specs/](https://github.com/twilio/cocoapod-specs/) location. If you already have the global CocoaPods source in your Podfile no changes are necessary. If you do not have it, you will need to add `source 'https://github.com/cocoapods/specs'` or remove the Twilio specific source line. No changes are necessary if you use manual integration of this SDK.

#### Changes: \[#changes-26]

* Added Multimedia Messaging (beta) API (see [Media Support](/docs/chat/media-support) for more information). *Note:* Sending media messages on existing instances requires [adding a new permission in your channel roles](/docs/chat/media-support#required-role-permission).
* With the addition of support for iOS 11, we are deprecating support for iOS 8 in Programmable Chat iOS 2.x
* `chatClient:channel:updated:` will no longer notify on `TCHChannelUpdateSynchronizationStatus` changes - see the `chatClient:channel:synchronizationStatusUpdated:` delegate call for these updates
* Creation of new messages is no longer a two-step process, `createMessageWithBody:` is deprecated from `TCHMessages`. You now build a new message using the `TCHMessageOptions` object and send with `sendMessageWithOptions:completion:`

Old:

```bash
    TCHMessage *message = [channel.messages createMessageWithBody:@"hello"];
    [channel.messages sendMessage:message completion:^(TCHResult *result) { }];
```

New:

```bash
    TCHMessageOptions *options = [[TCHMessageOptions new] withBody:@"hello"];
    [channel.messages sendMessageWithOptions:options completion:^(TCHResult *result, TCHMessage *message) { }];
```

* Nullability hints and behavior have changed for the sdk. SDK methods will accept either nil or an empty string as an argument for clearing data but will consistently return nil when there is no data set for an optional field to improve usability. This applies to dates and user, channel and message attributes as well.

#### Interface Changes

Changes to nullability hints throughout entire public interface.

##### TCHChannelUpdate

* TCHChannelUpdateSynchronizationStatus (REMOVED - see `chatClient:channel:synchronizationStatusUpdated:`)

##### TCHMessageType (ADDED)

* `+ TCHMessageTypeText`
* `+ TCHMessageTypeMedia`

##### TCHMediaOnStarted (ADDED)

##### TCHMediaOnProgress (ADDED)

##### TCHMediaOnCompleted (ADDED)

##### TCHMessage

* `+ messageType` (ADDED
* `+ mediaSid` (ADDED)
* `+ mediaSize` (ADDED)
* `+ mediaType` (ADDED)
* `+ mediaFilename` (ADDED)
* `- hasMedia` (ADDED)
* `- getMediaWithOutputStream:onStarted:onProgress:onCompleted:completion:` (ADDED)

##### TCHMessages

* `- createMessageWithBody:` (REMOVED)
* `- sendMessage:completion:` migrated to `-sendMessageWithOptions:completion:` completion now provides a handle to the new TCHMessage

***

### Access Manager iOS 1.0.0 *(September 18, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.0.0/twilio-accessmanager-ios-1.0.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/1.0.0/docs/)

#### Changes \[#changes-3]

With 1.x, we are moving Access Manager releases to the global CocoaPods repository. We will no longer be posting non-beta releases for this SDK to the [https://github.com/twilio/cocoapod-specs/](https://github.com/twilio/cocoapod-specs/) location. If you already have the global CocoaPods source in your Podfile no changes are necessary. If you do not have it, you will need to add `source 'https://github.com/cocoapods/specs'` or remove the Twilio specific source line. No changes are necessary if you use manual integration of this component.

***

***

***

## Legacy Versions

### Programmable Chat iOS v1.0

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/v1.0/twilio-chat-ios.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.10/docs/)

### Programmable Chat iOS 1.0.10 *(February 6, 2018)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.10/twilio-chat-ios-1.0.10.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.10/docs/)

### Changes: \[#changes-27]

* Updated internal certificate store for upcoming certificate authority changes.

### Programmable Chat iOS 1.0.9 *(October 11, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.9/twilio-chat-ios-1.0.9.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.9/docs/)

### Changes: \[#changes-28]

* Both chat client creation and `updateToken:completion:` once again give feedback if the provided token is expired or otherwise invalid.
* Re-connection to the chat server will occur faster when bringing the application to the foreground or the device's network connection recovering while in the application.
* Fixed an issue where the completion for `joinChannel` sometimes was not called.
* Fixed an issue where properties of `TCHMessage` were sometimes not fully populated by the time `sendMessage`'s completion was called.

***

### Programmable Chat iOS 1.0.8 *(September 15, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.8/twilio-chat-ios-1.0.8.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.8/docs/)

## Changes \[#changes-4]

* Resolved issue when updating token on chat client after token expiry.

***

### Programmable Chat iOS 1.0.7 *(August 9, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.7/twilio-chat-ios-1.0.7.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.7/docs/)

## Changes \[#changes-5]

* Performance enhancements
* Resolved possible crash during client creation if initialization takes an especially long time

***

### Programmable Chat iOS 1.0.6 *(July 25, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.6/twilio-chat-ios-1.0.6.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.6/docs/)

## Changes \[#changes-6]

* Completion handler for TCHChannel's `join` method will be delayed until the channel is fully synchronized, guaranteeing availability of members and messages objects.

***

### Programmable Chat iOS 1.0.5 *(July 17, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.5/twilio-chat-ios-1.0.5.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.5/docs/)

## Changes \[#changes-7]

* Fixed issues related to thread management, which in many cases should lead to significant performance gains.
* Fixed crashes possible during client shutdown.

***

### Programmable Chat iOS 1.0.4 *(June 21, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.4/twilio-chat-ios-1.0.4.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.4/docs/)

## Changes \[#changes-8]

* Fix bug where TCHChannel's `chatClient:channel:synchronizationStatusUpdated:` delegate method was not called.
* Added channel synchronization status method to chat client delegate.
* Trigger channel's synchronization status delegate method every time a channel delegate is assigned for convenience.
* Resolved issue where TCHMessages' `getLastMessagesWithCount:completion:` could hang.

***

### Programmable Chat iOS 1.0.3 *(June 8, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.3/twilio-chat-ios-1.0.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.3/docs/)

## Changes \[#changes-9]

* Fixed a bug whereby client initialization did not completed correctly - i.e. no success nor failure callback was received for client creation. This was for cases not fixed in the previous release.
* Fixed an issue whereby the SDK could crash in some cases when creating a new Chat Client instance.

***

### Programmable Chat iOS 1.0.2 *(June 2, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.2/twilio-chat-ios-1.0.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.2/docs/)

## Changes \[#changes-10]

* Fixed a bug whereby client initialization did not completed correctly - i.e. no success nor failure callback was received for client creation
* Fixed a bug whereby some commands did not correctly complete - i.e. no success callback nor failure was received

***

### Programmable Chat iOS 1.0.1 *(May 24, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.1/twilio-chat-ios-1.0.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.1/docs/)

## Changes \[#changes-11]

* Fixed a bug whereby after a call to the client's `shutdown` sometimes caused New Message push registrations to be lost for the endpoint.

***

### Programmable Chat iOS 1.0.0 *(May 2, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.0/twilio-chat-ios-1.0.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/1.0.0/docs/)

## Changes \[#changes-12]

* See the [migration guide to 1.0.0](/docs/chat/ios/sdk-migration-guide-ios-10) for full details.

### Classes

#### TwilioChatClient

* `userInfo` migrated to user
* `chatClientWithToken:properties:delegate:` migrated to `chatClientWithToken:properties:delegate:completion:`
* `updateToken:` migrated to `updateToken:completion:`
* `+users` (ADDED)
* `registerWithToken:` migrated to `registerWithNotificationToken:completion:`
* `deregisterWithToken:` migrated to `deregisterWithNotificationToken:completion:`
* `handleNotification:` migrated to `handleNotification:completion:`

#### TCHTwilioClientCompletion (ADDED)

#### TwilioChatClientProperties

* synchronizationStrategy (REMOVED)
* initialMessageCount (REMOVED)

#### TwilioChatClientDelegate

* `chatClient:connectionStateChanged:` renamed to `chatClient:connectionStateUpdated:`
* `chatClient:synchronizationStateChanged:` renamed to `chatClient:synchronizationStateUpdated`:
* `chatClient:channelChanged:` migrated to `chatClient:channel:updated:`
* `- chatClient:channel:synchronizationStatusChanged:`
* `chatClient:channel:memberChanged:` renamed to `chatClient:channel:member:updated:`
* `chatClient:channel:messageChanged:` migrated to `chatClient:channel:message:updated:`
* `- chatClientToastSubscribed`: (REMOVED)
* `- chatClient:toastRegistrationFailedWithError:` (REMOVED)
* `chatClient:toastReceivedOnChannel:message:` migrated to `chatClient:notificationNewMessageReceivedForChannelSid:messageIndex:`
* `+ chatClient:user:updated:` (ADDED)
* `+ chatClient:userSubscribed:` (ADDED)
* `+ chatClient:userUnsubscribed:` (ADDED)

#### TCHChannel

* `synchronizeWithCompletion:` (REMOVED)

#### TCHChannelDelegate (CHANGED)

* `chatClient:channelChanged:` migrated to `chatClient:channel:updated:`
* `chatClient:channel:synchronizationStatusChanged:` renamed to `chatClient:channel:synchronizationStatusUpdated:`
* `chatClient:channel:memberChanged:` renamed to `chatClient:channel:member:updated:`
* `chatClient:channel:messageChanged:` migrated to `chatClient:channel:message:updated:`
* `chatClient:channel:member:userInfo:updated:` migrated to `chatClient:channel:member:user:updated:`
* `+ chatClient:channel:member:userSubscribed:` (ADDED)
* `+ chatClient:channel:member:userUnsubscribed:` (ADDED)

#### TCHChannels (CHANGED)

* `- userChannelsWithCompletion:` (REMOVED)
* `+ subscribedChannels` (ADDED)
* `+ userChannelDescriptorsWithCompletion:` (ADDED)
* `publicChannelsWithCompletion:` renamed to `publicChannelDescriptorsWithCompletion:`

#### TCHChannelUpdate (ADDED)

#### TCHChannelStatus

* `+ TCHChannelStatusUnknown (ADDED)`

#### TCHChannelPaginator -> TCHChannelDescriptorPaginator (RENAMED)

#### TCHChannelPaginatorCompletion (REMOVED)

#### TCHMember

* userInfo migrated to identity
* `+ userDescriptorWithCompletion:` (ADDED)
* `+ subscribedUserWithCompletion:` (ADDED)

#### TCHMemberUpdate (ADDED)

#### TCHMessageUpdate (ADDED)

#### TCHResult

* `+ resultCode` (ADDED)
* `+ resultText` (ADDED)

#### TCHUsers (ADDED)

* `+ userDescriptorsForChannel:completion:`
* `+ userDescriptorWithIdentity:completion:`
* `+ subscribedUserWithIdentity:completion:`
* `+ subscribedUsers`

#### TCHUserInfo -> TCHUser (MIGRATED)

* `+ isSubscribed` (ADDED)
* `+ unsubscribe` (ADDED)

#### TCHUserInfo -> TCHUserDescriptor (MIGRATED)

* `+ subscribeWithCompletion:` (ADDED)
* `- setAttributes:completion:` (REMOVED)
* `- setFriendlyName:completion:` (REMOVED)

#### TCHUserCompletion (ADDED)

#### TCHUserDescriptorCompletion (ADDED)

#### TCHUserDescriptorPaginatorCompletion (ADDED)

#### TCHUserInfoUpdate -> TCHUserUpdate (CHANGED)

***

### Programmable Chat iOS 0.17.3 *(May 19, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.3/twilio-chat-ios-0.17.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.3/docs/)

## Changes \[#changes-13]

* Fix for absence of channel added delegate when a private channel is created from a separate endpoint.

***

### Programmable Chat iOS 0.17.2 *(April 3, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.2/twilio-chat-ios-0.17.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.2/docs/)

## Changes \[#changes-14]

* The iOS SDK now supports badging when enabled on your Chat instance for clients you have registered for push notifications. Badges will indicate the number of unread 1:1 channels the user has.
* Resolved an issue where the client creation call and updateToken calls may perform a network operation on the calling thread, blocking it. These operations now occur in the background and the calls once again return immediately.
* Introduced callback for badge updates on iOS. This delegate method will be called as a result of the chat library processing a notification via TwilioChatClient's `handleNotification:` method where the badge count updates. When your application is foregrounded, iOS will not automatically update the springboard badge count on its own so your application must manually update it. If your application receives its badge updates through a mechanism other than Twilio, you can omit this delegate method and handle this event in another way. See `chatClient:notificationUpdatedBadgeCount:` in the SDK docs or [\[demo application\]](https://github.com/twilio/twilio-chat-demo-ios) for more information including a sample implementation.

***

### Programmable Chat iOS 0.17.1 *(February 23, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.1/twilio-chat-ios-0.17.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.17.1/docs/)

## Changes \[#changes-15]

* The `endpoint_id` identifier specified in access tokens is now automatically generated and persisted in the keychain. The following should be observed with this change:
  * `endpoint_id` is no longer a required identifier in your generated access tokens, you may omit it from this build forward
  * `endpoint_id` will be ignored if specified with your access token
  * When running in the iOS simulator only, the automatically generated `endpoint_id` may not persist between runs to the simulator keychain without this [\[work-around\]](https://stackoverflow.com/questions/38456471/secitemadd-always-returns-error-34018-in-xcode-8-in-ios-10-simulator/40114656#40114656)
* If a client is initially created with an invalid access token, creation will fail and nil will be returned for the client instance
* Resolved an issue where APNS registrations for the user may be lost after `shutdown` of the client. Ensure when you are logging a user fully out of an application that registers for push notifications you call `deregisterWithToken:` with the device's token prior to `shutdown` to prevent messages continuing to be delivered to the device.
* Resolved an issue where crashes could occur during client shutdown, in particular while in the background
* Security enhancements

***

### Access Manager iOS 0.1.3 *(February 14, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/0.1.3/twilio-accessmanager-ios-0.1.3.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/0.1.3/docs/)

## Changes \[#changes-16]

* Resolved issue where invalid tokens could cause a crash when foregrounding the application after being in the background.

***

### Programmable Chat iOS 0.16.1 *(January 30, 2017)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.16.1/twilio-chat-ios-0.16.1.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.16.1/docs/)

## Changes \[#changes-17]

* Resolved potential incompatibility with other Twilio SDKs in the same project
* Fix for channel added events not occurring with synchronization strategy .ChannelList

***

### Access Manager iOS 0.1.2 *(December 6, 2016)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/0.1.2/twilio-accessmanager-ios-0.1.2.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/accessmanager/releases/0.1.2/docs/)

## Changes \[#changes-18]

* Resolved issue with Framework short version string

***

### Programmable Chat iOS 0.16.0 *(November 21, 2016)*

[\[tar\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.16.0/twilio-chat-ios-0.16.0.tar.bz2)
[\[docs\]](https://media.twiliocdn.com/sdk/ios/chat/releases/0.16.0/docs/)

## Changes \[#changes-19]

* TwilioIPMessagingClient -> TwilioChatClient
* All TWM *class prefixes to TCH*
* AccessManager is removed from the SDK and provided as a stand-alone helper library
* Channels are now split between Public and User channels list.
  * Unjoined public channels no longer fire channel added/removed/changed events
* Migration to asynchronous-only access to most entities within system
  * Includes addition of paging to User and Public channels list as well as channel Members

### Classes: \[#classes-2]

#### TwilioChatClient (CHANGED)

* `+ updateToken` method

#### TCHChannel (CHANGED)

* `+ createdBy` property
* `+ memberWithIdentity` method
* `+ getUnconsumedMessagesCountWithCompletion:`
* `+ getMessagesCountWithCompletion:`
* `+ getMembersCountWithCompletion:`

#### TCHChannels (CHANGED) \[#tchchannels--changed-2]

* `- allObjects`
* `+ userChannelsWithCompletion:`
* `+ publicChannelsWithCompletion:`
* `- channelWithId:`
* `- channelWithUniqueName:`
* `+ channelWithSidOrUniqueName:completion:`

TCHChannelDescriptorPaginatorCompletion (ADDED)
TCHChannelPaginatorCompletion (ADDED)
TCHMemberPaginatorCompletion (ADDED)
TCHChannelCompletion (ADDED)

TCHChannelDescriptor (ADDED)
TCHChannelDescriptorPaginator

TCHChannelPaginator (ADDED)

TCHMemberPaginator (ADDED)

#### TCHMembers (CHANGED)

* `- allObjects`
* `+ membersWithCompletion:`

#### TCHMessages (CHANGED)

* `- allObjects`
* `- getMessageWithIndex:`
* `+ getMessageWithIndex:completion:`
* `- messageForConsumptionIndex:`
* `+ messageForConsumptionIndex:completion:`
