One thing that not many people are mentioning here is Swift. Swift is the programming language that is preferred for all apple products, and the vast majority of apps are written in it. Swift was purpose designed for apple, so it unlocks magnitudes better performance for apps than other languages. It integrates directly with apples hardware in a great way, and is a much better developer experience as well. This allows for a few big benefits:
App Uniformity: since apps are built using the same basic components, there’s a big conformity in the design language of the entire user experience. It’s insanely good for users. Buttons all have haptics, animations are the same smoothness, notifications are all handled the same way, etc.
Development: since it’s all the same software, and since the software integrates directly with the hardware, there’s a much better developer experience. Everything works. When apple updates software versions, oftentimes new features are able to directly plug into old ones. For example, the Dynamic Island uses the Now Playing API, meaning that music app developers didn’t need to change anything when updating for those phones. Their apps automatically use the island.
Cross Device Support: one app written in swift, with a few adjustments, can work on the iPhone, iPad, and Mac. It’s easy to make a version for the watch. All iPad apps work on the AR headset without ANY changes required from developers. When a new phone with a new form factor comes out, most apps still work.
Compare this to android, which has many official languages. Kotlin, Java, React Native, and C++, to name a few. android APIs for these are common, and pretty good, but not nearly as good as swift. Going point by point:
App Uniformity: there are app style guidelines, but they’re not nearly as assertive in the programming language as Swift. Different languages operate differently, so apps are often wildly different between each other on the same phone. Everything works differently, and especially between languages. This means that every android feature also needs to work and be accessible on every language, which is not always true. So you end up with buttons that don’t feel the same, menus that are inconsistently sized, and apps that don’t work well with each other.
development: a lot of android developers typically just port their mobile sites to android. While this is valid, it’s introducing a lot of possible bugs and areas for lag where a real homegrown app wouldn’t.
cross Device Support: when you make an app for android, you need to test it across literally hundreds of different devices. You have wide ranges of form factors to ensure support with, including folding phones, tablets, phones with cutouts, windows devices running android, etc. it’s a massive pain. Swift and iOS take care of that translation for you, meaning one app already works on all iPhones if it was coded for one. But on android, not only do you have different phones and different versions of android, you also have each company making their own flavor of android. So you have to test for those manufacturer versions too, each of which has their own API, quirks, etc.
Also, this is subjective, but a lot of developers prefer the syntax in Swift over Java and Kotlin.
All of this culminates for a better experience for the user and also developers, and higher quality and performance apps on iPhones.
One thing that not many people are mentioning here is Swift. Swift is the programming language that is preferred for all apple products, and the vast majority of apps are written in it. Swift was purpose designed for apple, so it unlocks magnitudes better performance for apps than other languages. It integrates directly with apples hardware in a great way, and is a much better developer experience as well. This allows for a few big benefits:
App Uniformity: since apps are built using the same basic components, there’s a big conformity in the design language of the entire user experience. It’s insanely good for users. Buttons all have haptics, animations are the same smoothness, notifications are all handled the same way, etc.
Development: since it’s all the same software, and since the software integrates directly with the hardware, there’s a much better developer experience. Everything works. When apple updates software versions, oftentimes new features are able to directly plug into old ones. For example, the Dynamic Island uses the Now Playing API, meaning that music app developers didn’t need to change anything when updating for those phones. Their apps automatically use the island.
Cross Device Support: one app written in swift, with a few adjustments, can work on the iPhone, iPad, and Mac. It’s easy to make a version for the watch. All iPad apps work on the AR headset without ANY changes required from developers. When a new phone with a new form factor comes out, most apps still work.
Compare this to android, which has many official languages. Kotlin, Java, React Native, and C++, to name a few. android APIs for these are common, and pretty good, but not nearly as good as swift. Going point by point:
App Uniformity: there are app style guidelines, but they’re not nearly as assertive in the programming language as Swift. Different languages operate differently, so apps are often wildly different between each other on the same phone. Everything works differently, and especially between languages. This means that every android feature also needs to work and be accessible on every language, which is not always true. So you end up with buttons that don’t feel the same, menus that are inconsistently sized, and apps that don’t work well with each other.
development: a lot of android developers typically just port their mobile sites to android. While this is valid, it’s introducing a lot of possible bugs and areas for lag where a real homegrown app wouldn’t.
cross Device Support: when you make an app for android, you need to test it across literally hundreds of different devices. You have wide ranges of form factors to ensure support with, including folding phones, tablets, phones with cutouts, windows devices running android, etc. it’s a massive pain. Swift and iOS take care of that translation for you, meaning one app already works on all iPhones if it was coded for one. But on android, not only do you have different phones and different versions of android, you also have each company making their own flavor of android. So you have to test for those manufacturer versions too, each of which has their own API, quirks, etc.
Also, this is subjective, but a lot of developers prefer the syntax in Swift over Java and Kotlin.
All of this culminates for a better experience for the user and also developers, and higher quality and performance apps on iPhones.