There are clear-cut differences between production visibility for mobile and web application architecture. Web application architecture considers production visibility significantly more important on the server side than on the client side. On the other hand, mobile architecture considers both the client and server sides as extremely important. Additionally, while web browsers are becoming smarter, their apps are usually less complex than mobile apps, making monitoring and logging client side performance on mobile devices much more challenging. Think about most websites you visit compared to a native mobile app, the latter imposes greater challenges in regards to performance monitoring and visibility. In this post, I’ll review a number of solutions that offer visibility and debugging capabilities for mobile apps. Some of the capabilities are well known even by amateur mobile app developers.
So you’ve finally released your new shiny mobile app to production. But, how will you know if it crashes? Is its performance hindered by latency? What’s your application’s overall health? Once you are aware of an issue within the application, how can you gain insights about the cause? Will you be able to patch your mobile app in production quickly enough to keep your users satisfied? Lets start.
Since the beginning of the mobile ecosystem, Apple (as other mobile eco-systems) has provided a tool that helps understanding app crashes in production, capabilities were very limited and to this day would not be the crash reporting tool of choice for most Apple developers, Apple still continues and improve it’s default crash reporting solution, last month they released a new crash reports service that is available in Xcode 6.3 beta 2.
“Apps that you’ve submitted with debug symbols to the App Store and to TestFlight will have their crash log data collected and aggregated into crash reports that will automatically download into Xcode. The enhanced Organizer window makes it easy to triage your crashes, jump directly to the offending code, and mark a crash as resolved.”
As of early 2011, a few startups have set to create better solutions, solutions that can take the crash log file and the dSYM file and map the crash stack trace to lines of code, giving the developer visibility not only to aggregated data of how many crashes, but also insights to, at which line of code the application crashed.
Crashlytics was one of these companies that initially only offered iOS support. They were acquired by Twitter a year later, and now provide crash reporting for iOS, Android, and Windows phones. Other popular crash reporting solutions include HockeyApp, which was acquired by Microsoft, and Mint (which was BugSense before it was acquired by Splunk). Crittercism, is another full-stack mobile crash reporting solution that is growing much beyond crash reporting.
HockeyApp released CrashProbe
an open source tool to benchmarks and compares iOS and OSX crash reporting solution, kind of biased, but still a very interesting tool.
More than Just Crash Reporting
Over the last year, Crashlytics, Crittercism, and HockeyApp have broadened their services. Some offer a beta distribution mechanism such as HockeyApp and Crashlytics Beta, and some added more capabilities into production visibility,Crittercism with Breadcrumbs and Crashlytics with CSLog.
Most crash reporting solutions are growing to be more rich and robust, giving the developer higher levels of visibility to his production apps. Crittercism lets you monitor user transactions, app latency and other parameters and seems to be growing into a leading mAPM (Mobile Application Performance Management) platform. A while back, Crashlytics introduced Crashlytics Answers, which lets you see application uptime and correlate performance issues with some user behavioral analytics. Microsoft is aiming in the same direction with Microsoft Insights, as is Splunk with Mint.
Logging is important, but often times seems to be ignored by mobile developers. Obviously the right logging tools can make debugging much easier, allowing developers to get much more data about how their applications performs in the wild. The following logging systems log user interactions with applications in production. You can configure your system to send logs when a crash occurs or trigger sending logs with user interaction.
Apple offers default logging, NSLog, which is basic and used by many mobile developers. CocoaLumberJack is an open-source logging framework that is considered to be much more robust than NSLog and has many options. It is generally used by more advanced iOS developers, is much more flexible, about six times faster, supports multiple outputs and an increased number of logging levels (i.e. errors, warnings, and so forth.)
NSLogger and ECLogging fall under this category as well – both are robust and are considered better than NSlog. While each is different in its own way, a preference is given to CocoaLumberJack due to its speed, ease of use and overall options. There is also a nice way to connect CocoaLumberJack to NSlogger, making the most of CocaLumberjack’s benefits and the NSlogger interface. Check out - NSlogger-CocoaLumberjack-connector
Mobile APM (mAPM) is a relatively new and upcoming industry offering a holistic solution with a single dashboard that allows developers to gain visibility into their mobile production environments. Basically, mAPM vendor SDKs monitor and collect data about app performance, including crashes, latency, response times, hangs, and more.
New Relic, a leader in the APM world, and AppDynamics both introduced mobile SDKs in the end of 2013. New Relic allow developers to monitor code level actions in their applications remotely (mostly around the application views), among crash reports. Just last month, NewRelic announced that they're extending their mAPM capabilities. Below you can see NewRelic’s mobile app monitoring dashboard, including key performance metrics such as user interaction time, crash rate and traffic from a specific version. Aternity mAPM supports mobile enterprise app developers. This solution helps developers maintain their mobile workforce application services. As mentioned above, Crittercism (which started as a crash reporting solution) is also shifting to become an mAPM provider, with capabilities such as transaction monitoring. Others, such as Compuware, are not mAPMs at their core, but acknowledge the market’s need and trend, and wish to support mobile developers go further.
Last but not least, another new and interesting service in the field is Pulse.io
. According to their feature page, their solution detects application freezes and lets you drill down to the code level to learn the cause of app performance degradation. We still haven't tried it ourselves, but plan to.
Today, software companies want to have their applications delivered through mobile apps that enrich customer experience. The challenge that developers and operations teams face is that once a mobile application is deployed, there’s a lack of transparency into its performance. mAPM vendors seem to be looking to introduce more capabilities that will help their customers become more efficient and effective, delivering excellent mobile services.