Skip to main content

8 posts tagged with "report"

View All Tags

DEBUGGING ISSUES IN FLUTTER APP

Published: · Last updated: · 7 min read
Appxiom Team
Mobile App Performance Experts

Flutter is an open-source mobile application development framework created by Google. It's designed to help developers build beautiful and high-performance apps for iOS, Android, and the web. Like any software development process, developing a Flutter app involves debugging and testing your code to ensure it's working as expected.

In this blog post, we'll discuss some tips for debugging your Flutter app, along with some code samples to help you get started.

Use print statements

One of the most basic but effective ways to debug your Flutter app is by using print statements. With print statements, you can easily log values and variables to the console to see what's happening in your app. You can use print statements to track the execution of your code and check for errors or unexpected behavior.

For example, let's say you have a function that's not returning the expected value. You can add a print statement inside the function to see what's going on:

int add(int a, int b) {
print('Adding $a and $b');
int result = a + b;
print('Result: $result');
return result;
}

In this example, we've added two print statements inside the add function to log the values of a, b, and result to the console. This can help you identify any issues with your code and understand how it's executing.

Use breakpoints

Another useful debugging tool in Flutter is breakpoints. Breakpoints allow you to pause the execution of your code at specific points and examine the state of your app. You can use breakpoints to step through your code line by line, inspect variables and objects, and identify any issues with your code.

To add a breakpoint in Flutter, you can simply click on the line number in your code editor. When your app reaches that line, it will pause execution and allow you to inspect the state of your app. You can then step through your code using the debugging controls in your IDE.

For example, let's say you have a button in your app that's not working as expected. You can add a breakpoint inside the button's onPressed function to see what's happening:

FlatButton(
child: Text('Click me'),
onPressed: () {
// Add a breakpoint here
print('Button clicked');
// Rest of the code
},
);

In this example, we've added a breakpoint inside the onPressed function of a FlatButton. When we click the button, the app will pause execution at the breakpoint and allow us to examine the state of the app.

Use Flutter DevTools

Flutter DevTools is a powerful debugging tool that provides a graphical user interface for inspecting and debugging your Flutter app. DevTools can help you identify performance issues, examine the widget tree, inspect network requests, and much more.

To use DevTools, you'll need to install it and connect it to your running app. You can do this by following these steps:

  • Open a terminal window and navigate to your Flutter project directory.

  • Run the command flutter packages get to ensure you have all the required dependencies.

  • Run the command flutter pub global activate devtools to install DevTools.

  • Run your Flutter app using the command flutter run --enable-vmservice.

  • Open your browser and navigate to http://localhost:8080.

Once you've connected DevTools to your app, you can start exploring its features. You can use the Widget Inspector to examine the widget tree and identify any issues with your UI. You can use the Performance tab to identify performance issues and optimize your app's performance. And you can use the Network tab to inspect network requests and responses.

Use assert statements

Assert statements are another useful debugging tool in Flutter. Assert statements allow you to check for conditions that should always be true and throw an exception if the condition is false. You can use assert statements to catch errors early in your development process and ensure your code is working as expected.

For example, let's say you have a function that should only be called if a certain condition is true. You can add an assert statement inside the function to check the condition:

void doSomething(bool condition) {
assert(condition, 'Condition is not true');
// Rest of the code
}

In this example, we've added an assert statement inside the doSomething function to check the condition parameter. If the condition is false, the assert statement will throw an exception with the message "Condition is not true". This can help you catch errors early in your development process and ensure your code is working as expected.

Use logging libraries

In addition to print statements, you can also use logging libraries to log values and variables to the console. Logging libraries allow you to log different types of messages at different levels of severity, making it easier to filter and analyze your logs.

One popular logging library for Flutter is logger. logger provides a simple API for logging messages at different levels of severity, including debug, info, warning, and error. You can use logger to log messages to the console, a file, or a remote server.

Here's an example of how you can use logger in your Flutter app:

import 'package:logger/logger.dart';

void main() {
Logger logger = Logger();

logger.d('Debug message');
logger.i('Info message');
logger.w('Warning message');
logger.e('Error message');
}

