The question of whether you should add an SDK to your application to gain insight into issues, and how your users interact with your app is an easy one. The real question is: which one? Or ones, as the case may be.

Mobile development and analytics tools are instrumental in developing, optimizing, and marketing apps to engage and increase users. The most successful apps in their respective app stores are constantly monitored and analyzed by their development and management teams, and fine tuned to improve the user experience. That is where tools like Apteligent and AppDynamics come in.

But why use AppDynamics and Apteligent in the same app?

Picture this: you’re the VP of Engineering at a large organization. Among all the groups that you oversee, one is a DevOps team that currently enjoys and relies upon the functionality and insight provided by AppDynamics for your back-end infrastructure like network monitoring, comprehensive language coverage, and deep database troubleshooting. Now, you also have a Mobile development team that needs a mobile-first tool to help them pinpoint issues, find bugs faster, and gain granular insight into how users are interacting with the application. In addition, the mobile business team and mobile product managers keep pinging you for more visibility into issues and their impact on business goals.

While there is some overlap in functionality between these two solutions with regard to mobile, you as the VP of Engineering are left with a choice between the two. But there is a third option: use both, and enable your development, operations, and mobile teams to get the data they require to make your company’s app the best it can be.

Implementing both solutions in your Android or iOS applications is straightforward. Of course, there are implications in terms of size overhead, and initialization times, but this author feels the benefits outweigh the detriments.

iOS (Assumes CocoaPods)

*An important note on iOS initialization: For the best results for these SDKs, initialize AppDynamics first, then initialize the Crittercism SDK.

Podfile

pod ‘AppDynamicsAgent’
pod ‘CrittercismSDK’

AppDelegate File

#import 
#import 

// These lines go inside the didFinishLaunchingWithOptions method
[ADEumInstrumentation initWithKey: @"App key"];
[Crittercism enableWithAppID:@"AppID"];

Additional Run Scripts

(Will require 2 Run Script phases under XCode Build Phases)
These scripts are required to upload the symbol files for your application. These symbol files are instrumental in getting meaningful, useful information from iOS stacktraces.

AppDynamics

export ADRUM_ACCOUNT_NAME="Account Name"
export ADRUM_LICENSE_KEY="License Key"
SCRIPT=`/usr/bin/find "${SRCROOT}" -name xcode_build_dsym_upload.sh | head -n 1`
/bin/sh "${SCRIPT}"

Apteligent

APP_ID="AppId"
API_KEY="APIKey"
source "/path/to/dsym_upload.sh"

Android (Assumes gradle)

Top level build.gradle

classpath 'com.appdynamics:appdynamics-gradle-plugin:4.+'

App level build.gradle

apply plugin: 'adeum' // this line added for AppDynamics

dependencies {
compile 'com.crittercism:crittercism-android-agent:+'
compile 'com.appdynamics:appdynamics-runtime:4.+' // this line added for AppDynamics
}

adeum { // this section added for AppDynamics
account {
name 'Account_Name'
licenseKey 'You must request this key from an Admin.'
}

MainActivity.java class

import com.appdynamics.eumagent.runtime.Instrumentation;
import com.crittercism.app.Crittercism;

// These lines go inside the main thread:
Crittercism.initialize(getApplicationContext(), "CRITTERCISM_APP_ID");
Instrumentation.start("AD-AAB-AAC-TGG", getApplicationContext());

**For additional installation options for the Apteligent SDK, see here: iOS and Android

The Result

The teams tasked with building and maintaining your business logic get to see how their work interacts with, and impacts the performance of your company’s mobile application via AppDynamics. Meanwhile, the mobile development teams are empowered with the knowledge and insight provided by the Apteligent SDK on how the application performs “in the wild”, and how users are interacting with and using the application.

Armed with this information, the development team is poised to produce a meaningful, engaging, and ultimately useful mobile experience.