Before you start
- Install the
apsioCLI and store your project’s upload token withapsio login --with-token, or setAPSIO_TOKEN. - Make sure the build produces dSYMs: in the target’s Build Settings, Debug Information
Format is “DWARF with dSYM File” (
dwarf-with-dsym). New Xcode projects use it for Release.
Upload
Point the CLI at an archive, a dSYM bundle or a folder:- finds every dSYM under the paths you give: in an
.xcarchiveit reads thedSYMsfolder, and folders are searched recursively; - reads each one and keeps the Mach-O files that carry debug information;
- splits a file with several architectures into one upload per architecture, since each has its own UUID, the one crash reports carry;
- asks Apsio which UUIDs it already has, and uploads only the others, compressed.
--force
uploads them anyway.
Check without uploading
--dry-run finds and validates the dSYMs and lists their UUID, architecture, name and path,
without a token and without uploading.
Output for scripts
--json prints one JSON document on standard output and nothing else there:
found is filled by --dry-run. skipped lists files that are not usable dSYMs, with the
reason. failed lists uploads that failed, with the error. See exit codes.
Upload tokens
Uploads authenticate with an upload token, which uploads symbols for one project and reads nothing. It starts withapsio_ut_v0. and is separate from the read API’s project
tokens: an upload token cannot read, and a project token cannot upload. Until the console
issues them, ask Apsio for one per project.
- Lifetime: 90 days by default, a year at most. Store it as a CI secret (
APSIO_TOKEN) and replace it before it expires; an expired token is refused (exit code 3). - Scope: the project it names. Every upload made with it belongs to that project.
- Revocation: a token that leaks is revoked by its id, and the next upload with it is refused.
When you run the Apsio service locally from its repository,
pnpm --filter @apsio/api token:upload --org <uuid> --project <uuid> mints an upload token
with the local SYMBOL_TOKEN_SECRET (.env.example).Where to find dSYMs
Upload the dSYMs of every build you ship: the App Store, TestFlight and ad hoc builds.