All posts
EngineeringSeptember 25, 2026 · The Ubriot team · 4 min read

Name the destination before you build for release

A mobile artifact needs an intended audience and destination before a green build can become a responsible release candidate.

A mobile build can finish cleanly while the release plan remains vague. The package has a version and an identifier. It may even have passed a device smoke. Then someone asks where it should go: internal testers, a limited store track, or the public audience? If the answer is decided after the artifact is made, earlier approvals may have been given against an unstated assumption.

We prefer to name the destination before building for release. The destination is part of the question the pipeline is trying to answer. A package that is appropriate for a small test audience is not automatically approved for everyone, even if its bytes stay the same.

Write the intended audience into the request

A build request should carry more than a platform and version. It should identify the intended destination and audience class, such as an internal TestFlight group or an Android internal track. That information shapes which checks matter and who must review the result. It also lets a later operator see whether the submission followed the original plan.

The destination should be specific enough to rule out a dangerous guess. Production is not a precise audience. A named store track, testing group, or staged rollout scope is clearer. If a team has not decided, the build may still be useful for development or inspection, but it should not be labelled release ready.

Consider a package inspected for an internal group. The team verifies its identity and opens the main flow on a test device. That evidence may be sufficient to learn from the group. If the same package is later proposed for a broad audience, the old result remains valid for what it tested. It does not silently become proof for the larger decision.

Make destination changes reopen the right gates

A destination change need not force a rebuild every time. It should force a fresh decision about scope. The package identifier, signing identity, version fields, content, store configuration, and approval path should still match the proposed destination. The checks that were adequate for a narrow group may need to be expanded.

The release record should preserve the old intent and the new one. If an operator moves from an internal track to a staged public rollout, record when and why the audience changed, what additional proof was obtained, and who approved the move. Otherwise the history can look as if the broad release was always intended.

The same discipline applies in reverse. A public candidate may be pulled back to internal testing after a failure. Do not rewrite the earlier approval as though it never existed. Preserve the decision and the observation that narrowed the audience. That history helps the next operator avoid repeating the same assumption.

Keep store state separate from audience state

Uploading a package is not the same as making it available. A provider may accept an upload, process it, review it, and expose it to a testing group at different times. Those states deserve separate entries. The operator needs to know what has been accepted, what is pending, and who can actually install the package now.

A useful handoff might say: digest A was uploaded to the intended internal track, the provider returned reference B, processing is pending, and no tester availability has been confirmed. That is more useful than shipped. It tells the next person which evidence to seek before communicating availability.

Store feedback may also require a new package or a changed submission setting. If the artifact changes, attach fresh checks to the new digest. If only the destination or rollout scope changes, reopen the scope decision without pretending the bytes changed. The two kinds of change call for different work, and the release record should make that distinction easy to see.

Credentials and private provider details should stay in protected operational systems. The public lesson is the shape of the decision, not the contents of a signing key or an internal store account. A release note can state which class of check passed without exposing a secret or promising a provider outcome.

Ubriot is built for the work that connects a build to a responsible release. We want the intended audience visible at the start, next to the candidate artifact and its evidence. Before pressing build for release, name where the package is meant to go. If that answer changes, let the approval change with it.

Try Ubriot AI

React Native CI/CD from one CLI.

Get started