In this example, we've created an instance of Logger and used it to log messages at different levels of severity. By default, logger logs messages to the console, but you can configure it to log messages to a file or a remote server.

Add APM and bug detection tools

Another way to ensure your Flutter app is working as expected is to use Application Performance Management (APM) and bug detection tools. APM and bug detection tools can help you identify performance issues, monitor user behavior, track errors and crashes in real-time, identify issues in your code, including memory leaks, null pointer exceptions, and other common programming errors.

Some popular APM and bug detection tools for Flutter include:

  • Firebase Performance Monitoring: Firebase Performance Monitoring is a tool that helps you monitor the performance of your Flutter app, including network latency, app startup time, and UI rendering time. You can use Firebase Performance Monitoring to identify performance bottlenecks and improve the user experience of your app.

  • Sentry: Sentry is an error tracking and bug detection tool that helps you identify and diagnose errors and crashes in your Flutter app. Sentry provides real-time alerts and detailed error reports, making it easy to identify and fix issues in your code.

  • Appxiom: Appxiom is a lightweight Dart plugin that works both as an APM tool and a bug detection tool. It captures performance issues and bugs including network calls failures, memory leaks and abnormal memory usage, frame rate issues and crashes.

  • Instabug: Instabug is a bug reporting and feedback tool that helps you collect user feedback and bug reports from your Flutter app. Instabug allows you to take screenshots, record videos, and attach logs and device details to bug reports, making it easy to diagnose and fix issues in your app.

By adding APM and bug detection tools to your Flutter app, you can ensure that your app is performing well, identify and fix issues quickly, and provide a great user experience for your users.

Conclusion

Debugging your Flutter app can be a challenging task, but with the right tools and techniques, you can identify and fix issues quickly and efficiently. In this blog post, we've discussed some tips for debugging your Flutter app, including using print statements, breakpoints, Flutter DevTools, assert statements, logging libraries, and using APM and bug detection tools to ensure that your Flutter app is performing well and to identify and fix issues quickly. By using these techniques and tools, you can ensure that your Flutter app is working as expected and provide a great user experience for your users.

IDENTIFYING ROOT CAUSE OF ANR IN ANDROID APPS

Published: · Last updated: · 2 min read
Robin Alex Panicker
Cofounder and CPO, Appxiom

Happiness is ... your customers coming back with stories of how your product helped them in solving their problems.Team Appxiom consider ourselves to be lucky as we do get such feedback. Of course we get reasonable share of critical feedback too. Most of our features evolved from problem statements conveyed by customers during our interactions.

ANR issues in Android apps.

One of such problem statement was regarding ANR in Android apps. While there are tools that will tell you if an ANR exists or not, none of them help you in identifying the root cause. Our co-founder Don Peter spend much time in trying to identify a solution. And he did come up with a good solution.

"Root cause of ANR issues identified", says team members of a leading mobile app.

One of our new customers, a very popular mobile app, had ANR issues being reported from their testing tools. They use Monkeyrunner extensively and the logs showed a bunch of ANR issues. Initially they thought third party SDKs like Appxiom could be the problem. But ANR issues were still reported indicating issues are within the app. So they reintegrated Appxiom and checked the dashboard.

I can only guess how happy they were when they saw ANR issues reported by Appxiom had pointers to the exact root cause. And mails from the developer and QA lead reflected their satisfaction and happiness 🙂.Appxiom provides cleaner stack trace that identifies root causes of ANR issues in Android app, says the developerAppxiom helped in identifying the exact root causes of ANR issues in Android app, says the QA leadTo know more about how Appxiom detects and reports ANR issues in android apps, here is an article by Don Peter. https://www.blog.appxiom.com/post/how-to-detect-and-fix-anr-in-android-apps

Visit appxiom.com to know more about Appxiom. Detailed documentation is available at docs.appxiom.com.

STATE OF BUGS IN MOBILE APPS - APPXIOM REPORT FOR YEAR 2020

Published: · Last updated: · 2 min read
Robin Alex Panicker
Cofounder and CPO, Appxiom

