Edit: I found the clause in the “Apple Developer Program License Agreement” that relates to this. As of today, section 3.3.2 states:
3.3.2 Except as set forth in the next paragraph, an Application may not download or install executable code. Interpreted code may be downloaded to an Application but only so long as such code: (a) does 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, (b) does not create a store or storefront for other code or applications, and © does not bypass signing, sandbox, or other security features of the OS.
An Application that is a programming environment intended for use in learning how to program may download and run executable code so long as the following requirements are met: (i) no more than 80 percent of the Application’s viewing area or screen may be taken over with executable code, except as otherwise permitted in the Documentation, (ii) the Application must present a reasonably conspicuous indicator to the user within the Application to indicate that the user is in a programming environment, (iii) the Application must not create a store or storefront for other code or applications, and (iv) the source code provided by the Application must be completely viewable and editable by the user (e.g., no pre-compiled libraries or frameworks may be included with the code downloaded).
Furthermore, an excerpt from Microsoft’s CodePush service (which does the same as Ionic Pro’s “Deploy” API) states:
NOTE: While Apple’s developer agreement fully allows performing over-the-air updates of JavaScript and assets (which is what enables CodePush!), it is against their policy for an app to display an update prompt. Because of this, we recommend that App Store-distributed apps don’t enable the updateDialog
option when calling sync
, whereas Google Play and internally distributed apps (e.g. Enterprise, Fabric, HockeyApp) can choose to enable/customize it.
I haven’t found anything on this from Google though, but I imagine it’s probably a very similar story.
This seems like a dark, dark grey area to me… It seems like neither of them actually want to allow hot code updates, but they need to still cater for resource updates, probably for the sake of not needing to bundle all translations in the initial app release.
Edit 2: Google’s version of this is much more open, quite simply stating:
An app distributed via Google Play may not modify, replace, or update itself using any method other than Google Play’s update mechanism. Likewise, an app may not download executable code (e.g. dex, JAR, .so files) from a source other than Google Play. This restriction does not apply to code that runs in a virtual machine and has limited access to Android APIs (such as JavaScript in a webview or browser).
Hey Mike, could you perhaps provide some links to the notes you mentioned here? I’ve been searching for it myself, but considering how common and generic the word “update” is, I’m finding everything except what I’m actually looking…
I currently have a rather long-winded debate with some managers where I work about this process; they insist that the user should be able to tap a “Check for Updates” button and I’m trying to convince them it should just happen silently in the background.