Should someone learning iOS development stick to vanilla iOS while learning, or would it be feasible to use React Native from the outset? I already have some React experience, and I have some React-based web app that I'd like to turn into native iOS app.
If you're learning iOS development, stick to learning iOS development. A framework, no matter how cool and neat it is, will not replace pure iOS development for serious apps.
Also ask yourself a question, do you really think you can call yourself an iOS developer when the only way you truly know how to create apps is with React?
> do you really think you can call yourself an iOS developer when...
I don't really want to call myself an iOS developer. I just want to port a simple web app to iOS, and my options are learning just enough iOS development to do it myself, or hiring a real iOS developer. So I'm curious if this framework would tip the scale in favor of the first option.
Diving straight into a framework while learning the underlying system in parallel can teach you a lot about best practices and design patterns and so forth. Personally I'd say doing both is a good idea. Just make sure you learn the whys and hows for everything the framework is doing. You can vacuum up all the accumulated knowledge of the framework team.
Saying this, I have no real idea how abstracted react native is from normal IOS dev, so maybe it wouldn't be as helpful as, say, learning python and django at the same time.
But even the pure JS method. I shouldn't have said "barely JS anymore".
I'm just not a huge fan of apps built entirely in JS that spit out markup. I find it so messy personally, but also a giant brain shift too.
The commenter I was replying to wanted a way to take a web site and get it to run as an app. HTML, CSS, JS -- Cordova / Phonegap is one way to do it that requires very little rewriting of your code. At least compared to taking a HTML/CSS/JS web app and rewriting it in React.
Granted, I am no React expert and plan to give it more time soon. But at the 30k ft view, it's simpler to port your app that's already built by using Cordova. If you're going to rewrite anyway, sure, use React Native if you're already a strong JS programmer.
Sure, that's reasonable. If you already have a site and want to run it with native features quickly, Cordova is an excellent choice. That goes even if your site is already built on React.
Compared to more complex frameworks, React hems closely to JavaScript as a language. I enjoy working with it because it lets me write entirely in JavaScript without any weird template languages or typical framework "bloat." In my experience, it helps me write readable and correct frontend code.
Random tangent: sometimes I imagine that React would have another name—say, something dull like "libdomdiff." The JavaScript world for some reason seems to operate by making everything into a fancy big deal; every library needs its own conferences and consultancies. I feel like being a "React expert" is kind of overrated. It's basically just a library with like a dozen functions.
But you're right too that it is a different way of writing apps. I hope your experiences with it will be as positive as mine!
> do you really think you can call yourself an iOS developer when the only way you truly know how to create apps is with React?
I totally agree with you, but does it matter in the grand scheme of things? Look at web developers that only know frameworks. They may only know jQuery or only know Rails, but if they're still getting shit done, does it ultimately matter? There may come a day where that developer is required to go deeper than the lib/framework allows and they may be exposed or may be forced to learn more or they may drown because they never learned to swim.
This is interesting to me because it brings up the question of how important is mastery when there are deadlines?
It's pretty bad. It works well for very basic vanilla example apps that have certain patterns. But for even very small real-world apps, you end up having to call a bunch of stupid imperative methods on viewDidLoad. It's a joke. The patching that you have to do with imperative code is not visible in the interface builder and so you end up with a bunch of empty looking storyboards a lot of the time.
Dragging and dropping all the time is cumbersome and it is impossible to version control storyboards in any meaningful way. Dragging lines to outlets is a real pain, and the references stick around after you delete stuff, causing countless infuriating runtime crashes.
Most things that you would like to do can only be accomplished with goofy hacks.
How much code is React Native and how much code is hand written Objective-C ? can you answer that question ? "Use" doesn't mean 100% without a single line of Objective-C written.
Not just the view. React Native also gives you access to HTTP and full JavaScript logic, so the model, view and controllers can be written using React Native.
You should at least take a look at Swift. These frameworks are great when they work , but as soon as they don't ... imagine yourself looking at a stack trace of a language you don't understand and have to debug that shit ... You should at least get familiar with basic IOS , widgets, swift ...
I actually just completed an iOS course. I think that it's good to know how things are done, and there are some things that you'll want to do completely native. (Such as complex graphics). But the iOS interface building tools are utter crap compared the JS/HTML ecosystem. I would say, build a few small apps completely native, just to see what you're not missing out on and be ready to write swift or objc to do really complex or performance critical things.
Stick to vanilla iOS for now. I think it's telling enough that FB doesn't have all of their apps on RN. I don't think there will ever be a real replacement for Native. It's just a matter of how close a framework could get to copying it.
I think it is a better choice to start by getting accustomed with 'pure' iOS development.
It will be easier to learn RN if you think it is useful to your projects with a good understanding of the platform.