Year 2020 started with the fear of pandemic induced economic recession. But it seems technology domain was less unaffected than expected. Reason for this is the increased dependency on technology. This increase in demand reflected in the number of bug reports Appxiom handled in 2020. Appxiom captured 464 Million bug reports which is 45 times the count for 2019.

We analysed the bug types to get an understanding about the common issues reported in mobile apps. We decided to share this data to help developers to focus more on such issues and to improve the quality of mobile apps.

Bug stats for iOS apps

In 2020 Appxiom captured 138 Million bug reports from 624 iOS apps built on Objective C or Swift. This is from an install base of 1.3M devices.

API related bugs are the most common bugs in iOS and contribute 42.9% of all issues reported, followed by memory leaks at 25%. Crashes contribute 14.3% of bugs. Frame skips came next at 9.5%.

Bugs in iOS apps

Bug stats for Android apps

Appxiom captured 324 Million bug reports in 2020 from 1853 android apps built on Java or Kotlin. Total install base is 2.1M devices.

Memory leaks are the most common bugs in android and contribute 29.7% of all issues reported, followed by screen load delays at 25.4%. Crashes contribute 23.7%% of bugs. API bugs are at 9.5%.

Bugs in Android apps

Conclusion

While we do not claim this to be an exact representation of state of mobile app bugs across millions of apps out there, this data has some clear indicators. Higher density of memory related bugs is a major concern, and one of the reasons is that a good number of the memory leaks go unnoticed during development phase. API bugs and crashes are issues that could be identified before going in production, but looks like a not so small number of them make it to live apps.

WHY DO WE NEED TO MONITOR FEATURES FOR FAILURES IN ANDROID APPS?

Published: · Last updated: · 4 min read
Don Peter
Cofounder and CTO, Appxiom

We all know how difficult it is to build an app from scratch. In fact, you might be in the middle of building an app as you read this blog post. From working on the basic idea, conducting market research, deciding on the platform, fixing bugs at the development time, testing the beta version and finally releasing it, each process is tedious and time-consuming.

Then you spend a lot of time formulating various digital marketing and outreach initiatives to market your app and finally succeed in attracting users to sign up and use the app. But then, a section of users start complaining that the crucial feature in your mobile app fails.

Understandably, you would now be in a hunt to find out what could’ve gone wrong. But in most cases, you may not even be able to reproduce the issue or to identify where exactly the issue occurred in the code because of lack of data points.

Identifying the issue before app users report them

Now the question is, is there a way to identify such failures even before the users start leaving poor reviews on play store?

This is where the feature tracking mechanism in Appxiom comes in handy. With feature tracking enabled, Appxiom SDK will notify developers when a tracked app feature fails.

How does Appxiom report such feature failures?

Making use of feature tracking API, developers will be able to chain multiple functions and track feature failures in Android apps for failures.

Overview of how Appxiom SDK help report feature failuresLet us consider the example of an application like WhatsApp or Facebook messenger that allows users to chat with each other. In order to track its messaging feature, we chain the send and receiveAcknowledgement functions in our codebase using the API provided by the SDK.

Once chained, Appxiom will monitor if the end function is triggered after the execution of the start function within the expected time which can be set by the developer with milliseconds precision. In case the end function is not executed within the expected time, Appxiom will report it as an issue to the dashboard immediately.

Java code snippet on how to chain start and end functions of a feature using the Ax.call() API and @Observe annotation provided by the SDK

// Function to be executed when user types a text message and clicks on send button.
// Replace traditional function call with Ax.call() API.
Ax.call("messageTextFromUser", ChatActivity.this,
chatEditText.getText());
}

// By using @Observe annotation, chain the start function 'messageTextFromUser' and the end function 'messageSentSuccessfully'. Appxiom will raise an issue report if the end function is not executed within the expected execution time.

@Observe(nextFunctionId = "messageSentSuccessfully",
nextFunctionClass = ChatActivity.class,
expectedChainedExecutionTime = 5000)
public void messageTextFromUser(String message){
...
}



