How to Segment your DEBUG and RELEASE Build Data with Crashlytics

Crashlytics by Fabric is a great tool for alerting you of all those nasty crashes in your iOS app. It is part of the larger Fabric library which is developed by Twitter. Fabric offers a bunch of handy features such as a beta build distribution service akin to TestFlight (via Beta), high-level analytics reporting (Answers), user authentication via phone number (Digits), and more. Considering all of this comes for free, there is little reason to not try it.

One thing I try to always do in my apps is to segregate production and development data. I do this to ensure that no production data gets skewed with my overly obsessive testing regiment (which is almost always done with DEBUG builds). In this post I will be instructing you on how to set up your iOS project to automagically accomplish this with Crashlytics.

So let’s get started, shall we? Go ahead and login to your Fabric dashboard and select Settings from the gears icon next to your user profile image in the upper right corner of the screen.

 

Screen Shot 2015-12-16 at 1.36.58 PM

From there click Organizations.

Screen Shot 2015-12-16 at 1.38.17 PM

 

Add a new organization either for debug or production (I’ll be adding an organization for debug).

Adding a New Organization

Once you create the new organization, it may take some time for it to show you as an admin in it. Be sure to refresh the page to see the page depicting you as the admin for the new organization.

Note: It may take a bit of time for it to update, so you may have to be a little patient.

New Organization Page

Make note of your API Key and Build Secret as you will be needing them in the near future.

Now head back to your project and find where you call Crashlytics with your current key (typically in the application:didFinishLaunchingWithOptions: in your AppDelegate).

You may have something like this:

[Fabric with:@[[Crashlytics class], [MoPub class],//...];

Remove [Crashlytics class] from that line (or remove that line entirely if it is your only class in that call) and place this code before that line:

#if DEBUG
[Crashlytics startWithAPIKey:@"<debug crashlytics api key>"];
#else
[Crashlytics startWithAPIKey:@"<release crashlytics api key>"];
#endif

Go into your project settings and place DEBUG=1 in the Debug portion of Preprocessor Macros (if it isn’t already there). Ensure this set for the proper target as well as the project itself!

DEBUG Project Settings

Now you want to update your Crashlytics run script. If you have yet to make a run script for Crashlytics, do the following: From within project settings click on your application’s target, then click on the Build Phases “tab”. From there click on the ‘+’ in the upper left corner of the pane and select New Run Script Phase.

Selecting the New Phase Plus

Enter this code into the script area for the Crashlytics Run Script:


if [ "${CONFIGURATION}" = "Release" ]; then
"${PODS_ROOT}/Fabric/run" <release API Key> <release Build Secret>
else
"${PODS_ROOT}/Fabric/run" <debug API Key> <debug Build Secret>
fi

And there you have it! Crashlytics data for testing and production isolated into their own organizations. You can test this out by inducing a crash in your app while testing in debug and release modes.

H4ckishly yours,
Aaron

Advertisements