For iOS:
I have staging and production app for iOS installed on the same device. I can't answer this for Android, but here is my set up for iOS with Parse push notifications.
A: Multiple versions of the app on the same device:
For both the apps to be installed on the same device they need to have different bundle identifiers. To do that:
- Open your project and go to the Info tab for your Target.
- Locate the setting for Bundle identifier
- Add a suffix at the end of the identifier as follows:
com.MyApp$(BUNDLE_ID_SUFFIX)
- Now open the Build Settings tab and add a new User-Defined setting
- Set the name of the setting be
BUNDLE_ID_SUFFIX
- Add a different suffix for each of the build configurations that you have. e.g. Debug could have the value
.debug
. Leave the suffix for the Release configuration empty. I have 3 build configurations with different suffixes.
- Debug for testing as I am developing
- Adhoc for releasing adhoc builds to testers.
- Release for releasing to the App Store.
- If you follow this path, you will notice that all the versions of app installed on your device have the same name and it will be difficult to tell them apart.
- To fix that, go back to the Info tab and edit the setting for Bundle display name to say
${PRODUCT_NAME}${BUNDLE_DISPLAY_NAME_SUFFIX}
- Similar to what we did above create a new User-Defined setting with the name
BUNDLE_DISPLAY_NAME_SUFFIX
and add different values for each build configuration. e.g. mine say α and β.
The above will allow you to install multiple versions of the app on a single device.
B: Setup Push notifications using parse between the versions.
To set up Parse push notifications to work across these versions: Follow the Parse tutorial to create certificates and provisioning profiles for each of the bundle identifiers. e.g. I have 3 certificates/provisioning profiles for my 3 bundle identifiers:
- com.MyApp.debug is a Development profile for DEBUG.
- com.MyApp.adhoc is a AdHoc Production profile for Ad Hoc testing.
- com.MyApp is a AppStore Production profile for submitting to the App Store.
Make sure to set the right provisioning profiles in your Build Settings, so that the app is signed correctly.
Upload all the certificates to Parse.com. Parse allows you to have 6 different iOS push certificates.
C: Using different production and staging servers.
Set up preprocessing macros on Build settings tab. Search for Preprocessor and under Apple LLVM 6.1 - Preprocessing for the setting Preprocessor Macros setup different macros for each build configuration. e.g. mine say for Adhoc ADHOC=1
, for Debug DEBUG=1
Then somewhere in your source code have something as follows:
#if defined(DEBUG)
#define SERVER <development server>
#else
#if defined(ADHOC)
#define SERVER <staging server>
#else
#define SERVER <production server>
#endif
D: Sending builds to testers.
This topic has probably been covered multiple times. I am not fond of Apple's Beta test process. There are numerous other solutions. The one I like is Beta by Crashlytics.
You can read about it here: http://try.crashlytics.com/beta/
I deploy the AdHoc build configuration to testers as it is built with the Adhoc provisioning profile which allows me to deploy it on 100 devices without Apple approval.