// Function to be executed once the text message is successfully sent.
// Replace traditional function call with Ax.call() API.
Ax.call("messageSentSuccessfully", ChatActivity.this,
conversationIdentifier);
}

public void messageSentSuccessfully(Object conversationId){
...
}

Kotlin code snippet on how to chain start and end functions of a feature using the Ax.call() API and @Observe annotation provided by the SDK

// Function to be executed when user types a text message and clicks on send button.
// Replace traditional function call with Ax.call() API.
Ax.call("messageTextFromUser", this@ChatActivity,
chatEditText.getText())
}

// By using @Observe annotation, we chain the start function 'messageTextFromUser' with the end function 'messageSentSuccessfully'. Appxiom will raise an issue report if the end function is not executed within the expected execution time.

@Observe(nextFunctionId = "messageSentSuccessfully",
nextFunctionClass = ChatActivity::class,
expectedChainedExecutionTime = 5000)
fun messageTextFromUser(message :String){
...
}



// Function to be executed once the text message is successfully sent.
// Replace traditional function call with Ax.call() API.
Ax.call("messageSentSuccessfully", this@ChatActivity,
conversationIdentifier)
}

fun messageSentSuccessfully(conversationId :Object){
...
}

Please find our detailed Android documentation to find out how to chain functions to track feature failures.

In-depth data points to reproduce and fix the issue

The activity trail which is a chronologically ordered list of app events along with function parameters that were passed to the tracked function at runtime will help identify the root cause of the issue.

Apart from these, data points like device and device state data will also be included with every issue report. These in-depth data points will enable developers to reproduce the issue and fix them fast.

Appxiom is capable of detecting feature failures in iOS and watchOS apps. Apart from feature failures, SDK is capable of detecting and reporting crashes, API call issues, frame rate issues, ANR, function failures, memory leaks, abnormal memory usage, exceptions and custom issues. Appxiom is available for Android as Java & Kotlin SDK, iOS as Objective- C & Swift Framework and watchOS as Objective-C & Swift Framework.

Visit appxiom.com to learn more about Appxiom. Detailed documentation is available at docs.appxiom.com.

HANDLING BUGS THAT CAN BE ANTICIPATED IN ANDROID APPS.

Published: · Last updated: · 3 min read
Don Peter
Cofounder and CTO, Appxiom

Let us consider a scenario where your app user initiates a payment process in your Android app. You must have an integrated payment processing platform like Stripe in your app. The outcome of the transaction can result in either success or failure. In a good number of such cases, you already know situations in the code base that can fail.

public class MyPaymentSessionListenerimplements 
PaymentSession.PaymentSessionListener {

// Called whenever the PaymentSession's data changes.
@Override
public void onPaymentSessionDataChanged(@NonNull
PaymentSessionData data) {
}

// Update UI to indicate that network communication is in
// progress or complete.
@Override
public void onCommunicatingStateChanged(boolean
isCommunicating) {
}

// Error callback which should be reported
// using a bug reporting tool.
@Override
public void onError(int errorCode, @NotNull String
errorMessage) {
}
}

Code snippet | Response callbacks from Stripe payment processing platform

If these issues that can be anticipated are unreported, it will surely make your heads scratch. So you rely on bug reporting tools like Bugsnag, Firebase or Appxiom to make your lives easier.

How to identify the right tool?

Even though developers know the location of these issues beforehand, a detailed bug report with relevant data points will help us identify the root cause and fix them fast.

Ability to set a textual description for the issue.

First we need a basic API to report such issues with a title and a detailed description of the issue.

API.collectIssue("Issue Title", "Detailed Issue Description")

Ability to collect device information

As Android ecosystem is highly fragmented, the need to get in depth device specific information is important. Bug reporting tool that you choose should be able to collect device information like brand and model of the device, screen resolution and much more to aid developers in fixing the issue.

Identifying how your users were interacting with the app.

As these issues are generic, an ideal way to figure out the root cause is to know how the user was interacting with the app. For that, we need to be aware of the list of user events that happened before the issue.

How Appxiom handles such anticipated issues

