System: SDK 54 Ready

Infinix OTT — Mobile App Guide

Welcome to the official local environment installation and production EAS (Expo Application Services) build guide for the Infinix OTT Mobile App.

The Infinix Mobile App is built on **React Native** utilizing the **Expo SDK 54** platform. It provides customers with a highly immersive, dark-themed streaming layout supporting Movies, Multi-season TV Series, TikTok-style vertical Shorts, Live TV channels, and Razorpay subscription logic.

Cross-Platform Unified Core

Expo handles native bindings out-of-the-box. When you build local packages, Expo compiles your TypeScript components into pure native Java/Kotlin modules for Android, and Objective-C/Swift layouts for iOS, guaranteeing absolute platform speed and high frame rates.

Core Technologies

React Native & Expo

Cross-platform framework which targets native iOS and Android environments with single-core React JS files.

Expo SDK 54

Redux Toolkit (RTK)

Manages app global state cache, RTK query connections, automated endpoints loading, and offline async persistence.

Redux Store & Cache

EAS (Expo Build)

Expo Application Services automate signing configurations and build native release packages on secondary cloud environments.

EAS Automation

Prerequisites & Tools Required

Verify that your host operating system is equipped with the correct software pipelines to compile native code.

Platform Core Compilation Packages Required Purpose
Universal Node.js 18+ LTS, npm / yarn package managers Runs packaging bundle servers and downloads client scripts
Universal Java Development Kit (JDK 17) Crucial for Gradle compilers during native Android prebuild checks
Android Android Studio (Platform SDKs API 34+, Android SDK Command-line Tools, emulator) Compiles native Kotlin/Java layers and runs local virtual devices
iOS (macOS only) Xcode 15+ (Command Line Tools, Simulator device SDKs, CocoaPods package manager) Compiles native Swift/Objective-C frameworks and manages Pod dependencies

Step 1: Install Java JDK 17

Native Android compilation pipelines rely on **Gradle**, which requires the **Java Development Kit (JDK 17)**. Do not use JDK 21 or JDK 8 as they throw compile-time deprecation exceptions.

  1. 1
    Download and Install JDK 17

    Ensure you install JDK 17 (specifically version 17.0.x) from a trusted distributor:

    bash
    # On macOS (using Homebrew)
    brew install openjdk@17
    
    # On Ubuntu / Debian Linux
    sudo apt update
    sudo apt install -y openjdk-17-jdk
    
    # On Windows
    # Download from Oracle JDK 17 or Eclipse Temurin (Adoptium) installer binaries

Step 2: Install Node & Expo CLI

Expo commands and compiler scripts are coordinated using the **Node.js** engine package manager.

  1. 2
    Install Global CLI Dependencies

    Ensure Node.js 18+ is installed on your computer, then install Expo command daemons globally:

    bash
    # Install modern expo-cli utilities globally
    npm install -g expo-cli
    
    # Check installation success
    npx expo --version

Step 3: Android Studio & SDKs Setup

To compile and run the Android app locally, you need **Android Studio** to manage SDK packages and configure virtual devices.

  1. 3
    Install Android Studio & Configure Platforms

    Download Android Studio, run the standard setup wizard, and navigate to **SDK Manager**:

    • Under the **SDK Platforms** tab, check the box to install **Android 14.0 (UpsideDownCake) — API Level 34** (matching Expo 54 targets).
    • Under the **SDK Tools** tab, check to install:
      • **Android SDK Build-Tools 34**
      • **Android SDK Command-line Tools (latest)**
      • **Android Emulator**
      • **Intel x86 Emulator Accelerator (HAXM installer)** (if Intel hardware is active)
  2. 4
    Configure Android Emulator Virtual Device

    Open **Device Manager** in Android Studio, click **Create Device**, select a modern hardware skin (e.g. Pixel 7), choose a system image (e.g. API 34 x86_64 image), and click finish. Keep the virtual emulator running in the background.

Step 4: Xcode Command Line Tools (iOS macOS)

If you are running **macOS**, you can build and run the iOS version of the app locally using Xcode.

  1. 5
    Install Xcode and Command Line Tools

    Install Xcode from the Mac App Store. Open terminal and install command compilers and CocoaPods package libraries:

    bash
    # Install Command Line tools
    xcode-select --install
    
    # Install CocoaPods (essential for native iOS pod files compilation)
    sudo gem install cocoapods
    
    # Pre-verify simulators list are functional
    xcrun simctl list devices

Step 5: Configure Environment Paths

