Smartface Developer Center

Smartface Developer Center

Welcome to the Smartface Developer Hub. You'll find comprehensive guides and documentation to help you start developing and managing native iOS and Android apps with Smartface Cloud.

Get Started    

Remote App Update FAQ

1. What is Remote App Update and what is it used for?

Remote App Update allows you to update your native iOS and Android applications remotely. You can deploy full updates directly to devices without the need for submitting a new version to App Store or Google Play. The devices will receive the updates to your native app instantly on-the-fly.

It is especially useful for making sure that all your users are running the newest version of your app. You can always deliver the latest and the best user experience while avoiding the need for maintaining multiple backends for multiple app versions in the wild and waiting for the store review to have your new app version released. Below are some use cases where Remote App Update comes in handy:

  • Feature flags: If you want a feature to be functional at a certain point (such as a new feature is going live after the backend development is complete), you can send remote updates that will activate (or deactivate) a feature whenever you like.

  • Time-specific events: If you are making a time-limited campaign or celebrating a special day, you can update your app instantly with the changes specific to that period. For instance, you can change the colors of your app on 4th of July or you can host a flash sale and you don't need to code any of these changes beforehand.

  • A/B testing: You can freely change the UI elements or texts to conduct live experiments and track how it affects the user engagement.

  • Bug fixing: Especially if you have a critical bug that must be fixed as soon as possible, you can instantly send an update to all users without waiting for store review.

Remote App Update gives you the flexibility of web development for native iOS and Android apps.

2. Is it allowed to perform remote updates on iOS apps downloaded from the App Store (skipping store review)?

Yes, Smartface native engine uses JavaScriptCore as the interpreter, which complies with Apple's requirements.

As indicated in section 3.3.2 of the "Apple Developer Program Information" document available at
https://developer.apple.com/programs/ios/information/, downloaded scripts and code are allowed if they are run by Apple's JavaScriptCore, "provided that such scripts and code do not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store."

Therefore, it is allowed to make changes as long as the purpose of the app is kept intact. Due to the unique architecture of Smartface engine, you can change most of the things in an app remotely, which makes Remote App Update a powerful feature and we advise you to use it responsibly.

3. How does Remote App Update work?

Smartface is an JavaScript interpreter framework to develop native iOS and Android apps. You can code both the UI and the logic of your app fully in JavaScript. The scripts in Smartface apps are interpreted during runtime, interacting with the native OS through the engine. This architecture eliminates the need for recompiling the app if the scripts are modified or external code is added.

The Remote App Update adds the functionality to update the scripts and assets in a native app from an external resource the in an efficient, convenient and secure manner with features such as:

  • Built-in JavaScript functions for easy update management. (You just specify to check for new versions and everything is automatically handled by the framework.)
  • Direct publishing to Remote App Update module from the Cloud IDE
  • Quick manipulation of accessed resources with release channels (for processes like internal testing or A/B testing)
  • Central management interface for versions and releases for each platform (Android and iOS)
  • Delta based update transfer for high performance

4. To what extent can apps be updated?

  • Source code: You can update full JavaScript source code of a native app both on iOS and Android, which includes the components like UI elements and the logic of the app. You can also add new script files. (Just one thing to note is that script files cannot be deleted; therefore, you need to remove all references to a script file if you don't want to use it after the update.)
  • Image assets:
    • All images can be updated remotely on iOS, with the only exception being the splash screens and icons.
    • On Android, due to the automatic image assignment mechanism based on the screen density, local images in drawable folders cannot be updated remotely. If you would like to update images remotely on Android, it is advised to use assets folder to store images or use online image resources. Just like iOS, splash screens and icons cannot be updated remotely.
  • Non-image assets: All non-image assets can be updated remotely both on iOS and Android.
  • Smartface engine (player): The native engine cannot be updated remotely. (Engine updates might be required in rare cases such as major OS releases, for which you need to submit a new binary to the store.)
  • Application signing identities (certificates): Both on iOS and Android, the signing identity cannot be updated remotely. For instance, if the certificate is expired, the binary needs to be resigned with a new certificate.
  • Smartface plugins:
    • JavaScript based libraries and plugins can be updated remotely like any other JavaScript code.
    • The native plugins are compiled with the engine so they cannot be updated remotely. (Please note that if a plugin accesses files in the assets folder through the OS and not through Smartface APIs, it will not be able to access assets updated with Remote App Update since Remote App Update places the assets in a different folder structure.)

5. How is the performance of Remote App Update?

  • Update checks are done with a lightweight structure and it is practically invisible to the user.
  • The resource delta is calculated by server and only once when an device with a specific version requests an update for the first time. Then the update package is prepared accordingly, which only contains the resource delta for the minimum update size possible. If other devices with the same version requests an update, the update package will be served directly without any delta calculation process.
  • The update package is transferred through CDN for faster transfers. The download performance depends on the volume of changes and the connectivity of the user. If the changes are only limited with the code, it is pretty quick as only text data is sent in the form of compressed delta code is sent.