Introducing OOM reporting: a new dimension to app quality

by Sean Curran, Software Engineer

Stability issues can derail the success of even the best apps – glitchy software repels people. We know that app quality is one of your top priorities and crashes are your worst nightmare, which is why Crashlytics will always alert you when issues arise. We’ll even help you pinpoint their root cause so you can fix issues fast – we’ve got your back!

Today, we’re extending our crash coverage to include out-of-memory (OOM) reporting on iOS. Now, you can see stability from a whole new angle by understanding the impact OOM events have on your app experience.

What’s an OOM event and when does it occur?

Unexpected app terminations degrade your app experience and interrupt your user’s session. One type of app termination you’re probably familiar with is crashes, but there’s another unexpected termination that warrants your attention called an OOM event.

An OOM event is an app termination that occurs when a mobile device runs out of memory. All apps need memory to work, but there is only a finite amount available on each device. When an app needs more memory and there isn’t any available, the operating system terminates the app session. To your users, this looks like any other crash, however in reality, this is an OOM event.

Our approach to solving a hard problem: intelligent heuristics

OOM events are difficult to report because iOS doesn’t provide any direct mechanism to detect them and they can be caused by factors beyond your app environment and control, such as your app’s memory usage. But because of how important it is to understand your rate of OOM events, we took on this challenge and added OOM reporting to Crashlytics for iOS devices.

Here’s how it works: When you enable the Crashlytics and Answers Kits available on Fabric, we get a stream of live data about your app’s performance. Then, we apply a server-side process of elimination to this data stream to detect OOM events in your app. This detection is based on an intelligent heuristic, inspired by the work of two talented engineers. In other words, we analyze your app’s event stream to come up with an explanation of why it terminated and if we can’t match it up it to a known reason for termination, we count it as an OOM event. And, since no changes to the Answers SDK were required, you will automatically get OOM reporting without needing to do any work (as long as you have both Crashlytics and Answers installed).

This is an example of how your app analytics and stability kits can work together to unlock powerful new insight – something neither kit could do alone.

At Pinterest, we're shipping iOS app updates every two weeks to millions of people. Using the new OOM insights, we've been able to track our memory optimizations and have confidence in the stability of each release.

- Scott Goodson, Head of Core Experience


New line of sight into the impact of OOM events on app quality

Our new OOM reporting dashboard will help you understand if OOM events are a problem for your app. Now, you’ll be able to see the overall percentage of app sessions that were unaffected by OOM events across your builds. You can even drill down and see the percentage of OOM-free sessions for individual builds. This will help you answer important questions like, “Is my app being terminated more on one build than another?” and “Is my app seeing more or less OOM-free sessions over the last week?”

We’ll also give you a sortable, daily device breakdown so you can compare the raw OOM counts and the percent of OOM-free sessions across different iOS devices. Once you know which iOS device experiences the most OOM events, you can better triage and spend your time investigating problems on your most used devices. After you roll out a fix, you can monitor the number of OOM events on that device to see if your solution helped reduce them. You may even learn that there are some low-end devices that you simply can’t support.

This additional information paints a clearer picture of your app stability across devices and provides clues for troubleshooting.

Finally, we’ll show you the total number (i.e., the raw counts) of OOM events across all of your builds versus your top three builds. Use this graph to understand the prevalence and magnitude of OOM events.

Don’t let OOM events crash your app party 🎉

Our mission is to ensure that there are no more sad, unstable apps. By adding OOM reporting into Crashlytics, we’re giving you even more insight into the quality of your app. Don’t be blindsided by OOM issues that disrupt your users’ app experiences (and maybe even cause them to flee!). Monitor your OOM-free sessions, promptly identify when OOM events become a problem, and get valuable direction on where to start your troubleshooting by going to the OOMs page from your Crashlytics dashboard. Check it out and let us know what you think!

Get Crashlytics Now

Introducing enhanced dSYM tools: stay on top of stability

