SDK for iOS Clients (Unified API Version)
3.0.0 beta build 55.7
Compatible with Lightstreamer Server since 6.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 19 Jul 2017

Introduced the use of WebSockets both for streaming and for subscription and client message requests, which brings an overall performance improvement.
As a consequence, forcedTransport now also supports the "WS", "WS-STREAMING", and "WS-POLLING" values and the predisposed earlyWSOpenEnabled property is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in the distribution.

Added static methods addCookies:forURL: and getCookiesForURL: in LSLightstreamerClient, to allow for cookie sharing with the rest of the application when a local cookie store is being used.

Replaced the maxBandwidth property of LSConnectionOptions with two distinct properties: requestedMaxBandwidth and the read-only realMaxBandwidth, so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the property names and also the invocations of client:didChangeProperty: on the LSClientDelegate (see the docs for details). COMPATIBILITY NOTE: Custom code using maxBandwidth in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.

Introduced a new callback, subscription:didReceiveRealFrequency:, to the LSSubscriptionDelegate, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to subscription:didReceiveRealFrequency: to the custom delegate would simply be ignored.

Introduced a new property, clientIp, in LSConnectionDetails; it is a read-only property with the keyword for client:didChangeProperty: (see the docs for details).

Completed the implementation of methods whose implementation was only partial. This regards:

Fixed the nullability annotations for the following methods and properties:

COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.

Revised the sendMessage implementation in the HTTP case, to limit recovery actions when messages are not to be ordered and a delegate is not provided.
Revised sendMessage to accept 0 as a legal value for the delayTimeout argument; negative values will now be accepted to mean that the Server default timeout is to be used. COMPATIBILITY NOTE: Existing code using the 5-argument version of sendMessage and supplying 0 as delayTimeout must be modified to use -1 instead. Invocations to the 1-argument version don't have to be modified.

Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused subscription:didFailWithErrorCode:message: with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.

Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.

Improved the management of retries upon unsuccessful control requests.

Slightly delayed the availability of the serverSocketName property of LSConnectionDetails, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using serverSocketName right after a session start, should ensure that client:didChangeProperty: for serverSocketName gets invoked first.

Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.

Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.

Improved the management of HTTPExtraHeadersOnSessionCreationOnly, when YES. Previously, the extra headers (supplied with HTTPExtraHeaders) were still sent, redundantly, on control requests.

Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved readability and conformance with other SDKs documentation.

Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:, subscription:didFailWithErrorCode:message:, and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:, to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage: documentation; this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message: and subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey: documentation; when a subscription request cannot find the session, the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.

Clarified in the documentation the meaning of nil in requestedMaxFrequency and requestedBufferSize. Extended requestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is nil.

2.1.2 build 49
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 17 Jan 2017

Added the new setting limitExceptionsUse in LSLightstreamerClient to avoid throwing an exception when certain methods are called with an invalid parameter. E.g. valueWithFieldName: in LSItemUpdate and valueWithItemName:fieldName: in LSSubscription both obey to this new setting. See API docs for more information.

Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.

Moved the LIB_NAME and LIB_VERSION methods of LSLightstreamerClient to class properties. They can now be accessed with the dot notation. Previous class methods remain available.

2.1.1 build 46
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 6 Jan 2017

Fixed a bug on the implementation of disconnect, whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.

Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.

Revised the default setting for the contentLength property of LSConnectionOptions, to allow the library to set it to the best value.

2.1.0 build 45
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 25 Nov 2016

Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit the number of sessions that can be concurrently open to the same Server. New properties are: maxConcurrentSessionsPerServer (a class property) and maxConcurrentSessionsPerServerExceededPolicy. See docs for more information.

Added new event to LSClientDelegate to respond to an authentication challenge raised during network connection. New event is client:willSendRequestForAuthenticationChallenge:. See docs for more information.

Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.

Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.

Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.

Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos: on LSSubscriptionDelegate, which is only predisposed.

The client library is now distributed as a framework.

Raised the minimum iOS version requirements to 8.0.

2.0.1 build 38
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 26 Aug 2016

Fixed a memory leak that could become significant with intense update activity.

Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.

Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.

2.0.0 build 33
Compatible with Lightstreamer Server since 6.0.1
Compatible with code developed with the previous version.
Released on 8 Apr 2016

Added bitcode support.

Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.

Event client:didChangeProperty: now reports correct iOS client property names, e.g. "pollingTimeout" instead of "pollingMillis".

Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.

Prevented reconnection attempts upon wrong answers from the Server.

Fixed an error in the log of the keepalive interval setting.

Fixed the documentation of client:didReceiveServerError:withMessage: and client:didChangeStatus:, to specify that the former is always preceded, not followed, by the latter with DISCONNECTED.

2.0 a5 build 27
Compatible with Lightstreamer Server since 6.0.1
May not be compatible with code developed with the previous version; see compatibility notes below.
Made available as a prerelease on 17 Nov 2015

Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.

2.0 a4 build 20
Compatible with Lightstreamer Server since 6.0.1
Made available as a prerelease on 7 Oct 2015

Introduced as an improved alternative to the SDK for iOS clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.