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
is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in the distribution.
Added static methods
in LSLightstreamerClient, to allow for cookie sharing with the rest of the application
when a local cookie store is being used.
maxBandwidth property of LSConnectionOptions with two
requestedMaxBandwidth and the read-only
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
client:didChangeProperty: on the LSClientDelegate (see the docs for details).
COMPATIBILITY NOTE: Custom code using
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
Introduced a new callback,
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
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
(see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
fieldSchemain LSSubscription now also working for COMMAND mode subscriptions;
slowingEnabledin LSConnectionOptions now working if YES is supplied;
subscription:didClearSnapshotForItemName:itemPos:in the LSSubscriptionDelegate now invoked as expected.
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.
sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a delegate is not provided.
sendMessage to accept 0 as a legal value for the
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
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
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
to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to
this error reports server-side licensing limitations.
Removed error code 20 from
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 to allow the setting
also when the subscription is "active" and the current value is nil.
Added the new setting
limitExceptionsUse in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
valueWithFieldName: in LSItemUpdate and
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.
LIB_VERSION methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
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.
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
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
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Raised the minimum iOS version requirements to 8.0.
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.
Added bitcode support.
Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.
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:didChangeStatus:, to specify that the former
is always preceded, not followed, by the latter with DISCONNECTED.
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.