The terminal shell must explicitly know where to find the Android SDK compiler tools and Java JDK installation home paths.

  1. 6
    Add Paths to Shell Configurations

    Open your user terminal profile config file (e.g. ~/.zshrc, ~/.bash_profile, or ~/.bashrc) and append the following path bindings:

    ~/.zshrc
    # Java Home JDK 17 mapping
    export JAVA_HOME=$(/usr/libexec/java_home -v 17)
    
    # Android SDK Path configurations
    export ANDROID_HOME=$HOME/Library/Android/sdk
    export PATH=$PATH:$ANDROID_HOME/emulator
    export PATH=$PATH:$ANDROID_HOME/platform-tools
    export PATH=$PATH:$ANDROID_HOME/tools
    export PATH=$PATH:$ANDROID_HOME/tools/bin

    Note for Windows developers: Add JAVA_HOME (pointing to C:\Program Files\Java\jdk-17) and ANDROID_HOME (pointing to C:\Users\YOUR_USER\AppData\Local\Android\Sdk) directly into system environment variables panels, and add the corresponding platform-tools sub-directories to the system PATH.

  2. 7
    Load Configs & Verify Configurations

    Refresh your active terminal screen and test that path configurations verify correctly:

    bash
    # Reload terminal configurations
    source ~/.zshrc
    
    # Check Java is running version 17
    java -version
    
    # Check adb terminal link functions
    adb --version

App Setup Step 1: Install Dependencies

Initialize client mobile source libraries and download necessary Expo modules.

  1. 1
    Fetch Native Node Modules

    Navigate to the mobile codebase folder inside the project and execute dependency installs:

    bash
    cd mobile
    npm install

App Setup Step 2: Configure Environment Variables

Establish local configuration files directing the mobile client toward your live backend domains or local server hosts.

Expo environment variable prefixes

Expo environment configs loaded in the application layer must explicitly start with the prefix EXPO_PUBLIC_ so they can be bundled into static scripts during precompilation. Regular env prefixes will be ignored.

  1. 2
    Write Mobile Environment Variables

    Create a .env file in the mobile root directory. Note that the custom fields dynamically match your Quick Customizer sidebar inputs:

    mobile/.env
    # Point to the production domain HTTPS API configured in the sidebar
    EXPO_PUBLIC_API_URL=https://api.infinixdigitalott.com/api
    
    # Google OAuth Identifiers for Android, iOS and Web
    EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=286769456505-socmcit9ip26da1dh0md22f5apt2gq7a.apps.googleusercontent.com
    EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=286769456505-socmcit9ip26da1dh0md22f5apt2gq7a.apps.googleusercontent.com
    EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=286769456505-socmcit9ip26da1dh0md22f5apt2gq7a.apps.googleusercontent.com

    Development Tip: If you are testing the app on a physical device using Expo Go, you cannot use http://localhost:5007 as the API URL, because your mobile phone cannot access your computer's localhost. Instead, use your computer's local IP address (e.g. http://192.168.1.50:5007) and ensure both devices are connected to the same Wi-Fi network.

Run Locally Step 1: Launch Expo Development Server

Launch the Metro bundle compiler locally. Metro compiles your components on-the-fly as you navigate screens.

  1. 1
    Start the Metro Bundle Server
    bash
    # Start clean Expo server
    npx expo start --clear

    The Metro Bundler terminal console will start and output a large, glowing scan QR code on the screen representing your local workspace connection credentials.

Run Locally Step 2: Simulators & Devices

Test and run the live hot-reloading app in simulator environments or directly on physical devices.

  1. 2
    Run App on Target Terminals

    Choose your preferred local emulation pipeline:

    Target Pipeline Terminal Key / App Step Method Description
    Android Emulator Press a inside active Metro terminal Launches the Android emulator, installs the client build, and streams compilation.
    iOS Simulator Press i inside active Metro terminal Launches the macOS simulator, loads the iOS bundle, and connects dependencies.
    Physical Device (Expo Go) Scan the terminal QR code using phone camera Install **Expo Go** from Play Store / App Store, scan terminal QR code, and run on device.

Production EAS Build Step 1: EAS CLI Setup

To compile release packages (.apk, .aab, .ipa) without setting up native configurations, use **EAS (Expo Application Services)** to compile code in secure secondary cloud virtual machines.

  1. 1
    Install EAS CLI Globally
    bash
    npm install -g eas-cli
  2. 2
    Log in to Expo Developer Account
    bash
    eas login
  3. 3
    Link EAS Build Workspace Project

    Bind the local codebase to your EAS workspace project:

    bash
    eas project:init
  4. 4
    Verify EAS Profile Configurations

    Check the eas.json configuration file in the project root to ensure it contains modern SDK 54 profiles:

    eas.json
    {
      "cli": {
        "version": ">= 10.0.0"
      },
      "build": {
        "development": {
          "developmentClient": true,
          "distribution": "internal"
        },
        "preview": {
          "distribution": "internal",
          "android": {
            "buildType": "apk"
          }
        },
        "production": {}
      },
      "submit": {
        "production": {}
      }
    }

