Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      BrowserStack launches Figma plugin for detecting accessibility issues in design phase

      July 22, 2025

      Parasoft brings agentic AI to service virtualization in latest release

      July 22, 2025

      Node.js vs. Python for Backend: 7 Reasons C-Level Leaders Choose Node.js Talent

      July 21, 2025

      Handling JavaScript Event Listeners With Parameters

      July 21, 2025

      I finally gave NotebookLM my full attention – and it really is a total game changer

      July 22, 2025

      Google Chrome for iOS now lets you switch between personal and work accounts

      July 22, 2025

      How the Trump administration changed AI: A timeline

      July 22, 2025

      Download your photos before AT&T shuts down its cloud storage service permanently

      July 22, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Laravel Live Denmark

      July 22, 2025
      Recent

      Laravel Live Denmark

      July 22, 2025

      The July 2025 Laravel Worldwide Meetup is Today

      July 22, 2025

      Livewire Security Vulnerability

      July 22, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Galaxy Z Fold 7 review: Six years later — Samsung finally cracks the foldable code

      July 22, 2025
      Recent

      Galaxy Z Fold 7 review: Six years later — Samsung finally cracks the foldable code

      July 22, 2025

      Halo and Half-Life combine in wild new mod, bringing two of my favorite games together in one — here’s how to play, and how it works

      July 22, 2025

      Surprise! The iconic Roblox ‘oof’ sound is back — the beloved meme makes “a comeback so good it hurts” after three years of licensing issues

      July 22, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Over The Air Updates for React Native Apps

    Over The Air Updates for React Native Apps

    June 2, 2025

    Mobile App development is rapidly growing and so is the expectation of robust support. “Mobile first” is the set paradigm for many application development teams. Unlike web deployment, an app release has to go through the review process via App Store Connect and Google Play. Minor or major releases follow the app review same process, which can take 1-4 days. Hot fixes or critical security patches are also bound by the review cycle restrictions.  This may lead to service disruptions, negative app and customer reviews.

    Let’s say that the latest version of an app is version 1.2. However, a critical bug was identified in version 1.1. The app developers may release version 1.3, but the challenge would be that it may take a while to release the new version (unless a forced update mechanism is implemented for the app). Another potential challenge would be the fact that there is no guarantee that the user would have auto updates on.

    Luckily, “Over The Air” updates comes to the rescue in such situations.

    The Over The Air (OTA), deployment process for mobile apps allows developers to push updates without going through the traditional review process. The OTA update process enables faster delivery for any hot fix or patch.

    While this is very exciting, it does come with a few limitations:

    • This feature is not intended for major updates or large feature launches.
    • OTA primarily works with JavaScript bundlers so native feature changes cannot be deployed via OTA deployment.

    Mobile OTA Deployment

    React Native consists of JavaScript and Native code. When the app gets compiled, it creates the JSbundles for Android and iOS apps along with the native builds. OTA also relies on the JavaScript bundles and hence React Native apps are great candidates to take advantage of the OTA update technology.

    One of our client’s app has an OTA deployment process implemented using App Center. However, Microsoft has decided to retire App Center as of March 31, 2025. Hence, we started exploring the alternatives. One of the alternate solutions on the the table was provided by App Center and the other was to find a similar PAAS solution from another provider. Since back-end stack was AWS, we chose to go with EAS Update.

    EAS Update

    EAS Update is a hosted service that serves updates for projects using expo-updates library. Once the EAS Update is configured correctly, the app will be listening for any targeted version of the app on the EAS dev cloud server. Expo provides a great documentation on setup and configuration.

    How Does It Work?

    In a nutshell;

    1. Integrate “EAS Updates” in the app project.
    2. The user has the app installed on their device.
    3. The development team made a bug fix/patch and generated JSbundle for the targeted app version and uploaded to the Expo.dev cloud server.
    4. Next time the user opens the app (frequencies can be configurable, we can set on app resume/start), the app will check if any bundle is available to be installed. If there is an update available, the newer version of the app from Expo will be installed on user’s device.
    Over The Air Update process flow

    OTA deployment process

    Additional details can be found at https://docs.expo.dev/eas-update/how-it-works/.

    Implementation Details:

    If you are new to React Native app development, this article may help Ramp Up On React/React Native In Less Than a Month. And if you are transitioning from React to React Native, you may find this React Native – A Web Developer’s Perspective on Pivoting to Mobile useful.

    I am using my existing React-Native 0.73.7 app. However, one can start a fresh React Native App for your test.

    Project configuration requires us to setup expo-modules. The Expo installation guide provides an installer which handles configuration.  Our project needed an SDK 50 version of the installer.

    • Using npx install-expo-modules@0.8.1, I installed Expo, SDK-50, in alignment with our current React native version 0.73.7, which added the following dependencies.
    "@expo/vector-icons": "^14.0.0",
    "expo-asset": "~9.0.2",
    "expo-file-system": "~16.0.9",
    "expo-font": "~11.10.3",
    "expo-keep-awake": "~12.8.2",
    "expo-modules-autolinking": "1.10.3",
    "expo-modules-core": "1.11.14",
    "fbemitter": "^3.0.0",
    "whatwg-url-without-unicode": "8.0.0-3"
    • Installed Expo-updates v0.24.14 package which added the following dependencies.
    "@expo/code-signing-certificates": "0.0.5",
    "@expo/config": "~8.5.0",
    "@expo/config-plugins": "~7.9.0",
    "arg": "4.1.0",
    "chalk": "^4.1.2",
    "expo-eas-client": "~0.11.0",
    "expo-manifests": "~0.13.0",
    "expo-structured-headers": "~3.7.0",
    "expo-updates-interface": "~0.15.1",
    "fbemitter": "^3.0.0",
    "resolve-from": "^5.0.0"
    • Created expo account at https://expo.dev/signup
    • To setup the account execute, eas configure
    • This generated the project id and other account details.
    • Following channels were created: staging, uat, and production.
    • Added relevant project values to app.json, added Expo.plist, and updated same in AndroidManifest.xml.
    • Scripts block of package.json has been updated to use npx expo to launch the app.
    • AppDelegate.swift was refactored as part of the change.
    • App Center and CodePush assets and references were removed.
    • Created custom component to display a modal prompt when new update is found.

    OTA Deployment:

    • Execute the command via terminal:
    EAS_CHANNEL=staging RUNTIME_VERSION="7.13" eas update --message "build:[QA] - 7.13.841 - 25.5.9.4 - OTA Test2 commit"
    • Once the package is published, I can see my update available in expo.dev as shown in the image below.
    EAS update OTA deployment

    EAS update screen once OTA deployment is successful.

    Test:

    1. Unlike App center, Expo provides the same package for iOS and Android targets.
    2. The targeted version package is available on the expo server.
    3. App restart or resume will display the popup (custom implementation) informing “A new update is available.”.
    4. When a user hits “OK” button in the popup, the update will be installed and content within the App will restart.
    5. If the app successfully restarts, the update is successfully installed.

    Considerations:

    • In metro.config.js – the @rnx-kit/metro-serializer had to be commented out due to compatibility issue with EAS Update bundle process.
    • @expo/vector-icons package causes Android release build to crash on app startup. This package can be removed but if package-lock.json is removed the package will reinstall as an expo dependency and again, cause the app to crash. The issue is described in the comments here: https://github.com/expo/expo/issues/26521. There is no solution available at the moment. The expo vector icons package isn’t being handled correctly during the build process. It is caused by the react-native-elements package. When removed, the files are no longer added to app.manifest and the app builds and runs as expected.
    • Somehow the font require statements in node_modules/react-native-elements/dist/helpers/getIconType.js are being picked up during the expo-updates generation of app.manifest even though the files are not used our app. The current solution is to go ahead and include the fonts in the package but this is not optimal. Better solution is to filter those fonts from expo-updates process.

    Deployment Troubleshooting:

    • Error fetching latest Expo update: Error: “channel-name” is not allowed to be empty.

    The headers “expo-runtime-version”, “expo-channel-name”, and “expo-platform” are required. They can also be set with the query parameters “runtime-version”, “channel-name”, and “platform”. Learn more: https://github.com/expo/fyi/blob/main/eas-update-missing-headers.md

    The configuration values for iOS app are maintained in Supporting/Expo.plist. The above error indicates that the EXUpdatesRequestHeadersblock in the plist might be missing.

    OTA deployment is very useful when large number of customers are using the app and any urgent hot fix or patch needs to be released. You can set this for your lower environments as well as the production.

    In my experience, it is very reliable and the expo team is doing great job on maintaining it.

    So take advantage of this amazing service and Happy coding!

     

    For more information about Perficient’s Mobile Solutions expertise, subscribe to our blog or contact our Mobile Solutions team today!

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleSpotlighting Trailblazers in Tech: Three Perficient Leaders Honored As 2025 CRN Women of the Channel
    Next Article Adobe Sensei and GenAI in Practice for Enterprise CMS

    Related Posts

    Development

    Laravel Live Denmark

    July 22, 2025
    Development

    The July 2025 Laravel Worldwide Meetup is Today

    July 22, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    CVE-2025-36529 – TB-Eye Command Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    CVE-2025-3998 – CodeAstro Membership Management System SQL Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Infragistics Ultimate 25.1 includes updates across several of its UI toolkit components

    Tech & Work

    CVE-2024-46993 – Electron Heap Buffer Overflow

    Common Vulnerabilities and Exposures (CVEs)

    Highlights

    CVE-2025-3864 – Hackney HTTP Connection Pool Exhaustion Vulnerability

    May 28, 2025

    CVE ID : CVE-2025-3864

    Published : May 28, 2025, 12:15 p.m. | 1 hour, 22 minutes ago

    Description : Hackney fails to properly release HTTP connections to the pool after handling 307 Temporary Redirect responses. Remote attackers can exploit this to exhaust connection pools, causing denial of service in applications using the library.
    Fix for this issue has been included in 1.24.0 release.

    Severity: 0.0 | NA

    Visit the link for more details, such as CVSS details, affected products, timeline, and more…

    Phil Spencer doubles down on Switch 2 support: “I’m really a big believer in what Nintendo means for this industry.”

    April 17, 2025

    CVE-2024-27779 – FortiSandbox FortiIsolator Insufficient Session Expiration Vulnerability

    July 18, 2025

    CVE-2025-5750 – WOLFBOX Level 2 EV Charger TuyaSvcDevosActivateResultParse Heap Buffer Overflow Remote Code Execution Vulnerability

    June 6, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.