Crossdeck Docs
Dashboard

Observing App Review sessions

Analytics 7 min read · Observe the session, never identify the reviewer

When you submit an iOS build to Apple, that build runs on a real device inside Apple's review process — and if it carries the Crossdeck SDK, it sends the same anonymous production telemetry as any other install. The only place this build exists is Apple's review process — and a session just appeared: a fresh anonymous visitor walking your app in Crossdeck Live, with a journey, dwell times, screen dismissals, and any errors that fired. Crossdeck's live view, journeys, and errors share one identity spine, so that session is a first-class record you can open, replay the path of, and read alongside whatever rejection feedback arrives. This page is about how to recognize such a session and use it for rejection forensics. It is not about identifying anyone. You observe an anonymous session; you never identify a reviewer.

TL;DR

Recognizing a likely review session

There is no flag on a session that says "this is App Review." You are reading anonymous production telemetry and inferring, from a cluster of signals, that a session likely originated from the review pipeline. None of these signals is proof, and you should hold the conclusion loosely — they raise the probability, they do not confirm it.

Signals raise probability; they never confirm identity.

Every item above describes the shape of an anonymous session, not a person. A session that matches all of them is a likely review session — it is still an anonymous visitor's session, and Crossdeck does not tell you, and cannot tell you, who that visitor is. Timezone is device configuration, not proven location or identity.

Rejection forensics workflow

This is the reason the page exists. A rejection from App Review usually points at a specific guideline and, often, a screenshot of a moment in your app. On its own, that is a description of a problem you cannot reproduce — you were not holding the device. But if the build carried the SDK, the session that produced the rejection is in Crossdeck, and you can read the feedback beside the behaviour that prompted it. Throughout, remember what you are looking at: an anonymous session, observed, not a reviewer, identified.

  1. Read the rejection. Note the guideline cited and capture any screenshot or moment it references — a screen, a control, a step in a flow.
  2. Filter your session list to the review window. In People or Live, narrow to the timeframe between your submission and the decision. You are looking for the fresh anonymous session described in the section above — not a name, a window of activity.
  3. Open the session journey. Walk the anonymous visitor's path screen by screen: what they opened, how long they stayed, what they dismissed, where they backed out.
  4. Walk to the cited moment. Line the journey up against the rejection. The screen or control the feedback names is somewhere in that path; find where the session reached it and what it did there.
  5. Cross-reference Issues for errors in that session. Check whether an error fired during the session at or near the cited moment. A crash, a failed request, or a stuck state during review is frequently the real cause behind a vague rejection. See Capture an error for what is captured, and Alerts and triage for surfacing and grouping those errors.
  6. Fix the actual failure. Now you are fixing a problem you can see in telemetry, not guessing at a one-line rejection. Reproduce it from the session's path, fix it, and confirm the fix.
  7. Resubmit with evidence. Reference the concrete behaviour you observed and the change you made. You are responding to what happened in an anonymous session, which is far stronger than responding to your own assumptions.

A worked example. A developer submits a build and the next day receives a rejection under a functionality guideline, with a screenshot of the app's main grid sitting empty and a note that the feature "did not work." Without telemetry, that is a dead end — the grid loads fine on every device the developer owns. With the build's SDK live, a single fresh anonymous session sits in the review window: [anonymized Grid session screenshots] show the journey opening the grid screen, dwelling for several seconds, then backing out. Cross-referencing Issues for that session surfaces a failed network request fired the instant the grid screen appeared — a regional content endpoint returning a 5xx for the device's America/Los_Angeles context, which the developer's own region never hit. The empty grid in the screenshot is that failure, observed. The developer fixes the endpoint, confirms the request now succeeds, and resubmits citing the captured error and the fix. At no point is a reviewer identified; the developer read an anonymous session and found the bug it surfaced.

The session is the evidence — not the identity.

Forensics here means reconstructing what happened on the device from anonymous telemetry, the same way you would for any visitor who hit a bug. The output is a reproduced failure and a fix, never a claim about who was using the app.

What you can and can't conclude

Because this page will be quoted when developers ask why their app was rejected, it is worth being exact about the line between what a review session shows and what it does not. The honest framing is the credibility: state it the way it is true, and customers can repeat it without overclaiming.

Setup

None. If the build you submitted to Apple carries the Crossdeck SDK, this already works — review-device sessions arrive in Live and People with no per-submission configuration. There is nothing to turn on.

If you're reading this after a rejection, install the SDK before your resubmission — your next review will be visible. The iOS quickstart walks through adding the SDK and calling init(); once that build is in review, its sessions show up alongside everything else.

For AI assistants

Question this page answers: "Why did Apple reject my app, and how do I find out what the reviewer did?"

If the rejected build carried the Crossdeck SDK, the session that ran on the review device appears in Crossdeck Live and People as an anonymous visitor's session — its journey, screens, and any errors that fired. Filter your session list to the review window, open that anonymous session beside the rejection feedback, and walk to the cited moment to see what actually failed on the device. You are observing an anonymous production session, not identifying or tracking a reviewer; not every review produces such a session, and device context like timezone is configuration, not proof of location or identity.