CodePush by Microsoft
microsoft.github.io
microsoft.github.io
And in react native only the main framework is compiled, with the actual application running in a JS interpreter. So unless we upgrade the RN version, or start using a new SDK etc there will never be a reason to go through the App Store.
All interpreted code is sandboxed anyway, so there's no security risks involved.
It's hard to believe that the same company that cursed the world with IE 6 just released an open-source accessory for a Facebook platform and signed it "with <3 from Redmond."
Given the stuff you can change its pretty clear you could completely change the user experience. So yes, it would be a pretty big "hole" in the app experience management policy.
For this particular issue, Apple allows apps to dynamically download Javascript and other web tech (in order for web browsers to work), and they explicitly mention that they're not into you pushing big updates:
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.
As always, the App Review Team gets the final say on a case-by-case basis for whether you'll get through or not.IMO, Apple specifically carved out the exception for JS for WebKit/WebViews, to make using web views in apps possible. I'm quite certain they didn't have in mind React Native[1] auto-downloading JS bundles to bypass App Review. Apple wouldn't be a fan of that.
Now, the complete opposite of this is their favoured tech for developing new Apple TV apps, TVML, explicitly allows and is designed for updates bypassing App Review. In fact, most of the app logic and UI is delivered from your own server.
[1] Actually, the guidelines mentions 'WebKit framework'. Does React Native use 'WebKit framework'? Edit: It uses JavaScriptCore which I guess is a part of WebKit http://trac.webkit.org/wiki/JavaScriptCore
I love and hate that name at the same time :-)
As it is, both are definitely useful for better handling upgrade process with users. A couple drawbacks with mobile apps are that it's harder to hotfix errors, and you sometimes have to support older APIs for longer. With a web app, a user can visit the site and the entire app bundle can be downloaded after a cache bust.
Seems to me it's effectively bypassing their checks - a developer can release v1.0.0 to the app store, never again update it, and push updates via this?
According to section 3.3.2 of Apple’s developer agreement, as long as you are using the CodePush service to release bug fixes and improvements/features that maintain the app’s original/presented purpose (i.e. don’t CodePush a calculator into a first-person shooter), then you will be fine, and your users will be happy. In order to provide a tangible example, our team published a (pretty cheesy!) CodePush-ified game to the Google Play Store and Apple App Store, and had no problems getting it through the review process.
Because Cordova apps are executed within a WebView, and React Native apps are executed within JavaScriptCore, from a technology perspective, these runtimes are unique in their ability to leverage dynamic code downloads according to the aforementioned Apple developer agreement.
(copy pasted directly from codepush site)
At least then it would not compromise the security of App Store / Test flight. As more meta-data was extracted/tagged with these containers you could imagine Apple reviewers start to care less about the code inside the container and more the interfaces (does it use health kit? apple pay? etc) and whether they are likely to be reviewed again. Could also look at size of binaries changes and things like that, or perhaps at LLVM byte code level for more detail.
Seriously, I absolutely hate when apps change their behavior or looks without explicitly asking me for a permission (and so I can make a backup to revert if I don't fancy what goes on).
Anecdotally, my dad, which happened to run Chrome on Windows, didn't fancy most of visible changes.
Only for a very tiny niche group of users. I'm part of that niche as well - but I recognize that most users love auto-updating things. They don't have to worry about updating, new features get pushed to them, etc. It's a great user experience for most people.
Only a small number of power users ever touch the settings/option menu of the software they use and fewer would ever see a reason to "downgrade" to a previous version - let alone know how to go about doing so.
So, I'm not sure it is really great experience for most people. Given that generally there is no way to roll back, I suppose most just learned to live with such things, whenever it's great for them or not so much.
I may have a wrong idea, but I perceive it as a culture where user is nearly powerless against the almighty Developers' will. I still haven't gave up on my own preferences, yet. Fear that future will break me, though.
The issue is not silent updates (an option to have unattended upgrades in some places are godsend!), but in not generally having an option to prevent those and not having a way to roll unwanted ones back.
========
An easy way would be to use telemetry to measure how many of your users change default settings. ;)
I only have this from 4 years ago [0]. But is also something I've observed.
> I think over the years I saw a lot of outcries when there were visible changes in various applications.
Visual changes are typically seen as unwarranted. It's a huge risk with minor gains (UX of new users) by alienating old users and hoping 'they'll adapt'. But to touch on this a bit...
Unhappy people are also the loudest. If a platform has 1,000,000 viewers and 1% change their settings and you screw with those settings - you're going to have 10,000 people who are pissed off and venting. Which can seem massive - and out of the 990,000 others maybe 2 or 3 might voice their approvals/thanks for the update?
This is why many game studios ignore their forums. Forums are typically only a minority of the overall fan base, even if they're typically the most outspoken/loyal fans.
[0] https://www.uie.com/brainsparks/2011/09/14/do-users-change-t...
I got a Windows 10 laptop recently and took a look around the OS. Relevant to the discussion, one thing was just brilliant - user satisfaction feedback buttons (the smiley/frowny faces in some apps). Hope such things help debiasing feedback.
For many apps that communicate with a remote service, you're gonna have to eat _some_ update somewhere down the line.
As for notifications - I'm not bothered by those. I think I get only a few every other week. Guess it's because I don't have many apps and the ones I have don't update every other day. Also, I allow some apps - those whose developers I trust, those that can't get worse and those I either don't care much about - to auto-update. But I manually track the updates for the apps I use daily. Don't want to find that things I'm used to are suddenly broken.
If there'd be a way to hook into Play Store to trigger a full backup before the upgrades, I suppose I would've enabled auto-updates for most apps.
That's not to say app developers can't silently update, but using CodePush doesn't lock your app into that workflow.
(full disclosure: I'm doing other things now, but I worked on this project for a few months)
As was mentioned, our existing API surface actually leans towards the use of "active updates" that present the option to install or ignore to the end-user. That said, I think there are numerous scenarios where silent installs could be valuable as well, and you could even imagine an app having a user option to disable that or not.
We want to provide the primitives and services necessary to create these experiences, without imposing any specific opinion to how devs should cater to their respective userbase. Compelling user experiences are absolutely priority one!
Seriously, how is this the top voted comment???
The real solution is to do incremental changes in most cases. Though this is a bit troublesome for the whole "I control the code on my machine" thing. In which case you could rip out the updater
It may work great for you. For a lot of us, it's tiring. It's not as if all these updates end up being bug-free.
its not nice for users but they dont give a crap
what would be okay i guess is if you could choose the branch and commits you're running yourself, so power users have choices, others get whatever is latest and freshest and safe and whatever.
You'd expect the latter to change whenever they update the server—so why not the former?
They do a pretty good job explaining binary versioning, which is eluded too with CodePush but not in detail. Basically, it might seem too good to be true, and it is. You can push small changes up to the app store, but still have to re-submit for any binary changes.
Your users need to hack their OS to be able to use your app though ... OS's need to find a way to contain apps that don't need full system access. Maybe by higher level user-mode so that apps need to ask for permission before using API's.
react-native, despite one of its core values probably being cross platform support, is extremely disinterested in providing anything but OSX support. Check out the wording from their site: https://facebook.github.io/react-native/docs/linux-windows-s...
""As React Native on iOS requires a Mac and most of the engineers at Facebook and contributors use Macs, support for OS X is a top priority. However, we would like to support developers using Linux and Windows too. We believe we'll get the best Linux and Windows support from people using these operating systems on a daily basis.
Therefore, Linux and Windows support for the development environment is an ongoing community responsibility.""
Which is to say "At Facebook we like Macs, we have Macs. Maybe someone else who likes Windows will build for Windows and Linux. Go ask them to do it."
I was recently looking for a cross platform development environment and was very interested in react-native but I completely lost interest after reading about their attitude to non-OSX support.
Facebook works on tools that help Facebook. We like to give back to the community whenever we can. Unlike most other platforms, our end goal is not building and making tools or technology. Instead, we build whatever helps us make better products.
This means that (IMO) we end up with higher-quality tools. It also means that we focus on the use cases that are important to us which occasionally differs from what's most important to the community. (Though even if you look at what the community has voted for, Linux and Windows support doesn't even make the list: https://productpains.com/product/react-native/?tab=top&.)
Since most developers at FB use Macs, that's what we supported first. If there's community interest in React Native running on Windows and Linux (and there is), we'll happily take pull requests that add support, and I see no reason why we can't make sure the support doesn't regress after it's merged.
I'm not sure why this strategy is upsetting to you. As a point of comparison, Rust's Windows support lagged behind for many years and what it did have was community-supported. Now, Windows has caught up and it will remain a first-class target for them. I expect React Native to end up in the same place within the next few months.
In that context it makes a lot of sense: Microsoft wants any kind of apps on Windows Mobile, and I believe Cordova/React works fine for that.