#!/bin/bash # # Set up the Omi Mobile Project(iOS/Android). # # Prerequisites (stable versions, use these or higher): # # Common for all developers: # - Flutter SDK (v3.24.1) # - Opus Codec: https://opus-codec.org # # For iOS Developers: # - Xcode (v15.2) # - CocoaPods (v1.14.3) # # For Android Developers: # - Android Studio (Iguana | 2023.2.1 Patch 2) # - Android SDK Platform (API 34) # - JDK (v17) # - Gradle (v8.10) # - NDK (27.0.12077973) # Usages: # - $bash setup.sh ios # - $bash setup.sh android set -euo pipefail echo "👋 Yo folks! Welcome to the OMI Mobile Project - We're hiring! Join us on Discord: http://discord.omi.me" echo "Prerequisites (stable versions, use these or higher):" echo "" echo "Common for all developers:" echo "- Flutter SDK (v3.24.1)" echo "- Opus Codec: https://opus-codec.org" echo "" echo "For iOS Developers:" echo "- Xcode (v15.2)" echo "- CocoaPods (v1.14.3)" echo "" echo "For Android Developers:" echo "- Android Studio (Iguana | 2023.2.1 Patch 2)" echo "- Android SDK Platform (API 34)" echo "- JDK (v17)" echo "- Gradle (v8.10)" echo "- NDK (27.0.12077973)" echo "Usages:" echo "- bash setup.sh ios" echo "- bash setup.sh android" echo "" API_BASE_URL=https://backend-dt5lrfkkoa-uc.a.run.app/ ###################################### # Setup Firebase with prebuilt configs ###################################### function setup_firebase() { mkdir -p android/app/src/dev/ ios/Config/Dev/ ios/Runner/ cp setup/prebuilt/firebase_options.dart lib/firebase_options_dev.dart cp setup/prebuilt/google-services.json android/app/src/dev/ cp setup/prebuilt/GoogleService-Info.plist ios/Config/Dev/ cp setup/prebuilt/GoogleService-Info.plist ios/Runner/ # Warn: Mocking, should remove mkdir -p android/app/src/prod/ ios/Config/Prod/ cp setup/prebuilt/firebase_options.dart lib/firebase_options_prod.dart cp setup/prebuilt/google-services.json android/app/src/prod/ cp setup/prebuilt/GoogleService-Info.plist ios/Config/Prod/ } ########################################## # Setup Firebase with Service Account Json ########################################## function setup_firebase_with_service_account() { dart pub global activate flutterfire_cli flutterfire config \ --platforms="android,ios,web" \ --out=lib/firebase_options_dev.dart \ --ios-bundle-id=com.friend-app-with-wearable.ios12.development \ --android-app-id=com.friend.ios.dev \ --android-out=android/app/src/dev/ \ --ios-out=ios/Config/Dev/ \ --service-account="$FIREBASE_SERVICE_ACCOUNT_KEY" \ --project="based-hardware-dev" \ --ios-target="Runner" \ --yes flutterfire config \ --platforms="android,ios,web" \ --out=lib/firebase_options_prod.dart \ --ios-bundle-id=com.friend-app-with-wearable.ios12 \ --android-app-id=com.friend.ios.dev \ --android-out=android/app/src/prod/ \ --ios-out=ios/Config/Prod/ \ --service-account="$FIREBASE_SERVICE_ACCOUNT_KEY" \ --project="based-hardware-dev" \ --ios-target="Runner" \ --yes } ###################################### # Setup provisioning profile ###################################### function setup_provisioning_profile() { # Only install fastlane if it doesn't exist if ! command -v fastlane &> /dev/null; then echo "Installing fastlane..." brew install fastlane fi MATCH_PASSWORD=omi fastlane match development --readonly \ --app_identifier com.friend-app-with-wearable.ios12.development \ --git_url "git@github.com:BasedHardware/omi-community-certs.git" } ################# # Set up App .env ################# function setup_app_env() { echo API_BASE_URL=$API_BASE_URL > .dev.env } # ####################### # Set up Android Keystore # ####################### function setup_keystore_android() { cp setup/prebuilt/key.properties android/ } # ##### # Build # ##### function build() { flutter pub get \ && dart run build_runner build } # ######### # Build iOS # ######### function build_ios() { flutter pub get \ && pushd ios && pod install --repo-update && popd \ && dart run build_runner build } # ####### # Run dev # ####### function run_dev() { flutter run --flavor dev } case "${1}" in ios) setup_firebase \ && setup_app_env \ && setup_provisioning_profile \ && build_ios ;; android) setup_keystore_android \ && setup_firebase \ && setup_app_env \ && build ;; *) error "Unexpected platform '${1}'" ;; esac