only-bible-app v3.7.2+24

#kotlin#android#ios

git clone https://git.pyrossh.dev/only-bible-app

The only bible app you will ever need. No ads. No in-app purchases. No distractions.


Only Bible App

The only bible app you will ever need.

No ads, No in-app purchases, No distractions.

Optimized for reading and highlighting. Bibles which are in the public domain are supported. Verse by verse audio playback is supported for most of the languages using Azure TTS. Many languages supported Indian, European and Asian.

flutter pub run flutter_launcher_icons --file pubspec.yaml
flutter pub run flutter_native_splash:create

Testing

Update screenshots

test/screenshot_test.dart uses golden_screenshot to render the app for each device (iPhone, iPad, Android phone, macbook) and writes the images directly into each platform's fastlane screenshots folder:

  • android/fastlane/metadata/android/en-GB/images/
  • ios/fastlane/screenshots/en-US/
  • macos/fastlane/screenshots/en-US/
flutter test test/screenshot_test.dart --update-goldens

Setup

brew install fastlane

Environment variables

Copy .env.example to .env and fill in real values for AZURE_TTS_SUBSCRIPTION_KEY, RESEND_API_KEY and CLOUD_TRANSLATE_API_KEY.

lib/env.g.dart is generated from .env via envied and is gitignored, so it must be (re)generated after cloning and any time .env changes:

dart run build_runner build --delete-conflicting-outputs

Signing certificates and API keys

All signing certificates, provisioning profiles, keystores and API keys used by fastlane (iOS/macOS/Android) live in the gitignored certs/ directory at the project root, e.g. certs/AuthKey_CB6LCVYFTC.p8, certs/pyrossh_keystore.jks, certs/service_account.json. Copy certs/key.properties.example to certs/key.properties and fill in your Android signing details; iOS/macOS certs and provisioning profiles are fetched automatically into certs/ by each platform's fastlane certs lane.

Release Process

  • Create file fastlane/metadata/android/en-GB/changelogs/$versionCode.txt and add change details
  • Screenshots are left untouched by default — regenerating and re-uploading them on every release is slow and usually a no-op since the UI rarely changes. To update them as part of a release, opt in with UPDATE_SCREENSHOTS=1 (or the fastlane lane option update_screenshots:true). This regenerates them via flutter test test/screenshot_test.dart --update-goldens and uploads them with overwrite_screenshots: true so App Store Connect's/Play Store's existing screenshots are replaced rather than skipped as duplicates. To update them without doing a full release, run the platform's screenshots lane directly, e.g. cd android; fastlane screenshots.

All platforms at once

make release

Builds, uploads and submits the appbundle to the Play Store, the ipa to the App Store, and the pkg to the Mac App Store, one after another, without touching screenshots. Equivalent to running make release-android, make release-ios and make release-macos in sequence — use those individually to release just one platform without the others.

Add UPDATE_SCREENSHOTS=1 to also regenerate and upload fresh screenshots as part of the release, e.g. make release UPDATE_SCREENSHOTS=1.

Data Backup

android:allowBackup is not set, which means it defaults to true on Android — so Auto Backup is already enabled. Your app_state.json in the documents directory will be backed up to Google Drive automatically.

However, there's one thing worth noting: the tag is missing android:fullBackupContent or android:dataExtractionRules, which means everything in the app's data directory is backed up (including potentially sensitive data). That's fine for this app since it's just preferences and highlights.

iOS is also fine — getApplicationDocumentsDirectory() is included in iCloud backups by default with no configuration needed.

So both platforms are already covered out of the box. No changes required.