Ice Touch 1.3.0 Release Notes
Ice Touch offers C++ and Objective-C SDKs for building iOS and Cocoa applications. Ice Touch also includes an Objective-C run time for use in OS X applications.
The Ice Touch distribution does not include any Ice services, but its support for the complete Ice protocol means that your Ice Touch applications can work seamlessly with existing Ice servers as well as Ice services such as IceGrid, Glacier2, and IceStorm.
On this page:
New features in Ice Touch 1.3
This section outlines changes and improvements in this release that may affect the operation of your applications or have an impact on your source code.
For a detailed list of the changes in this release, please refer to the CHANGES file included in your Ice Touch distribution.
Support for Ice 3.5 features
Ice Touch is based on the Ice 3.5.0 release. As a result, it supports the following new features:
- A new 1.1 encoding.
- A new "compact" encoding for Slice classes and exceptions.
- Slice class compact IDs.
- Optional data members in classes and exceptions, and optional parameters in operations.
- Slice enumerators can now be assigned arbitrary values.
- IceMX metrics support.
- C++ 11 support (for iOS 5 and later).
For more information on these features and related upgrade instructions see the Ice 3.5.0 Release Notes.
Changes and fixes in Ice Touch 1.3.0
- Ice Touch now requires Xcode 4.6.
- Updated Ice Touch to support iOS 6.
- Added client side libraries for IceStorm and IceGrid.
- Added support for ARC (Automatic Reference Counting).
- Added support for the local interfaces
Ice::ConnectionInfo
andIce::EndpointInfo
in Objective-C. - Added support for implicit contexts.
- The Glacier2 module prefix is now GLACIER2 for consistency with the Ice module prefix.
Corresponding Ice release
The Slice definitions included in Ice Touch 1.3 are the same as the Slice definitions included in Ice 3.5.0. In particular, the Glacier2, IceGrid, and IceStorm client libraries included in this Ice Touch release use the Ice 3.5.0 definitions. If a future Ice release adds new APIs (such as a new operation, or a new interface) to one of these services, you will need to rebuild these libraries using the newer Slice definitions in order to use the new APIs.
Deprecated features in Ice Touch 1.3.0
For OS X and Cocoa, the Ice Touch run time is no longer built with garbage collection support. The use of automatic reference counting (ARC) is now preferred over garbage collection. If you need garbage collection for your Ice Touch OS X applications, you will need to build Ice Touch from source.
Upgrading your application from previous Ice Touch versions
ZeroC does not guarantee binary compatibility between Ice Touch 1.3 and previous Ice Touch versions, therefore you must recompile your Slice files and rebuild your application.
Xcode project settings
For Xcode iOS and Cocoa applications, you need to update the project setting "Additional SDKs" to match the location of the new Ice Touch SDK installation. You should use:
/Library/Developer/IceTouch-1.3/SDKs/ObjC/$(PLATFORM_NAME).sdk
for the Objective-C SDK./Library/Developer/IceTouch-1.3/SDKs/Cpp/$(PLATFORM_NAME).sdk
for the C++ SDK.
If you're not using the Cocoa or iOS SDKs but the command line SDK, you will need to update the "Ice Home" setting.
Command line SDK settings
The command line SDK is installed in /Library/Developer/IceTouch-1.3.
The install name of the Ice Touch shared libraries is prefixed with @rpath/
. You will need to change your build system accordingly. Specifically, you will need to link your executable with -Wl,-rpath,/Library/Developer/IceTouch-1.3/lib
if you want the Ice Touch shared libraries to be located without having DYLD_LIBRARY_PATH
set.
Ice Touch feature set
Ice Touch supports the following features:
Ice Touch currently lacks support for the following Ice features:
- Protocol plug-ins
- Local interfaces
Ice::Application
andIce::Service
helper classes
The Objective-C mapping currently lacks support for the following Ice features:
- Asynchronous method dispatch (AMD)
- Collocation optimization
- Servant locators
Ice Touch has limited support for:
- SSL
See below for more information.
- UDP
On iPhone, UDP requests do not transparently establish a 3G/Edge connection.
SSL support
Ice Touch for OS X and Cocoa uses the Ice for C++ SSL protocol plug-in.
For iOS devices, Ice Touch SSL provides only a subset of this functionality. Due to limitations in iOS SSL support, the following restrictions apply:
- Ice Touch servers cannot authenticate SSL clients.
- Clients on iOS 5 and later reject server certificates that use MD5 hashes.
Furthermore, the semantics of some IceSSL configuration properties have changed, and new properties have been added. The IceSSL property reference provides complete details.
Logger notes
Objective-C applications must install custom loggers via ICEInitializationData
. You cannot use any of the Ice for C++ logger properties, such as Ice.UseSyslog
, and you cannot install a custom logger with a plug-in (Ice.Plugin.*
).
Memory management
Graphs of objects with cycles
With the introduction of automatic reference counting (ARC), you no longer need to explicitly retain and release parameters or class members. However, you are still required to explicitly break cycles, otherwise graphs of objects containing cycles will leak. Consider this Slice definition:
class Foo { Foo next; };
Suppose we use these definitions as follows:
Foo a = [[Foo alloc] init]; Foo b = [[Foo alloc] init]; a.next = b; b.next = a;
If you send this graph over the wire, your application will leak memory unless you somehow retain the graph and manually break the cycle.
Auto release pool
The Ice run time creates an NSAutoReleasePool
object before dispatching server-side invocations and client-side AMI callbacks. The pool is released once the dispatch is complete.
Accessory transport
The accessory transport enables Ice Touch clients running on an iOS device to communicate with accessories connected either via Bluetooth or USB.
This transport is built on top of the iPhone OS External Accessory framework. In order to use it, proxies must use the following endpoint syntax:
accessory [-p
PROTOCOL
] [-n
NAME
] [-m
MANUFACTURER
] [-o
MODELNUMBER
]
For example, to invoke on a proxy for the hello
object running on an accessory that implements the com.zeroc.helloWorld
protocol, use the following stringified proxy:
hello:accessory -p com.zeroc.helloWorld
If the -p
option is omitted, the transport will look up an accessory that supports the com.zeroc.ice
protocol by default. This protocol string is application-defined and must match the protocol string that the accessory advertises.
In order to enable the accessory transport, Ice Touch applications must add properties to the Ice communicator initialization property set using the ICEConfigureAccessoryTransport
method.
For example:
ICEInitializationData* initData = [ICEInitializationData initializationData]; initData.properties = [ICEUtil createProperties]; ICEConfigureAccessoryTransport(initData.properties); communicator = [[ICEUtil createCommunicator:initData] retain];
This call will add the required properties and ensure that the accessory transport is linked in with your application. The project for your application will need to include the ExternalAccessory
framework as well.
To specify that your application supports a given accessory protocol, you need to set UISupportedExternalAccessoryProtocols
in your project Info.plist
file as demonstrated below:
<key>UISupportedExternalAccessoryProtocols</key> <array> <string>com.zeroc.helloWorld</string> </array>
The iPhone hello world demo from the demo/iPhone/hello
directory demonstrates how to configure the accessory transport.
In order to use the Ice Touch accessory transport, your accessory must also support running an Ice server that is capable of receiving Ice requests from Ice Touch over USB or Bluetooth. We can assist you with the implementation of the Ice server-side transport for your accessory. For more information on this, please contact us at info@zeroc.com.
Targeting iOS >= 4.3
Xcode 4.6 targets iOS 6 by default. To build your application for an iOS >= 4.3 target, you will need to modify your Xcode project as follows:
- Set the Xcode
Deployment Target
property to the desired iOS version.