My app crashes while offline, will I get the report?


TestFairy keeps crashes on disk if it can't send them immediately. The next time the app runs, TestFairy will send out the saved crash reports and attach them to the appropriate sessions.

Back to top

Will crashes be caught even after a session stopped recording?


Session max-duration controls how much of the session will be recorded. Many developers won't be interested in video recording beyond the initial 10 minutes. Crashes are caught regardless of the max-duration limit.

In cases where a crash happens beyond the max-duration limit, the report will be attached to the session, along with the part that was recorded.

Back to top

What is an APK?

APK stands for Android PacKage. Simply put, it's a .zip file with a different extension, and it contains all the files of an app. The compilation process results with an APK, which can be installed on physical Android devices or emulators.

The .APK file contains many files, which can be viewed using an archiver such as WinZIP, WinRAR or The Unarchiver.

Back to top

What is "instrumentation" ?

Instrumentation is a process where code is added to an existing program (or app) in order to monitor, trace, benchmark and debug.

TestFairy uses instrumentation in Android to provide the app developer with a wide range of monitoring capabilities, without the need to write a single line of code.

This procedure is done in real-time during the upload of an APK file. During the process, TestFairy will add instructions to monitor calls to (for example) startActivity, GPS location updates, audio record buffer callbacks and others. Each can be enabled and disabled by the developer when uploading a build, using the checkboxed customizations under "Advanced Settings".

Back to top

Which architectures are supported?

TestFairy supports every architecture the Android platform supports. This includes ARM, x86 and mips.

Back to top

Where is the keyboard in the captured video?

TestFairy captures the screen display generated by your app. In Android, the keyboard belongs to another process, and is rendered onto the screen using a system service.

This means that TestFairy (not your app) has access to the pixels or what is being rendered by that process. TestFairy will not be able to record another process's video display.

Therefore, if your app is a keyboard service in itself, you will only see the keyboard, rather than the app that is using it.

Back to top

Why isn't TestFairy recording any videos?

When uploading an APK via the web interface, TestFairy can automatically use instrumentation, and add our SDK to your app. This is very useful for Product and QA Managers who don't have access or permissions to the code. With instrumentation, there is no SDK to integrate. However, TestFairy cannot be instrumented in cases of multidex or instant-run. For these cases, you will have to integrate the SDK.

Back to top

Am I required to use the TestFairy SDK?

The TestFairy platform is used for both distribution and for analytics. You can use either both, or just one of them.

App Distribution does not require integration of the TestFairy SDK and provides an easy-to-use platform for sending iOS IPA files to testers and colleagues in your enterprise. Simply upload an Ad Hoc or Enterprise signed IPA files and send an e-mail invitation or App Landing Page to the selected testers.

Using analytics requires integration of the SDK. This is a 2-minute task that involves adding just a single line of code to your project. With analytics enabled, you will able to see a video recording of your app being used, as well as receive logs from the device, analyse usage with checkpoints or loading view controllers and much much more. For more information, please follow the integration manual.

Back to top

How do I capture touches not caught by TestFairy?

TestFairy attempts to catch user touches in your app, however, these are limited to buttons and list views. If there's a View who's touches you'd like to capture, you can make use of the TestFairy.addEvent to see touches appear as events in your timeline.

As an example, in the code below, a View.OnClickListener is attached to an ImageView. Using the onClick callback, an event was sent to TestFairy with a custom message, and, in this case, the content description of the Image.

findViewById( View.OnClickListener() {
    public void onClick(View view) {
        String description = view.getContentDescription().toString();
        TestFairy.addEvent("ImageView clicked: " + description);

Back to top

Why my application cannot find some TestFairy classes in runtime?

Some compile-time dependencies may preprocess existing binaries in your project to perform tasks such as performance profiling, multidexing and dependency injection. When used alongside Proguard or R8, this may cause incorrect removal of TestFairy classes during a build. If such issue occurs, your app will crash with a ClassNotFoundException or a similar exception. In order to circumvent that, make sure you append the rules below to your existing proguard rule set and add necessary exclusion statements to your gradle plugin configurations if necessary.

 -keep class com.testfairy.** { *; }
 -dontwarn com.testfairy.**
 -keepattributes Exceptions, Signature, LineNumberTable

Back to top

Last updated on 2023-05-23