I have an app which is published on both App Store and Play Store already. The app published is pointing to my production server. What I want to do is to have my devices install a "staging" app which points to my staging server so I don't mess up with the real users during my development. So essentially, my device would have two of my apps - MyApp and MyApp_Staging. The staging app must be able to be distributed to my testers.
I use the Push Notification feature from Parse. How can the staging app has the same feature? Do I need another Developer account for staging app?
I have been looking at iOS Beta Testing features. It seems like my staging app has to be reviewed by Apple before I push to my testers. How can I skip the review process? For Android, the staged rollout seems like a good idea, but the staged app will be replacing the production app.
Is there a way to have both staging and production apps installed on devices?
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:
com.MyApp$(BUNDLE_ID_SUFFIX)
BUNDLE_ID_SUFFIX
.debug
. Leave the suffix for the Release configuration empty. I have 3 build configurations with different suffixes.
${PRODUCT_NAME}${BUNDLE_DISPLAY_NAME_SUFFIX}
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:
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.