We used to look at the architectural decision of platform-specific vs. cross-platform as a mutually exclusive choice between one or the other, but we realized that it’s not a binary decision.
We discovered that it’s actually much more of a spectrum, where significant portions of apps can be shared across platforms, while simultaneously optimizing an app for a specific platform with device or OS-specific code where appropriate. This can ensure both maximum development efficiency without compromising functionality or user experience.
This approach is what makes iFactr the most flexible enterprise mobile framework on the market. Unlike other solutions that are all or nothing, by taking this approach, organizations can develop cross-platform applications without sacrificing the ability to use any platform-specific API, third-party library, hardware integration, or user interface component. You can realize the benefits of cross-platform mobility without the compromises.
The iFactr architecture is all about getting back to basics. Enterprise software 101: designing applications to have loosely coupled layers with cleanly separated interfaces. This allows code to be shared across platforms while optimizing the experience for each platform. Additionally, architectural flexibility means that code can be compiled or run either on the client or on a server.
But of the enterprise-grade languages: C# .NET and Java, only C# is currently capable of this architecture, as there is not currently a JVM for iOS. This makes selecting an enterprise mobile architecture a much more complex decision for Java-centric enterprises, but for Microsoft and .NET-focused organizations the decision is much easier.
Microsoft .NET and Mono provide the foundation of the ecosystem. Mono, the open-source port of .NET, brings C# and .NET to non-Windows platforms including iOS and Android.
On top of that, you have Microsoft frameworks like ASP.NET and the Windows Phone SDK as well as Xamarin’s MonoTouch for iOS and Mono for Android which provide access to platform-specific APIs from C# .NET.
And then the next layer up are our frameworks: MonoCross and iFactr. MonoCross provides app developers with code portability but platform-specific user interfaces, and iFactr adds enterprise-grade UI abstraction and data synchronization.
MonoCross at the Core
MonoCross is the foundation of iFactr and provides code portability with platform-specific user interfaces. It is a C# .NET Model-View-Controller (MVC) framework where the Model and Controller are shared across platforms and the View is implemented for every specific platform and/or target architecture. It allows the development of both native and HTML5 web apps that share business logic and data code.
For example, you can create Models and Controllers that are shared across iOS, Android, Windows Phone, and ASP.NET. For ASP.NET, you can then create Views using your preferred HTML5 framework, like Sencha Touch or JQuery Mobile. For Windows Phone, you would create your Views using Silverlight and the Windows Phone SDK. For Android, you would create your Views using the Google Android APIs, and with iOS you would use Apple’s CocoaTouch APIs. All platforms share the same Models and Controllers, but each platform has its own set of Views.
Abstracting the User Interface
But we learned that even with as much code sharing that MonoCross provides, for applications with significant UI layers, the burden of creating platform-specific UIs can be overbearing. So we created the iFactr UI abstraction layer, which allows developers to code to an abstract UI interface, and then reference our iFactr concrete implementations of that interface for all the mobile platforms, both as native UI implementations and HTML5 UI implementations.
While not a silver bullet for all mobile development, it is designed and optimized for rapidly creating data-driven UIs that enterprise users tend to demand. And because it’s integrated with MonoCross, you can mix-and-match your iFactr UI screens that are shared across platforms with screens that you can code to target specific platforms using the entire set of native APIs available on each mobile OS.
Keeping the Data in Sync
The other lesson we learned through experience is that most mobile enterprise applications must be extremely reliable, and therefore must be capable of functioning whether there is an available network connection or not. And that means not only means making the data available offline in a secure manner that can meet regulatory requirements, but also providing for disconnected transactional integrity.
There are two primary approaches to mobile integration within the enterprise: standards-based web services, or proprietary integration middleware. So with iFactr, we support both approaches. The iFactr data stack provides offline access and disconnected transactional integrity with any standards-based RESTful web service back-end, but we also have fully incorporated mobile integration middleware like SAP’s Sybase Unwired Platform into the data stack.
Our Complimentary Nature
We are often asked how we compare to other leading cross-platform approaches on the market like PhoneGap and Apache Cordova, SAP’s Sybase Unwired Platform, as well as HTML5 frameworks like Sencha Touch or JQuery Mobile.
The answer is that we don’t compete with any of these offerings, but rather compliment them. PhoneGap and Apache Cordova is actually integrated within iFactr, and can be used not only as a hybrid container for the iFactr HTML5 targets, but can also be used within native iFactr targets to reuse existing PhoneGap app investments or mix-and-match native UI screens with HTML5 screens in a hybrid wrapper. Sencha Touch and JQuery Mobile can be used to create partial or even entire application UIs for targeted platforms.
And as the leading Mobile Enterprise Application Platform, SAP’s Sybase Unwired Platform can be used as the integration middleware for iFactr apps, with the iFactr data stack providing a unified C# .NET LINQ-to-Objects interface to the SUP Mobile Business Objects (MBOs) with either Message Based Synchronization (MBS) or Replication Based Synchronization (RBS) on iOS, Android, and Windows Mobile platforms.