Search code examples
xamarinmigrationcross-platformsoftware-distributionoffline-caching

App Development - Finding the right platform to migrate to from an existing infrastructure


We have an existing cross-platform Mobile Application, that also has an accompanying web application, that uses AWS as a back end (RDS for Database, Four server instances, and a Load Balancer to distribute traffic). APK and IPA files are packaged and sent to the stores, while components are retrieved from our server per request, which enables us to reduce the number of store builds, and make the process easier for getting changes out to clients.

We are at the stage of Development that we need to move to another platform to better facilitate our fast growing client base.

Due to the conditions upon our clients, these things must be considered.

  • must be cross platform (Android / iOS).
  • must be offline based (users need to be able to access without an internet connection)
  • must be able to sync with an existing database when there is a connection
  • requires Authentication
  • Cloud based (? may not be the right term, but meaning the ability for us to store components on a server and have a device check for updates and download a local copy - enabling us to work and distribute fixes faster)
  • Ideally compatible with AWS

We are currently looking at Xamarin to facilitate us for this move, however there is a lot of documentation and plugins out there to do all sorts of different things.

As developers, we all have some .net / c# experience, however none particularly with Xamarin.

We have a particular timeline that we need to adhere to (and need to ramp up in the next couple of weeks), and right now are essentially stuck in Limbo in a research phase, as we can't afford to get some things right. We are unable to move forward until we know Xamarin (or some other framework) is able to do everything that we need it to do.

It's hard to escape from the 'code it all ourselves' mentality - especially as we don't know where to start looking in terms of third party packages for Xamarin, and their documentation itself.

A lot of documentation mentions various systems of Azure - we would not be against moving to Azure over AWS if it _had to be done*, but because of the existing infrastructure with AWS - staying with AWS is obviously the preferred option (users need to access the current system whilst we build the new system)

This stack overflow post is to ask for recommendations, comments, or other observations on anything and everything involved with the process in regards to choosing frameworks, design patterns, methodologies, third party packages, etc.

Obviously we would like to use best practises for everything moving forward for optimum scalability and cleaner, more robust code. It's just hard to know where to start!

Any input will be highly appreciated.

Cheers!

edit: I am aware that this is 'asking for recommendations' which is 'specifically off-topic'. I have read the posting guidelines about open ended discussion, and am quite confident that this case is different. There is an underlying problem here, in that we are seeking advice on combinations of frameworks and plugins that are fully compatible with all of the items in the list (above)


Solution

  • Let's try to breakdown each of your requirement and constraint mentioned in the question.

    1. You need a offline first architecture (With Sync mechanism)

    Xamarin + Azure would make a good comdo for you, as it would support offline storage out of box (With a simple PullAsync call). Albeit there are AWS SDK available for Xamarin. Here it goes http://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/setup.html

    So the call is yours. There are few other ways to achieve caching offline storage in Xamarin, you can build upon those strategy in your logic. Alternatively there is a very interesting C# library Akavache for caching and offline storage.

    2. OAuth 2.0 Authentication

    Xamarin has a very good library named Xamarin.Auth. Though I would not say it is very easily extendible at this but there has been some serious work going on from Xamarin on this library.

    But I would say it is very easy to use. The apps I have developed so far that includes - Google OAuth, Facebook integration, Microsoft account integration. It worked fine for all of them.

    3. Cloud based distribution

    There are nice tools available with Microsoft. Which makes the distribution easy. Have a look at https://mobile.azure.com . Also hockeyApp is good for distribution I found.

    Where to start: A very good starting point for you would be https://channel9.msdn.com . Just go there search with keyword "Xamarin" and view some videos. May be all these cross platform dynamics will be much easier for you.

    Overall I found Xamarin a cool product to work with. Because anything that can be done in native Objective C/Swift or Java can very well be done in Xamarin using C#.