I think there are a lot of answers that miss the big picture.
It's making money. Specifically, getting discovered.
Now, if what you meant was difficulty from an engineering standpoint (e.g. you just want to develop iOS apps as an employee or contractor), then the answer is: synchronizing data and UI.
Notice I stated something broad, rather than something really narrowly specific. Provisioning is incredibly annoying, but spend a day reading some tutorials and docs and you're done, so it's clearly not the hardest problem. Same with backwards compatibility. Apple does a good job at maintaining compat. And even then it's not the problem you spend most of your time hammering against.
The single greatest source of bugs, engineering effort, design patterns (MVC, MVVM, etc.), and attempts to build huge new frameworks (see: React Native, ReactiveCocoa, Realm, etc.), and so on, is synchronizing data and UI.
You're absolutely right. My answer was a bit broad. My question was very general because I'm a novice and I don't know what I don't know (so to speak). I want to see if there's a general consensus on an aspect of iOS development that brings frustration. Figure out the pitfalls and what not.
By the way, thanks for sharing. I agree 100% with UI being a pain. On the other hand, I still don't have much experience with synchronizing data since most of my projects have been with static data.
In addition, I agree that money is one (or the only) end goal but I guess that's true for any career. I think if I had asked "How do I make tons of money with iOS development?" I would've gotten little answers. LOL. It's very difficult and the ones making the cash probably don't want their competition knowing.
UI implementation and polishing is a very time consuming process and is very laborious (boring) at times.
Also, I used to find chaining multiple server requests without causing something to break for the user challenging, but now have become better at it and I guess the tools / frameworks are also quite good now.
I'm not sure about what distributed systems you are referring to. I might not have worked on anything that complex so far.
I used to find chaining async requests for fetching data from web services across different screens while taking care of variations in app states a bit overwhelming. Now, I tend to start with creating a substantial data model on the app side and unlinking the network calls from the controllers as much as possible to ease this process. Of course many of the things I do now are probably learnt by CS majors in universities. I learnt them the hard way as I am a self taught programmer.
I'm also developing my first iOS app and will keep an eye on this thread for advice. Question to the OP, are you just starting out with the learning process or are you ready to start deploying apps you have created?
I just published my first app. It isn't very good. I still consider myself in the learning process. What I find the most difficult is the UI/UX creation. How about you? What's the hardest thing about iOS development?
Right now my main concern is legacy code written in Objective-C. I have looked at taking a side project to maintain an app for someone but because it was written in Obj-C, I'm having some reservations. The good thing is that Xcode integration is the same for both Swift and Obj-C, but the syntax of Obj-C is very different.
Constant fear of Apple breaking backward compatibility by shipping new versions of their operating system every year.
Apple is now running a beta versions of iOS 8.x and iOS 9.
This puts a massive brake on the impulse towards creating new products if you have fixed resources. It creates a strong bias towards optimising existing products even after the point of diminishing returns.
While I have faced this issue a few times, especially with some UI elements when moving from 1 version to another, I found that the situation is much better in iOS (deprecated APIs are supported for a while before being removed) when compared to Android (of course, its my anecdotal experience and I'm not trying to generalise here) where some of the APIs were completely dropped or the behaviour was totally different between incremental versions. In our case we we had to implement the same feature in 2 different ways to support 4.0 and 4.1 Android versions.
It's making money. Specifically, getting discovered.
Now, if what you meant was difficulty from an engineering standpoint (e.g. you just want to develop iOS apps as an employee or contractor), then the answer is: synchronizing data and UI.
Notice I stated something broad, rather than something really narrowly specific. Provisioning is incredibly annoying, but spend a day reading some tutorials and docs and you're done, so it's clearly not the hardest problem. Same with backwards compatibility. Apple does a good job at maintaining compat. And even then it's not the problem you spend most of your time hammering against.
The single greatest source of bugs, engineering effort, design patterns (MVC, MVVM, etc.), and attempts to build huge new frameworks (see: React Native, ReactiveCocoa, Realm, etc.), and so on, is synchronizing data and UI.