This is where the activity trail in Appxiom comes in handy. It is a chronologically ordered list of events that occurred a minute prior to the issue.

By integrating a bug reporting tool like Appxiom, you will be able to report such anticipated failure scenarios with the help of a single line Ax.reportIssue() API.

Ax.reportIssue(context, "Payment Failed", reason);

Appxiom API to report issues in Java based projects

Ax.reportIssue(this@PaymentActivity, "Payment Failed" ,reason)

Appxiom API to report issues in Kotlin based projects

All bug reports generated by Appxiom will have relevant data points like textual description of the issue, activity trail along with device and device state information.

Activity trail (app events) captured by AppxiomDevice information captured by AppxiomFor more information, visit the documentation page for Android (Java & Kotlin), iOS (Objective-C & Swift) and watchOS (Objective-C & Swift) platforms.

Visit appxiom.com to register with Appxiom. Detailed documentation is available at docs.appxiom.com.

HOW TO DETECT SCREEN LOAD DELAYS IN ANDROID APPS

Published: · Last updated: · 3 min read
Don Peter
Cofounder and CTO, Appxiom

While using an app, users expect it to be highly responsive and fast loading. At times apps may take an abnormal amount of time to open a new screen. In Android, this issue is known as screen load delay.

Normally screen load delay occurs in Android apps when the main thread consumes a lot of time to execute complex processes while loading a new activity or a fragment.

Screen load delays affect the user experience, but they go unnoticed by developers and cause users to even rate the app poorly on the android play store. Therefore, it is important for developers to be notified about screen load delay at the earliest.

This is where Appxiom comes in.

With a simple 3 step integration process, Appxiom SDK for Android apps is capable of automatically detecting screen load delay. For more detailed integration guide, visit our documentation pages for Android (Java & Kotlin)

Detecting screen load delay with the help of activity trail

When an activity or a fragment in an Android app takes more than 6 seconds to load, Appxiom immediately reports it as an issue. Bug reports from Appxiom include relevant data points like activity trail, device and device state data, that will help developers to reproduce the bugs faster.

Activity Trail

Activity trail is a chronologically ordered list of app events, that will aid the developers to understand the user flow for a minute prior to the occurrence of the issue.

Activity trail has three components

  • The Activity segment, that has details of the app event.

  • The timestamp segment, that has details of the time at which the event got recorded.

  • The memory segment, that shows the percentage of free memory.

Screen loading delay reported by Appxiom SDK for AndroidThe above screenshot shows that Appxiom SDK has detected a delay in the loading of ‘ChatActivity’.

To identify the root cause of the issue, let us take a close look at the activity trail. Here 'ChatActivity:onStart' started after the event 'ChatActivity: loading user from db' with a gap of more than six seconds. The delay is caused during the event 'loading user data from the database' and this information gives a clear direction on what the fix should be.

Fixing screen loading delay

It is better to execute all time-consuming processes like database operations, I/O operations and calculations through separate threads. This approach will help in avoiding such delays.

Appxiom also detects screen load delay in iOS and watchOS apps. Apart from screen load delays, Appxiom is capable of detecting API call issues, ANR issues, memory leaks, abnormal memory usage, function failures, crashes and custom issues.

Visit appxiom.com to learn more about Appxiom. Detailed documentation is available at docs.appxiom.com.

HOW TO DETECT ABNORMAL MEMORY USAGE AND MEMORY SPIKES IN IOS APPS

Published: · Last updated: · 4 min read
Don Peter
Cofounder and CTO, Appxiom

Though it is often advised to keep the app’s memory footprint as low as possible, developers tend to overlook this aspect during app development. As a result, the elements that consume the app’s memory go unchecked, which leads to the app consuming an abnormal amount of the device’s memory.

When the iOS app consumes a considerable amount of allocated memory, it leads to an out of memory exception, resulting in an app crash and affecting user experience. This makes it important for developers to be notified about abnormal memory usages in both development and production environments at the earliest.  

Abnormal memory usage occurs when unused memory is not reclaimed properly or because of inefficient object reuse.

