Case Study: Password Tote
Password Tote is a password management program allowing users to secure all their passwords in one place and share them between computers. The C# .NET 3.5 version of Password Tote for Windows and the web was written by Greg Caiazzo. It makes use of Windows Communication Foundation (WCF) web services for synchronization between the server and clients. When the service was designed, WCF was chosen because of Mr. Caiazzo’s familiarity with it and he assumed it would be easy to consume the service on other platforms.
Mr. Caiazzo decided that to really make Password Tote useful, the passwords needed to be accessible on the Mac as well as on mobile devices like the iPhone. Nathanial Woolls started work on the Mac OS X and iOS clients. As a developer new to Xcode, he expected that creating an iOS client for the existing web service should be simple. Right away he discovered that the Cocoa and Cocoa Touch Frameworks did not have good support for consuming WCF web services. Next he tried multiple different libraries and third-party approaches, all claiming to support web services; he found them overly complex, poorly maintained, and in the end not working— especially for complex data types and arrays.
WCF is based on the SOAP specification. Despite the SOAP acronym standing for Simple Object Access Protocol, anyone who has worked much with SOAP will tell you it is anything but “Simple”. The specification allows for variations in the implementation, and a great deal of complexity. When using the same libraries for both the creation and consumption it is relatively easy to work with, but when two different libraries or platforms are involved, the process becomes much more complex.
Mr. Woolls suggested adding a separate REST interface on the server because there seemed to be good support for consuming REST in Xcode. Mr. Caiazzo didn’t want to do this because it would require duplicating all the server architecture and double the ongoing maintenance. He also did not want to change the WCF web service because it would also require changing the existing clients.
It was at this point that Mr. Woolls suggested looking into RemObjects SDK. Both Mr. Caiazzo and Mr. Woolls previously used RemObjects SDK on other platforms, but had no experience with it in Xcode and Objective-C.
At first Mr. Woolls spent some time working with RemObjects’ support team to learn how to use the RemObjects SDK with Objective-C and WCF, as well as resolving some compatibility issues with WCF. He found the support department very responsive in getting fixes quickly, and was able to begin implementing the iOS and Mac OSX clients quickly and without any change to the WCF web service.
While the RemObjects SDK for Objective-C is natively implemented for Xcode, Mr. Woolls found that his experience using it on other platforms paid off with familiarity to the general interface. Since the RemObjects SDK has the same code for Mac OS X and iOS, he was able to share the web services code between the iOS and Mac OS X clients.
Comments by Mr. Nathanial Woolls:
RemObjects SDK allows me work on any platform it supports with confidence. I can consume web services from any other platform, even when the service is completely out of my control. Everyone’s SOAP is different, but RemObjects SDK makes it deliver on what SOAP was supposed to be: Simple.
Comments by Mr. Greg Caiazzo:
RemObjects SDK is the tool I use when I want to know interoperability works. Interoperability is all about communication and remoting. RemObjects SDK lets me focus on the core logic of my application without needing to fight with making communication work.
Both Mr. Woolls and Mr. Caiazzo would use RemObjects SDK again, and recommend it to others.
Nathanial Woolls & Greg Caiazzo – reprinted with kind permission.