Oore CI
Understand Oore

How signing works in Oore

Understand how Oore separates repository-controlled builds from runner-owned mobile signing.

Oore treats repository execution and signing as different authorities. Repository commands produce the mobile output; fixed logic owned by the Direct macOS runner signs and verifies supported artifacts afterward.

The signing boundary

Signing files, passwords, and API keys are encrypted by oored at rest. The backend root key is a 0600 file readable only by its operating-system owner in the daemon data root, so the database and its matching root key belong to the same recovery set.

For an active assigned job, the trusted runner parent can retrieve signing material with a separate job-scoped capability. It keeps that material out of the repository checkout and scrubs managed signing values from repository child processes. The repository does not receive signing files, passwords, or the signing capability as build inputs.

The runner may hold signing material in its trusted parent while repository stages run. The supported boundary is what repository child processes receive, not a promise that the parent waits until every repository command has finished before retrieving material.

Android signs the completed output

An Android signing profile contains a keystore, alias, and passwords. The repository builds an APK or App Bundle without depending on Oore-managed signing variables. The runner then selects the configured variant, signs the completed output in a private signer workspace, verifies it, and cleans up the temporary signing files.

This keeps local developer signing independent. A repository can use its own local key.properties path outside CI while leaving the Oore signing profile to the runner.

iOS adds Apple identity and device rules

iOS signing combines a certificate, provisioning profiles, Team ID, and bundle identifier mappings. Oore supports manually uploaded assets, App Store Connect API synchronization, and a hybrid of those paths.

The Direct runner account must have an active macOS login session. Oore creates temporary job signing state and attempts to restore and remove it after the job. Profiles stay in the private job workspace. This cleanup is defense-in-depth, not hostile-code isolation for repositories already trusted to run as that macOS account.

What this means for you

  • Do not pass Oore-managed signing credentials through repository environment variables or Gradle source.
  • Keep an independent backup of signing keys and passwords.
  • Treat the Direct runner account as sensitive and preferably dedicated and non-admin.
  • A successful repository build can still fail later if signing or signature verification fails.
  • An iOS install also depends on a matching, unexpired provisioning profile and registered-device eligibility.

Next step

Add Android signing or configure manual iOS signing. Use the environment reference for supported repository inputs.