With Appxiom, abnormal memory usage can be detected at the earliest and developers get to fix the issue fast.Appxiom is an automated bug reporting tool that is capable of detecting abnormal memory usages and memory spikes in iOS apps.

Using Appxiom to track memory issues in iOS

With a simple 3-step integration process, Appxiom framework for iOS detects and reports abnormal memory usage in both development and production environments. Please visit our documentation page for more details. 

Tracking memory usage with Activity trail

Appxiom reports high memory usage when the iOS app consumes more than 30% of the physical memory. The bug report will have data points like activity trail with memory usage patterns along with device and device state information, which will aid developers to reproduce the bug. 

Activity Trail from an issue reportActivity trail consists of a list of events that occurred one minute prior to the issue occurrence. The app events along with the percentage of free memory available at each point are displayed in a chronological order. 

Components of Activity trail

Section of Activity Trail

Activity

The activity segment has details of the app events. The user event will have two components separated by a colon

  •  The name of the class in which the event gets reported

  •  The textual description of the event.

Timestamp

The timestamp segment has details related to the time at which the event gets recorded. 

Free Memory

The memory segment also contains the percentage of free memory available for the app at the time of the event. 

How Appxiom helps in finding the root cause

Abnormal memory usage reported by AppxiomLet’s consider a use case as indicated in the above screenshot. Here, Appxiom has detected high memory usage in an iOS app. The issue is that the app’s memory usage crossed 2587213824 bytes, which is more than 30% of the physical memory size i.e 8589934592 bytes. 

With an in-depth evaluation of the activity trail section in the issue report, we understand that while loading the first banner image, the free memory was around 79%. But when the final banner image was loaded, the memory dipped down to almost 71%. So with each banner image, the amount of free memory available goes down. By analysing the issue further in code, we can come to the conclusion that the root cause for the free memory dip was that the allocated objects for banner images are not released. 

This scenario may lead to an app crash. In order to avoid the app from crashing, Appxiom detects and reports whenever the app consumes more than an ideal amount of free memory.

Activity trail helps developers to pinpoint where exactly the issue is so that necessary changes can be made in the code and a patch version be released fast. 

Custom Activity Trail events

Apart from default events, Appxiom allows developers to set custom app events in activity trail (refer our Objective-C and Swift documentation) with an API, which can be called anywhere in the code. These custom events will be recorded and shown along with default app events in the activity trail section in Appxiom dashboard. 

Along with high memory usage and spikes, Appxiom also detects memory leak in iOS apps. To know more read our blog Detect memory leaks in iOS

Apart from memory-related issues, Appxiom capable of detecting and reporting crashes, API call issues, frame rate issues, ANR, function failures, exceptions, delays and custom issues.  Appxiom is available for iOS as Objective-C and Swift Frameworks, watchOS as Objective-C and Swift Frameworks, and Android as Java and Kotlin SDKs platforms. 

Visit appxiom.com to know more about Appxiom. Detailed documentation is available at docs.appxiom.com

HOW TO DETECT AND REPORT BUGS IN ANDROID APPS

Published: · Last updated: · 6 min read
Don Peter
Cofounder and CTO, Appxiom

One of the challenges mobile app developers face is collecting as much relevant data to reproduce bugs reported during testing and more so production. In production even detecting bug occurrences becomes a challenge. Manual bug detection and data collection in Android mobile apps during testing and development environment is time consuming and in production it is near impossible. Here is where tools like Appxiom aid the developers.

Appxiom is an automated, light-weight bug reporting SDK for Android apps that helps developers to reduce the bug fixing time by providing clear and crisp issue reports with detailed data points for effective root cause analysis.

First things first, Appxiom has an easy three step integration process.

  • Register with Appxiom using the ‘Get Started’ button in https://appxiom.com and login to the dashboard. 

  • Use ‘Add App’ to link your Android app to Appxiom.

  • Integrate Appxiom SDK to your app as a gradle library.

For a more detailed integration guide, visit our documentation pages for Android (Java & Kotlin).

Appxiom is capable of reporting multiple bug types in Android apps. Some of the main types of bugs in Android apps are,

