I've been an iOS dev for... 12 years now. And I love it. I'm in a position now where I'm learning Android for the first time. It's Kotlin and I don't hate it. And I'm still trying to learn back end. I can't code my way out of a box using HTML. I guess you'd say I can't code my way out of a <div>
The ecosystem is amazing. I love the tools. Xcode is a joy of an IDE to work with. There's some room to improve, but compared to everything else... it's not even a question. The community is full of people who are full of wonder and excitement.
As a web dev, you probably already know some Ruby and have some familiarity with some build tools that I didn't when I came to iOS dev. That'll help. You won't be exclusive to Apple. You'll be using CocoaPods and Gradle and Bazel and Jenkins and Travis and god only knows what else. On any given day I code in Swift, Objective-C, Ruby, Kotlin, and Groovy.
At the end of the day, remember you'll be doing this 40 to 80 hours a week. Make sure you enjoy it.
Curious how you have handled some of these challenges:
1. What do you do to avoid massive view controllers? I have found that a lot of iOS apps I have worked on end up having the view controller be responsible for doing everything from fetching data from an API to setting the corner radius on some component. This leads to view controllers being really big and not unit tested.
2. Do you do anything to explicitly keep your application state in one place? I find that state in iOS apps ends up being scattered between a data store, singletons and view controllers. This is a lot more cumberesome than something like Redux where state is just in a single store.
3. I am pretty excited about SwiftUI as it addresses a lot of these pain points and brings iOS development into a more modern era similar to React. What is your opinion of SwiftUI? Are you using it on your apps? If so, what have been the challenges of introducing it into existing apps? If not, why not?
1. Don't have massive VCs by not having massive VCs. That sounds unhelpful, but hear me out... You're asking the VC to do too much. Break that sucker down. Have many, many small classes that do small things. Use libraries for stuff. A VC should be a hub to transit data from the user to a model us MVVC, MVP, MVC... I don't care, every architecture has their acolyte.
2. No. Again not helpful. This is a domain specific problem. I will say I'm waging a now multi-decade war against singletons. Dependency injection is the way to go. For Swift checkout Swinject, it really superpowers your testing.
3. Haven't touched it... yet. My primary projects need to ship and my secondary projects haven't hit the point of UI. Won't until later this year. Then I'll deal with SwiftUI. Combine, however, is my new hawtness and I recommend diving into.
The ecosystem is amazing. I love the tools. Xcode is a joy of an IDE to work with. There's some room to improve, but compared to everything else... it's not even a question. The community is full of people who are full of wonder and excitement.
As a web dev, you probably already know some Ruby and have some familiarity with some build tools that I didn't when I came to iOS dev. That'll help. You won't be exclusive to Apple. You'll be using CocoaPods and Gradle and Bazel and Jenkins and Travis and god only knows what else. On any given day I code in Swift, Objective-C, Ruby, Kotlin, and Groovy.
At the end of the day, remember you'll be doing this 40 to 80 hours a week. Make sure you enjoy it.