Files
opencode-mobile/app.json
Den c43ec27a8c fix(release): give v0.4.15 its own versionCode so the release can actually ship (#180)
The v0.4.15 release commit (f564869) bumped package.json and app.json
`expo.version` but left `android/app/build.gradle` at versionCode 41 /
versionName "0.4.14" and app.json `android.versionCode` at 41. Consequences,
all observed on tag v0.4.15:

- `npm run check:versions` fails, so the F-Droid publish (run 31820921979)
  died at its first step and the `release` job in build.yml never ran — no
  GitHub release exists for v0.4.15. That is the source the new in-app update
  check polls, so the mechanism this release exists to ship had nothing to
  find.
- versionCode 41 is v0.4.14's. F-Droid and every direct-APK install key
  upgrades off versionCode, so even a successful publish would not have been
  offered to the 0.4.10/0.4.14 cohort. Play was unaffected only because the
  publish workflow overrides the code with run_number+100.

Fix is the missing half of the release bump: versionCode 42 / versionName
0.4.15, plus the changelog files named after the code (distribution/ for the
record, fastlane/ for F-Droid).

check-version-parity.mjs now also requires distribution/changelogs/<code>.txt
to exist and to describe the version being released, and the fastlane copy to
exist. A stale versionCode is otherwise internally consistent and silent;
verified it discriminates — code 41 with version 0.4.15 fails, 42 passes.

Tests: npm test 320 pass.

Co-authored-by: engineer <engineer@macbookpro.lan>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-08-14 10:33:38 -07:00

91 lines
3.0 KiB
JSON

{
"expo": {
"name": "OpenCode",
"slug": "opencode-mobile",
"version": "0.4.15",
"orientation": "portrait",
"scheme": "opencode",
"userInterfaceStyle": "automatic",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#0F172A"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "cc.agentlabs.opencode",
"buildNumber": "1",
"entitlements": {
"aps-environment": "production"
},
"infoPlist": {
"NSFaceIDUsageDescription": "Use Face ID to unlock OpenCode and access your sessions securely.",
"NSSpeechRecognitionUsageDescription": "OpenCode uses speech recognition so you can dictate prompts to your AI coding agent hands-free.",
"NSMicrophoneUsageDescription": "OpenCode uses the microphone to capture your voice when using speech-to-text input.",
"NSPhotoLibraryUsageDescription": "OpenCode can attach images from your photo library to messages to your AI coding agent.",
"NSCameraUsageDescription": "OpenCode can capture images with your camera and attach them to messages to your AI coding agent.",
"NSLocalNetworkUsageDescription": "OpenCode uses your local network to connect to self-hosted OpenCode servers running on your LAN.",
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true,
"NSAllowsArbitraryLoadsInWebContent": false
},
"ITSAppUsesNonExemptEncryption": false
}
},
"android": {
"package": "cc.agentlabs.opencode",
"versionCode": 42,
"usesCleartextTraffic": true,
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#0F172A"
}
},
"web": {
"bundler": "metro",
"output": "static"
},
"plugins": [
"expo-router",
"expo-secure-store",
"expo-local-authentication",
[
"@sentry/react-native/expo",
{
"organization": "vibetechnologies",
"project": "opencode-mobile"
}
],
[
"expo-notifications",
{
"icon": "./assets/icon.png",
"color": "#ffffff",
"sounds": []
}
],
[
"expo-image-picker",
{
"photosPermission": "OpenCode can attach images from your photo library to messages to your AI coding agent.",
"cameraPermission": "OpenCode can capture images with your camera and attach them to messages to your AI coding agent.",
"microphonePermission": false
}
],
[
"expo-speech-recognition",
{
"microphonePermission": "OpenCode uses the microphone to capture your voice when using speech-to-text input.",
"speechRecognitionPermission": "OpenCode uses speech recognition so you can dictate prompts to your AI coding agent hands-free."
}
],
"expo-localization"
],
"experiments": {
"typedRoutes": true,
"reactCompiler": true
}
}
}