Types of Issues captured and reported by Appxiom

Memory Leaks

Memory Leaks occur in Android apps when unused objects are not cleared from the device’s memory. Appxiom SDK has out of the box capability to detect memory leaks in Android apps. and reports it to the dashboard with data points like class stack, activity trail, device and device state info. 

Memory Leak in Android

Crashes

App Crashes are fatal and will affect the user experience, which may lead to user’s uninstalling the app. 

App Crash in AndroidWith basic integration, Appxiom SDK is capable of reporting crashes along with data points like device and device state data, activity trail and full stack trace.

API Failures

With a single line of code, Appxiom SDK is capable of reporting API issues like status code errors, delayed API call executions or even duplicate API calls. Appxiom reports API failures with detailed data points including network parameters like full URL, request-response headers and request body. 

API Issue in Android

Abnormal memory usage

When an app consumes a high amount of device’s memory, Appxiom SDK immediately reports it. Activity trail in issue report will enable developers to identify the reason for the spike in memory usage.

Abnormal Memory Usage in Android

Function failures

Issues in code level functions like unexpected return value, delay in function execution are called function failures. Appxiom SDK provides a single line API to track code level function failures. Data points like function parameters are sent along with each issue report with will aid developers in fixing the issue fast.

Function Failure in Android

Feature failures

Using the function tracking API, SDK allows developers to chain multiple functions. Once chained Appxiom will monitor if the second function is executed within the stipulated time (can be set by the developer) after the execution of the first function. If not, then Appxiom SDK reports it as an issue. This will enable developers to report any app feature failures.

Feature Failure in AndroidBug reports will include data points like activity trail, function parameters and return values.

Custom issues

Appxiom SDK provides a single line API for developers to report any custom issues. 

Custom Issue report in Android

ANR

ANR or App Not Responding occurs due to frame rate issues in Android, that block the UI thread for more than 5 seconds. By tracing the Activity trail events, developers can reproduce and can fix ANR issues fast. 

ANR report in Android

Screen loading delay

Delay in loading of any activity or fragment will be automatically reported by Appxiom SDK. 

Screen Loading delay in AndroidNow, let us take a look at the data points in bug reports of Appxiom that help developers to reproduce the bugs effectively. 

Data Points Explained

Error insights

Error insights help the developers to find commonalities across occurrences for faster root cause analysis. Error insights consist of information like bandwidth strength, battery level, low memory warning, OS versions, device names, country name and timezone offsets. 

Error Insights from an issue report in Android

Activity Trail

Activity trail is a list of chronologically ordered app events, that helps developers to identify where the issue occurred. It consists of three components, 

  • The Activity segment, that has the details of the app event.

  • The timestamp segment, that has time at which the event got recorded.

  • The memory segment, that shows the percentage of free memory.

Activity-trail from an issue report in Android

Stack trace

Stack trace helps the developers to track the exact line of code where the crash occurred.

Stack trace from an issue report in Android

Network Parameters

Network parameters provide in-depth information on network request and response data. Network parameters will have request headers, request body, request body size, response headers, status code and response body size. 

Network parameters from an issue report in Android

Device & Device State info

Device & Device state info gives the developer information about the device and the state of the device at the time of bug occurrence.

Device and Device State data from an issue report in Android

Function Parameters

Function parameters section of data points will contain parameter value and data type of all the parameters passed to the function being tracked during runtime.

Function parameters from an issue report in Android

Data Security & Data Privacy

Appxiom SDK is architectured in such a way that all our app users remain anonymous to the system as we do not collect any PII which ensures data privacy. All data collected, sent and stored by Appxiom are secured with end to end encryption. Appxiom is also GDPR compliant.

Call back mechanism

For every issue that is raised by the Appxiom SDK, a callback function will be triggered, which allows developers to handle the issue gracefully. You can read more about the same in our Java and Kotlin documentation pages.

Appxiom is also available as Objective-C and Swift frameworks for iOS and watchOS. Visit appxiom.com to know more about Appxiom Detailed documentation is available at docs.appxiom.com.