AppHub – Update React Native Apps Without Re-Submitting to Apple
apphub.io
apphub.io
[1] https://developer.apple.com/programs/ios/information/iOS_Pro...
[2] http://info.meteor.com/blog/apple-hot-code-push-mobile
[4] http://docs.build.phonegap.com/en_US/tools_hydration.md.html
[5] https://medium.com/@clayallsopp/a-dynamic-crazy-native-mobil...
We're excited to open source the iOS SDK in the future so that everyone can take a look and contribute.
With the following caveat though:
[3.3.2] 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.
* If the AppHub founders think this is a real danger, then you'd expect bold and strenuous documentation.
* But, I wonder if the AppHub authors believe that people should ignore this rule, because practically speaking it's hard to get caught. They wouldn't say so, of course, because encouraging people to break Apple ToS is illegal.
And actually, merely adding features doesn't seem to be forbidden as long as the features you add are not "inconsistent with the intended and advertised purpose of the Application as submitted to the App Store"
So let's say you release a file manager and later, surprise! It's also a SNES emulator! Well, then yes, I can see that against the TOS. But if you're just making improvements to your app, I don't see a problem.
It was just a hypothetical though. AppHub has plenty of legit use cases under Apple rules, and it's probably not all that dangerous even if you "mis-use" it slightly. AppHub would have to explicitly encourage people to break the rule to run afoul, or Apple would have to organically notice a bunch of apps doing a bunch of outlandish feature flipping.
However I think advertising it as a mechanism to get around the App Store review process is a quick way to get noticed by Apple, and not in a good way.
Of course, that runs counter to the "continual deployment" idea popular in web circles, but that's the entire point.
This whole spirit/letter thing comes up on occasion. Here's a previous example: http://daringfireball.net/2012/05/more_on_airfoil_speakers_t...
If they change the terms of service to prevent hot loading app updates via JavaScriptCore they're going to isolate a lot of developers, since so much cool stuff is being developed around JavaScriptCore right now. The rnplay playground app that's currently in the App Store dynamically loads entire apps onto your phone to play around with -- it's so cool, why block things like that from existing?
If they do nothing, it's clear a rogue app store distribution ecosystem is going to evolve (case in point ^) which seems like a sub-optimal outcome for everyone.
Isn't the only eventuality for Apple to change their app store approval process to allow dynamic updates? I mean it's obviously better for developers, and probably ultimately better for end users as well. I just don't see any way around it with the momentum writing iOS apps in Javascript has right now.
We later found out that Apple thought PhoneGap was our own custom version of webkit which is what actually concerned them more. Once they came to learn more about the implementation detail on how PhoneGap works it started to become accepted but this was a very long process.
To clarify, 1) Apple hasn't always approved apps packaged with PhoneGap. 2) PhoneGap hasn't always taken this approach (although this was the initial design).
"The only exception to the foregoing is scripts and code downloaded and run by Apple's built-in WebKit framework or 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."
Apple don't have a track record of interpreting their terms particularly generously.
That seems to be a reasonable clause, and should actually benefit everyone, provided the developers stick to the rule and don't abuse that option.
This sounds great!
This is the great idea! And it works for many. It's easy, though, to get an inconsistent state of the app, where JS bundle would be newer than ObjC part. You should be super careful while npm-installing libs, including react-native itself since most of them consist source code that should be compiled. Maybe it wouldn't be a problem when react-native and most major third-party libraries will be stable
I'd love to have you try it out - ping me at (matt at apphub.io).
I've never found submitting an app for app review to be that big of a deal, if your app is well designed, useful, and not negligent or malicious toward user needs.
Your FAQ says what you're doing is explicitly permitted by Apple, and points to section 3.3.2 of the iOS Developer Program Information document.
But what about section 3.3.3?
3.3.3
Without Apple’s prior written approval or as permitted
under Section 3.3.25 (In App Purchase API), an
Application may not provide, unlock or enable
additional features or functionality through
distribution mechanisms other than the App Store
or VPP/B2B Program Site
Finally, you do realize that the App store policies are subject to change in order to adapt to hacks like this, right?Again cool hack but it will be interesting to see if it gets out of the starting gate.
Now, to add something to the matter, "direct update" is something that Apple already hosts in its App Store through Cordova apps and its commercial versions (i.e. MobileFirst) https://www.apple.com/pr/library/2014/12/10Apple-and-IBM-Del...
Not sure how many React Native projects are hosting their bundles outside theirs apps in the wild, but there are already apps released on the store (as per Facebook Groups, Ads Manager).
Still, I agree things might change (on the Apple's side).
Anyway, there's no way they could lose (too much) control. The "native" part of the apps is still subject to resubmission. The "react native" part is mostly UI layer/composition and business logic.
Glad you pointed out Section 3.3.3 of the Developer Agreement. From our understanding, it is intended to prevent developers from trying to avoid the App Store fees. As always, it will be up to developers to follow Apple's guidelines in their iOS apps.
"Stop waiting weeks for Apple to review your app. Just add our iOS framework and start pushing updates."
says otherwise.
You still have to go through the initial App Store Release process initially. After that, using this framework you can push updates directly, rather than waiting the requisite 5 business days[1]. As an app developer, being able to push updates (read: bug fixes) immediately is a blessing--we live and die by our reviews, and a bad update can cause an avalanche of negative reviews. Waiting 5 days[2] for a fix to go live can seem like an eternity.
1. It was 5 business days when I was an IOS Developer in 2012.
2. For all updates it was 5 business days. There were rumors that if you had a evangelist at Apple you were on real good terms with, they could fast track the update for you, if it was a rare occurrence.
Best case, this is a minor annoyance to Apple, and they don't bother.
Worst case, a bad actor abuses this forcing Apple to immediately pull any and all apps built ontop of this.
For anything other than an MVP, I wouldn't risk it.
A developer who chooses to use AppHub is not depending on the platform. If AppHub goes away (which we hope will never happen!), our iOS SDK defaults to using the App Store build. Moreover, developers can implement their own "AppHub server" if they so choose, so they're not locked in to using our service.
We're excited to open source the iOS SDK when we launch to the public so that developers can audit the code and assure themselves that they're not depending on our platform.
A more useful approach would be to open-source the AppHub framework so users can implement auto-updating themselves, and it would be harder for Apple to catch this.
Also, how would this make it easier to steal user information or share your stash of dick pics? Sounds like a lot of FUD to me.
What exactly does that mean? My statement doesn't change just because someone else made it.
Also, since you were so kind to reply, why don't you explain what this means: "use it to steal information of a user, or post dick pics all over the app."
Thanks!