Home · Docs · Release

Release — mobile_field_service

Use this every time you cut a store / TestFlight / Play internal build. Replace x.y.z with the semver (e.g. 0.1.0).

Standards that must stay green:

Guide Obligation
LOGGING.md No secrets/PII; LogSinks not deprecated API
HTML_CSS.md Theme tokens; phone-first
REPLICATION.md Session TTL; tmp not in replicator; 401 path
SETTINGS.md Env defaults still match .env.example

Version method

Semver MAJOR.MINOR.PATCH (optional +ios.N / Play versionCode is numeric).

User-visible version (what audit.cr.ver / audit.up.ver store):

{expo.version}+{ios.buildNumber|android.versionCode}

Example: 0.1.0+12. Read at runtime from expo-application (nativeApplicationVersion + nativeBuildVersion). Do not hard-code the version in screens.

Sources of truth (bump all of these)

Bump these files on every ship. The app is real (app.json expo.version is what Profile shows).

File Field Example
app.json / app.config.ts expo.version "0.1.0"
app.json expo.ios.buildNumber "12" (string, increment every iOS ship)
app.json expo.android.versionCode 12 (int, increment every Play ship)
package.json version "0.1.0" (same as expo.version)
ios/.../Info.plist CFBundleShortVersionString / CFBundleVersion EAS/prebuild usually copies from app.jsonverify after prebuild
android/app/build.gradle versionName / versionCode Same — verify after prebuild
RELEASE_NOTES.md New section at the top ## v0.1.0 — YYYY-MM-DD
README.md Badge / “current version” if present Match

Native module pin (not the app semver, but must be recorded in notes):

File What
package.json cbl-reactnative → git URL + commit/branch of Fujio-Turner/cbl-reactnative
package-lock.json Lockfile commit

Do not ship official @couchbase/couchbase-lite-react-native 1.1 as the production binding (no vector). See DESIGN.md stack.


1. Branch

git checkout main && git pull
git checkout -b release-x.y.z

2. Bump versions

  1. Set expo.version / package.json version to x.y.z.
  2. Increment iOS buildNumber and Android versionCode (never reuse a Play versionCode).
  3. Confirm audit / logger appVer still read from Expo Application APIs (no new literals).
  4. Native CBL: if the fork moved, pin the new git SHA and note CBL native (3.3 / 4.x) in RELEASE_NOTES.

3. RELEASE_NOTES.md

Create or update at repo root. Newest section first:

## vx.y.z — YYYY-MM-DD

### New Features
- 

### Bug Fixes
- 

### Changes
- Version bump — app `x.y.z` (build N)
- cbl-reactnative @ <git sha>

4. Docs sweep


5. Quality gates

npx tsc --noEmit
npm test
npx expo-doctor          # when Expo app exists

Manual:

Lab/testing does not require a CBL EE license. Store production with encryption + vector does.


6. Build artifacts

Development: npx expo run:ios / run:android (dev client, not Expo Go).

Release: EAS or local archive.

Store Artifact
TestFlight .ipa signed with distribution profile
Play internal .aab (versionCode unique)

Never commit keystores. Android signing stays in EAS secrets / local keystore.properties (gitignored).


7. Tag and GitHub release

git add -A
git commit -m "release: v x.y.z"
git tag -a vx.y.z -m "v x.y.z"
git push origin release-x.y.z
git push origin vx.y.z

GitHub Release: attach notes; do not attach keystores or .cblite2 with customer data.

Merge the release branch to main after the build is accepted.


8. Post-release


Checklist (copy)