- Which architectures are supported?
- Which iOS platforms are supported?
- Am I required to use the TestFairy SDK?
- How do I fix "App could not be installed at this time"?
- Why do I see sessions by "User-1"?
- Why does app icon disappear right after download?
- Why linking fails with
ld: symbol(s) not found for architecture arm64?
- What's "You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)" error?
- Push notifications work when installed from Xcode, but not with TestFairy. Why?
- What is the difference between in-house and enterprise certificates?
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.
Video recording is configurable when uploading a new build, and even after it's live and has been distributed to others.
When uploading a build, TestFairy lets you control if the device screen should be recorded, if it should be recorded only if the user is connected to WIFI, and even set various parameters regarding the quality.
After the build has been uploaded, you still get control over these parameters. Simply visit the settings page by clicking 'Settings' in your build page, and then update the parameters accordingly.
When inviting testers to a build, you have an option to supply a comment. This may be instructions of how to use your app, the changelog from your code versioning system, or anything that might help you get better results from this testing.
Simply visit the build page, and click
Distribution and select
Invite testers by e-mail. At the bottom there's a checkbox for enabling outgoing e-mail, and a textbox for supplying the comment. When done, just click
Invite selected testers.
Session max-duration controls how much of the session will be recorded. Many developer won't be interested in video recording beyond the first 10 minutes. Crashes are caught regardless the max-duration limit.
In cases when the crash happened beyond the max-duration limit, the report will be attached to the session that was recorded.
There are two types of invitations in TestFairy. The first is, inviting tester to your account, which sends an email to the tester, asking them to register their iOS device (if needed). The second type is inviting tester to a specific build, where the email being sent contains a download link.
To re-invite a tester into your account, and ask them to register an iOS device, simply click on the "Testers" tab at the top, then click on "Add Testers", fill the details and submit. Make sure "Send email" checkbox is checked.
To re-invite a tester to a specific build, and tell the system to send another email, open the project and the specific build you want to invite testers to, then click "Distribution" and select "Invite testers by email". In the list below you will see the tester you want to re-invite. Just check the checkmark next to their name, and click "Invite selected testers". Again, please make sure you have "Send email" checkbox checked.
APK stands for Android PacKage. Simply put, it's a .zip file with a different extension and it contains all the files of the app. Compilation process results with an APK, and this can be installed on physical Android devices or emulators.
The .APK file contains many files, these can be viewed with an archiver such as WinZIP, WinRAR or The Unarchiver.
Instrumentation is process where code is added into 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 an 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 checkboxes customizations.
TestFairy supports every architecture Android platform supports. This includes ARM, x86 and mips.
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 (nor 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.
If your app is a keyboard service itself, you will only see the keyboard, and not the app that is using it. For the exact same reason.
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 to the code or can change it. With instrumentation, there is no SDK to integrate. However, TestFairy cannot instrumented in cases of multidex or instant-run. For these, you will have to integrate the SDK.
TestFairy iOS SDK supports the following architectures (CPUs):
- i386 (simulator)
- x86_64 (simulator)
TestFairy SDK is a static library, thus it runs on any platform that uses XCode for compilation. For ease of integration, TestFairy is also available as:
- Xamarin binding (both 32-bit and 64-bit)
- .NET assembly (.DLL)
- .NET assembly via NuGET package
- Xamarin binding through Xamarin Component Store
- Unity plugin
- Adobe Air Extension (.ANE)
- PhoneGap / Cordova plugin
TestFairy platforms is for both distribution and for analytics. You can use both, and you can also use 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 e-mail invitation to the selected testers.
Analytics require integration of the SDK. This is a 2-minutes task and it involves adding just a single line of code to your project. With analytics enabled, you will able to see a video recording when your app is being used, as well as receive logs from the device, analyse usage by checkpoints or loading of view controllers and much much more. For more information, please follow the integration manual.
"App could not be installed at this time" is a generic error when iOS cannot install the download app on the device. The reasons vary, and may be one of these:
- Device's UDID is not included in the provisioning profile.
- Not enough disk space on device to install.
- Device's architecture (eg. ARMv7) is not supported by the app.
- Device's operating system version (eg. 7.0) is too low for the app.
- Device's platform mismatches (eg. iPad app on an iPhone.)
- Enterprise team not included in prefix in embedded.mobileprovision file.
- App is not signed with an Ad Hoc or Enterprise (in-house) certificate.
TestFairy has a Troubleshooting tool to guide the tester or developer through the debugging of such problems. Simple visit https://my.testfairy.com/my/troubleshooting using Safari on your iOS device and follow the instructions.
If all fails, please contact support by click on Support button in your account page. We do our best to help debug causes and improve our one-of-a-kind Troubleshooting tool.
When using the TestFairy iOS SDK, all sessions are anonymous. Without access to device information, TestFairy cannot tell what's the email address of the tester.
It does know to associate sessions by the same testers to the same User-1. Using a token that is stored when the first session was created, TestFairy can identify sessions by the same tester.
Furthermore, TestFairy support correlationId. This identifier is any string that makes sense to the developer (you). It can be an email address of the tester, their Facebook id number, or an identifier in your own database. Using the SDK, simply call
[TestFairy setCorrelationId:@"my-id-00000000"];, and this identifier will show in all reports, instead of the generic User-1 values. Use this correlationId as you see fit.
When downloading an iOS app, the iOS operating system will show a progress during downloading and installation. This progress looks like an analog clock, an empty circle becoming full.
After installation completes, the system then looks if the app being installed, is alread installed on the device. If it does, it replaces the old app, with the version recently downloaded. You may have this app icon in a different screen tab, or maybe inside a folder.
Tip: Pull down the view to reveal the Spotlight search dialog. You can type the name of the app, and it will locate it on your device, regardless of screen tab or folder.
On various Xcode project configurations, you might be receiving the following error when linking with TestFairy:
"_OBJC_CLASS_$_TestFairy", referenced from: ld: symbol(s) not found for architecture arm64
For those projects, please add
libTestFairy.a as a framework in your Build Settings.
Xcode7 introduced a new feature (virtual architecture) called
Bitcode. This is a short for LLVM Bitcode, which is a virtual machine architecture Xcode uses as an intermediate platform for compilation. Instead of compiling apps to armv7, armv7s, arm64 - Xcode can now create a single architecture and the AppStore will generate optimized binaries for mobiles. This will greatly reduce the IPA filesize as an iPhone6+ user won't be downloading the binaries needed for iPhone4 and vice-versa.
To compile an app with
bitcode, it is required that all libraries and frameworks used will have bitcode enabled as well. Alternatively, you can disable ENABLE_BITCODE in your Xcode project. As of October 2015, it is not required by Apple for app submittion, but might be required in the future.
TestFairy iOS SDK version 1.5.0 has bitcode flag enabled and solves this problem. Simply upgrading the SDK will resolve this error in compilation.
TestFairy's SDK does not make any changes to your executable or IPA. A very common problem we have been seeing, is that developers make a mistake and develop using sandbox, and release using production aps environment. Please make sure your configuration is the same for production and adhoc/in-house releases.
These two are the same. When exporting an IPA from within Xcode, you export for Enterprise Development, but in some cases on iTunes Connect, this is refered as In-House.