Collecting crash logs and videos from device farm runs means configuring both the test framework and the CI pipeline to capture artifacts automatically on every run, not just on failure, since intermittent issues are often easier to diagnose with a passing run for comparison. On Android, full session logs should be captured and Android's built-in screen recording can produce a video of each test run; crash traces are captured automatically and can be parsed for stack traces from native crash and ANR trace files. On iOS, Xcode's result bundle already includes screenshots at each test step and, when enabled, an automatic screen recording of the test session, along with crash logs collected from the simulator's crash reporter, which XCUITest can be configured to attach directly to the test report. These artifacts should be uploaded to CI as build artifacts with a retention policy, since screen recordings for every parallel shard on every commit can consume significant storage quickly if kept indefinitely. Centralizing logs and videos alongside the test report, rather than in a separate system, is what actually makes them useful during triage. Nanobase AI's Mobile Test Lab captures logs, screenshots, and recordings automatically for every Android and iOS test run.

Artifacts are only useful if they are findable

Capturing logs and videos accomplishes little if the next engineer cannot quickly locate the ones relevant to a specific failure. The practical difference between an artifact archive that speeds up triage and one that just consumes storage is naming and structure, not the capture mechanism itself. Tag every artifact with build ID, commit SHA, device or emulator profile, and test name at capture time, since reconstructing that context after the fact from a folder of generic filenames wastes the time the automation was meant to save.

Artifact types and their purpose

ArtifactPlatform toolingPrimary use in triage
Full session logAndroid logcat / iOS unified logReconstruct app behavior leading to the failure
Screen recordingAndroid screen recording / Xcode result bundle videoVisually confirm what the user would have seen
Crash traceNative crash and ANR trace files, simulator crash reporterIdentify the crashing thread and call stack
Symbolicated stack tracedSYM files (iOS), ProGuard/R8 mapping files (Android)Turn an obfuscated address into a readable function name

Every artifact type above answers a different triage question, which is why collecting only logs or only videos leaves gaps a triager has to fill by guessing.

Symbolication is the step teams forget

A raw crash trace from a release build is close to useless without the matching symbol file, since release builds strip debug symbols and, on Android, often obfuscate code through ProGuard or R8. Without the corresponding dSYM file or mapping file archived alongside that specific build, a crash trace shows memory addresses and obfuscated names instead of the actual function and line number. Archive symbol files per build version as part of the release pipeline, not as an afterthought when a crash needs investigating months later. An unsymbolicated crash trace from a release build is often not worth the time spent trying to read it.

A retention policy that keeps artifacts useful

  1. Capture logs, screenshots, and recordings on every run, not only on failure, since intermittent issues are often diagnosed by comparing a failing run against a recent passing one.
  2. Upload artifacts to CI as build artifacts immediately after the run completes, tagged with the identifiers above.
  3. Set a retention window, commonly measured in weeks rather than months, since full-session recordings across every parallel shard on every commit accumulate storage quickly.
  4. Keep artifacts from release builds longer than from routine CI runs, since production-adjacent failures are referenced further into the future.

A retention policy that treats every artifact identically either drowns the team in storage cost or deletes the exact recording needed to investigate a rare, high-severity failure.

Frequently asked questions

Does iOS capture screen recordings automatically during XCUITest runs?

Yes, Xcode's result bundle includes screenshots at each test step by default, and automatic screen recording of the full test session can be enabled, giving both step-level and continuous video evidence of a failure.

Why keep passing-run artifacts instead of only failures?

Intermittent and flaky failures are often easier to diagnose by comparing a failing run's logs against a recent passing run for the same test, which requires having both available rather than only the failure.

How does this data feed into automated triage?

Structured, symbolicated artifacts are the direct input an AI triage system needs to classify a failure accurately. See AI triage of failed mobile test runs for how that classification works.

Should artifact storage be centralized with the test report?

Yes, keeping logs and videos alongside the test report rather than in a separate system is what actually makes them useful during triage, since engineers investigate a failure from the report first.

How Nanobase AI helps

Nanobase AI, an accepted member of the NVIDIA Inception Program, captures logs, screenshots, symbolicated crash traces, and recordings automatically for every Android and iOS test run its Mobile Test Lab executes, structured for fast triage rather than raw storage. Artifacts arrive already tagged and symbolicated, so triage starts from a readable stack trace instead of a raw memory dump. This pairs with our mobile CI/CD pipeline integration.

Ready to discuss your project? Contact Nanobase AI or email hello@bumu.tech.