We are building a suite of native mobile applications to supplement our existing application that currently only supports a web interface to the server. The application can be installed and hosted by clients on their own infrastructure or hosted by ourselves for clients who want to make use of it. Big enterprise customers typically chose to self-host whilst smaller customers choose our hosting option.
We need to support multiple versions of the application. Not all customers want to upgrade at the same time. With the web interface, supporting multiple versions are not difficult as the web interface automatically uses the server version associated with its server installation. With mobile applications where you typically only have a single app available in the App Stores, the support for different levels of the Server API and functionality in the mobile app becomes a challenge. I'm interested to know how other people are solving the issue. To my mind you have options like:
- Support multiple versions of the app in the app store.
- Build support into the mobile applications to automatically determine the API version of the server it is talking to and route calls to the relevant server API endpoints. Also introduce use some kind of feature toggle mechanism to enable/disable functionality in the mobile application based on what's available in the different server versions.
- Do not use the app store for deploying your app. Points users to a version specific URL they can use to download and install the app.
Option 1 - IMO will create confusion for the users of the app. There also isn't a nice migration path from one version of the app to the next as it really is two separate applications.
Option 2 - on the other hand can quickly become very complex if you take into account that your UI visuals now basically need to adapt to whatever functionality is available in the version of the server API it is talking to. It also needs to support the different versions of the server API calls it need to make.
Option 3 - is possible in the Android world when doing side-loading of your app, but as far as I know not supported in iOS and I'm not sure what the picture will be for Windows 10 mobile apps going forward.
What other approaches are there to tackling the issue? Please don't debate the fact that we are writing native apps. That's not what I'm asking. I'm looking for guidance on how other people are tackling the issue of supporting multiple versions of the same native mobile app talking to different versions of a server API.