by Jason St. Pierre, Product Manager

Missing crashes is frustrating, but not knowing the cause is even worse. App users have low tolerance for buggy apps, which is why stable apps retain more engaged users.

When we launched Crashlytics four years ago, we set out to solve the problem of mobile crash reporting through an easy to use, automated experience. We invested in tools that automated the dSYMs upload process for iOS apps, so you never had to worry about missing a crash.

As the mobile ecosystem evolves, there are complex situations (i.e., Bitcode support or the use of dynamic libraries) that can prevent us from locating the right dSYM to symbolicate your crashes. That's why today, we're excited to unveil our new command line dSYM uploader. Now, you'll never miss a crash report and you'll also have more transparency and the highest quality crash data — even in the most complex situations!

Real-time alerts when crashes can’t be processed

It isn’t always obvious when you’re impacted by a symbolication issue. Now, any crash that is missing a dSYM will immediately prompt a banner alert in your Crashlytics dashboard. We’ll even show you the aggregate number of unsymbolicated crashes and the UUIDs of the missing dSYMs, meaning you’ll never waste time guessing which ones to upload.

More control over dSYM uploads

dSYMs are essential for crash reporting because they allow us to group crashes into larger issues, isolate the root cause of the error, and provide context around its severity. We continue to invest in flexible, yet powerful tools, that help you automate this process since we know how critical the retrieval and submission of dSYMs is to your stability insight.

That’s why we built upload-symbols, a command line tool, written in Swift, that ships within the Fabric Mac app and our Fabric CocoaPod. It’s incredibly scripting-friendly - give it a try yourself!

Automate with fastlane and skip iTunes connect

When you submit iOS apps to the App Store with Bitcode enabled, your app gets recompiled on Apple’s servers. This means Crashlytics doesn’t have access to the debug information it needs to symbolicate your crashes. Luckily, you do, via a dSYM download facility in Xcode.

Instead of manually downloading these files from Xcode and submitting them to Crashlytics, you can use fastlane to automate this tedious process after every release.

Learn more about how to save time by setting up fastlane automation.

Generous crash reprocessing window for peace of mind

Don’t have time to upload missing dSYMs right away? No problem. We know you’re busy so we’ll hold onto unprocessed crash reports for seven days. Once we receive the missing dSYMs, we’ll process the unsymbolicated crashes. Rest assured, you won’t lose any of the information you need to solve the most critical issues.

Highest crash reporting quality

We built our dSYM uploader to stay ahead of the curve. Even though managing debug symbols is getting more complicated, we’ve got you covered with our new Crashlytics updates.

In addition to increased transparency on the number of unsymbolicated crashes and missing dSYMs, we’re now giving you more control over uploading them. And with the power of fastlane, we’ve made the dSYM management as smooth and hassle-free as possible for developers that take advantage of Bitcode. Best of all, our seven-day crash reprocessing window means you don’t need to drop what you’re doing to find a missing dSYM - you have time to retrieve them without risking crash data loss.

Try our new dSYM uploader to get even more insight into your crashes and become the master of your app’s stability. If you have more ideas for how we can make dSYM processing even better, we’re all ears!

Introducing Velocity Alerts

by Jason St. Pierre, Product Manager

Since the birth of Crashlytics, our passion has always been to help you fix the most prevalent issues quickly and painlessly. Just last month, we released badges to help you hone in on crashes that stand out against the rest.

Today, we’re thrilled to introduce Velocity Alerts: intelligent, proactive alerting on the most critical issues happening in your app. Now, you truly know when you need to take action right away.

Powered by the #1 mobile analytics solution

While our system already distills and prioritizes your crashes based on their impact, there was more we could do to make your life even easier. By combining your app’s crash data with usage analytics from Answers, our new Velocity Alerts enable you to triage unexpected, high-impact issues with minimal effort.