Production EAS Build Step 2: Keystore Signing Setup

To distribute your app on the Google Play Store or install APKs on devices, the compiled bundle must be signed with a secure cryptographic key (Keystore).

Existing Keystore Location

The secure cryptographic signing key infinix.jks is pre-built and located directly in the mobile codebase directory. Keystore details and aliases are in the local file mobile/infinix_keystore_info.txt.

  1. 1
    Verify Local Keystore Credentials File

    Ensure the following files are present inside the mobile folder directory before triggering a production build:

    • infinix.jks (The Java Keystore cryptographic archive)
    • infinix_keystore_info.txt (Text parameters mapping keystore alias, passwords, and entry identifiers)
  2. 2
    Configure Credentials for Google Sign-In and Android Builds

    To enable Google Sign-In on Android, the keystore's SHA-1 fingerprint must be registered in the **Google Cloud Console** under your client ID:

    • Keystore Alias: infinix_key
    • Keystore Password: Infinix@2026
    • Key Password: Infinix@2026

    To retrieve the SHA-1 fingerprint from the keystore, run this command:

    bash
    keytool -list -v -keystore infinix.jks -alias infinix_key -storepass Infinix@2026

    Ensure the resulting SHA-1/SHA-256 values are added to your **Firebase Console** and **Google Services JSON** configurations to prevent authentication login errors during testing.

Production EAS Build Step 3: Compile Target Packages

Trigger native builds using the EAS CLI tools. The command terminal maps parameters automatically to build native targets.

  1. 1
    Compile Android Debug / Preview APK

    Build an APK package that can be shared and installed directly on devices for manual QA testing:

    bash
    # Builds and outputs a direct link to download the APK file
    eas build --platform android --profile preview
  2. 2
    Compile Android Release AAB for Google Play Store

    Compile an Android App Bundle (AAB) signed for deployment on Google Play Store:

    bash
    # Triggers release AAB build on EAS Cloud using credentials
    eas build --platform android --profile production
  • 3
    Compile iOS Simulator Package

    Build an iOS simulator app bundle to test on mock simulator frameworks:

    bash
    # Pre-compiles for simulator deployment testing
    eas build --platform ios --profile preview
  • 4
    Compile iOS Release IPA for App Store

    Compile native iOS distribution targets signed using Apple Developer credentials:

    bash
    # Triggers release iOS IPA build on EAS Cloud using certificates
    eas build --platform ios --profile production
  • Interactive Progress Tracker

    Track your installation checkpoints below. Checkboxes save automatically to your browser storage, and complete step cards will display line strikethrough markers in the step navigation panels above.

    Mobile Build Progress Checklist

    0%

    Local Environment Setup

    EAS Production Native Build

    Troubleshooting & FAQ

    Encountering compilation issues? Check these common errors, verified configuration parameters, and production solutions.

    This occurs if your active JAVA_HOME paths point to a JDK version other than 17 (e.g. JDK 21 or JDK 8). Open your terminal profile, confirm Java version output is 17.0.x, and ensure paths are loaded:

    export JAVA_HOME=$(/usr/libexec/java_home -v 17)

    For Windows developers, ensure the environment system variable JAVA_HOME is set exactly to the JDK 17 installation directory.

    Verify that your Android SDK platform-tools path is successfully loaded in your terminal:

    adb devices

    If the list is empty, restart your virtual device from the Android Studio Device Manager, or execute:

    adb kill-server && adb start-server

    This is often caused by package mismatches between your local package-lock.json and the cloud VM node environments. To fix this, delete your local node_modules folder and package-lock.json file, and run npm install again to refresh locks:

    rm -rf node_modules package-lock.json && npm install

    Commit the updated package-lock.json to your git branch before triggering EAS builds again.

    Confirm that the infinix.jks file is present in the `mobile` root directory and verify the alias and password parameters in infinix_keystore_info.txt match exactly:

    keytool -list -v -keystore infinix.jks -alias infinix_key -storepass Infinix@2026

    If EAS credentials caching throws conflicts, clear the remote keystore credentials from the Expo dashboard using:

    eas credentials

    These integrations are cryptographically bound to your app's SHA-1/SHA-256 signatures. Ensure you register the SHA-1 fingerprints of your local keystore (or EAS cloud-generated credentials) in the **Google Cloud Console** under Android credentials, and link them to your **Razorpay Settings Dashboard** webhook settings.