To explain further why I think iOS is harder
- Where will you learn it? Apple documentation is bad. remember this? "On Apple's Piss-Poor Documentation", 1180 points to date https://news.ycombinator.com/item?id=25046691 Android documentation is great. Yes there are at least 5 ways to do something e.g. schedule background work, load files, but its very clearly deprecated in their docs/ in the code. You can, read the code because it is open source. If you find a bug in Apple's library, what do you do?
- There are more developers, more stack overflow questions/ answers and more resources on the internet in general for Android. So even when Android has edge cases/ backwards compatibility issues, its more likely than iOS that someone has written about it.
- Apple tooling is bad: Xcode is not a good IDE to put it lightly. It gets 3 stars on the App Store. The actual code editing part is just a text editor, e.g. searching for function calls involves using the search function, as opposed to a keyboard shortcut that uses static code analysis. Most warnings for your code won't show up until you try to build it, therefore the feedback loop is extremely slow. Many iOS developers I've known admit they do not like Xcode. To upload your iOS app to the app store, you upload gigabytes of binaries. Code refactoring features do not exist on Xcode. Android Studio is one of the best IDE's I've used, and constantly adds support for more features: WorkManager inspector, deploy/debug multiple devices at once. Also, new features come out for Android Studio all the time, and Xcode seems to have not been updated with features that benefit me for a long time. Jetbrains IDEs generally work straight off the bat, and I'm very happy to see AppCode (Xcode competitor by Jetbrains) available, though it is thoroughly buggy at the moment, I still use it because writing code is nicer in AppCode.
- Basic things in the apple ecosystem are broken/ buggy: e.g. New developers in a team will have issues signing their application with the company team, the trick/ fix is to remove/ add a Xcode/ iOS capability to the project, and remove it immediately. Then signing will work. Signing the app is literally the first thing that needs to be done, why is this not fixed?
- Swift is much nicer than Objective-C to program in, but its not as nice as Kotlin. I don't want to get into programming language comparison (im sure there are connoisseurs here who can), but my opinion of reading Swift code is they are less readable and results in unusual architecture. Swift apps are also slower and bigger than Objective-C apps. Some Apple APIs are also designed in a painfully complicated way. It seems like they do not get much feedback from developers about their APIs, whereas Android is constantly getting feedback and improving. Some developers complain that Swift has changed, breaking older Swift code. I haven't heard this from Kotlin developers.
Sorry that felt like a rant. In the end you've can choose based on
- Comfort: Android is much more ergonomic for the reasons above
- Developer competition: You'll be competing with more Android developers worldwide: Android is more than 85% of the smartphone market
- Money: iOS costs $100 annually (not much but if you're starting out your first app, maybe it is). The upside is if you live in a rich country, many people use iPhones, and they also tend to spend more money on the app store.
- Market trends: iOS has added ATT/ privacy features. They've also got powerful chips but it seems like no one has learnt how to use them yet. They are ahead on hardware (M1, A14), they've got great market share in Western countries, and are poised to take even more with recent developments.