Now, once you’ve enabled Answers as part of Crashlytics, our system will proactively check to see if there is a statistically significant number of sessions that have ended due to a crash related to one issue on a particular build. If so, we'll let you know if that issue is a hot patch candidate and needs your attention immediately right on your dashboard. You’ll also get an email alert in your inbox as well as a push notification if you’re using the Fabric mobile app(Android support coming soon). With Crashlytics, you’ll never miss a critical bug!

While at it, we’ve also redesigned all of our notification emails so important information are even more clear and actionable.

We couldn’t be happier to release this so you can sit back, relax and just focus on building the best app. If you’re already using Crashlytics with Answers, Velocity Alerts are automatically enabled for you. If not, get started with Answers!

Get Velocity Alerts

Crashlytics January Update

by Brian Lynn, Sr. Product Marketing Manager

img.png

In 2015, Crashlytics was named the top performance SDK and crossed over one million apps integrating our crash reporting SDK. But we didn’t want to stop there. In January, we were heads down enhancing Crashlytics and making it even more instrumental to how you build mobile apps.

Introducing the ability to log NSErrors

Crashes aren’t the only adverse events that can take place in a running app, where errors might occur in the background and affect their behavior or performance. In January, we were thrilled to officially release the ability to log NSErrors on iOS, OS X and tvOSWe wanted to empower you to optimize your user experience even when your app isn’t crashing.

We extended the #1 crash reporting experience so you can easily log and fix the most critical non-fatal errors on Apple devices — all in real time. You'll also notice we gave your issue list dashboard a complete visual refresh. Now, even looking at crashes can be an enjoyable experience :)

Enhancing Unity Support for Crashlytics

Building an amazing game can be one of the most challenging, yet invigorating experiences. We thought we could take the Crashlytics experience and bring it to your Unity projects right out of the box. Since announcing ourbeta support for Unity at Twitter Flight, we've seen overwhelming demand from many developers who are building some of the most cutting edge games. Starting today, we're opening up access to more beta testers.

Want to get your hands on it early? Sign up at Crashlytics Labs today — we'd love to hear what you think!

Here’s our internal changelog

Mac App and iOS SDK

  • Added OS X support to Answers
  • Gave the issue list dashboard a complete visual refresh
  • Feature: Logging NSErrors is now out of Beta and ready to be used
  • Fix: Correct a regression that can cause DWARF unwinding to fail for x86_64
  • Fix: Correct a race condition that could happen when setting custom keys for the previous crash in the delegate callback method

Introducing the ability to log NSErrors

by Jason St. Pierre, Product Manager

At last year’s Flight conference, we opened beta access to one of our new tools at Crashlytics Labs: the ability to log NSErrors on iOS, OS X, and tvOS. Beyond actionable insights into errors when an app or game crashes, we wanted to empower you to optimize your user experience even when your app isn’t crashing. Since Flight, we’ve been building this out, while releasing other major features such as Crashlytics for tvOS along the way.

Kicking off the new year strong, we’re excited to share today that we’re officially releasing the ability to log NSErrors on iOS, OS X and tvOS with Crashlytics!

Total Visibility Beyond Crashes

Crashes aren't the only adverse events that can take place in a running app. Errors might occur in the background and affect the behavior or performance while the app is running, leading to poor user experience or other serious problems later. Knowing about these non-fatal errors can help you monitor and address problems before they become more serious, or uncover issues that might be due to a server/back end problem.

With Crashlytics, we’ve extended the #1 crash reporting experience so you can easily log and fix the most critical non-fatal errors on Apple devices — all in real-time. Just like for crashes, you’ll have everything you need: in-depth stack traces, cross version analysis, device/OS breakdowns, among all the other features you already know. 

To get started with the new feature, simply go to your Crashlytics dashboard and select the “Non-Fatals” filter option. Now, all your non-fatal errors will be grouped by their error domain and code, and you'll see the NSLocalizedDescription right there in the list. 

We couldn’t be happier to get this new feature into your hands and look forward to the awesome apps you’ll be building this year. Happy coding!