Notes 1. Android studio gradle headaches. 2. Documentation sometimes contains crap. 3. RecyclerViewAdapter vs simple SwiftUI Kotlin multiplatform is promising.
@@ravinderyadav5605 no, the problem with Gradle is that it could potentially be incompatible with other solutions and you have to experiment with other versions, and you have to migrate versions without even knowing if that is going to work, you can spend more than 80 hour's to solve a very complicated one
@@Rajmanov Have you ever used pod in large project? Grable is a lot more reliable, while pod is dependent on ruby which meshed up and just failed on some macbook but not the other
@@Rajmanov All build systems have become terrible complex when going into details. I find xcode the best (i wrote a script updating the xcode project automatically). MSBuild or CMake for our cross platform business logic can be just as bad.
This is absolutely correct, I am android developer from last 4 years and i never touched the iOS before, However when i learned iOS it took month for me to reach out on same level of android where i am today. I know 4 years of Android develoment helped to boost my training in iOS. Still i started loving in iOS more than android just because of easiness what i found.
@@DiegoNovati1 Lol I'm doing it the android way github.com/mitchtabian/KMM-Playground/blob/test/iosApp/iosApp/presentation/ui/recipe_list/RecipeListViewModel.swift
This old timer remembers when API 3 (v.1.5 | Cupcake ) came out in '09 and brought with it the amazing feature of animated screen transitions. Just a month now until that is 12 years ago... how time flies.
First of all, good content in the video. You are comparing swiftui with recyclerview in android, i think it should be storyboard and recyclerview. I have tried building ios apps with storyboard and it is not any better than recyclerview. Compose UI vs SwiftUI would be a better comparison. At work, senior developers do not even use storyboards, they write code to created views and all. For beginners, everything is difficult and beginners should understand it. With more practice and understanding the architecture of the platform, it will get easier. Another thing that i have noticed in ios is that the same code would run fine in ios 13 but would not work in ios 14 and i have found such issues in android very less but it doesn't mean one platform is superior than other, they both have their sets of problems. Excited that JetBrains have developed kotlin multiplatform so that android and ios devs can work together.
I tried to learn android dev. for so long and always got frustrated by the amount of time/effort to build simple ui. Now I am investing in iOS and everything seems easier and smoother than it was with android.
I generally recommend that anyone that is new to development and has access to a Mac, they start with iOS development. It's just simpler in almost every aspect. Thanks for the video Mitch!
i have been watching your tutorials in android development and they are awesome i agree with the fact that android development has a lot of moving parts compared to ios thats why i recently switched to react-native for cross platform development it is much easier and the best part is it is still native apps that come out of the process.its also a the best of both worlds and you can get apps up an running fast too.
Also both are improving significantly since 2018. IOS SwiftUI and Android Jetpack Compose are amazing godsends. It was trash before both those were introduced.
Can you guide me from where I should start learning iOS ? Being Android developer, I'm really excited to learn iOS to do parity but I am not sure from where I should start?
Last time I tried developing on iOS it was using Objective C, and I didn't care for it too much. The way messaging was handled seemed strange. I haven't touched Swift yet, but this video gives me hope. Nice video!
I have always learned the language alone before learning a framework. I like to sprinkle my language learning with unit testing.. just to get a feeliing.. Then framework gets a lot easier to work with since you are passed the first barrier.. I cannot learn a framework and language at the same time.
I agree 100%, however, there's one issue I faced with iOS development as an Android developer, it was extremely complicated to go out of the box and design custom layouts, I worked at a company that required both designs to be almost equal, and it was a nightmare on iOS
It's easier now since SwiftUI is based on resuable views combined together, so you can easily create custom sub-views to add into the main view. The best thing SwiftUI got rid of is constraints. Those were so damn hard to make pitch perfect.
1. Android studio gives random & vague errors 2. Multiple library, which are incompatible with each other 3. Bad documentation, which is improving 4. Complex implementation for most used things 5. Less dependency
I have been doing dev for ios and Android apps for years and I think ios development is easy but apple can improve a lot with xcode which is not all at par with android studio
Coding experience in xCode with Swift UI is dramatically super smooth and swift as compared to Android Studio. While with JetPack's Compose, coding in Studio is going to speed up to a great extent.
that's exactly what I'm going through right now. It's extremely annoying when after fresh install of AS, instead of developing you have to tinker how to make it work, what's worst even their own code samples don't work as intended. Documentation is outdated, confusing and unhelpful. Constant deprecation and implementation of halfbaked ideas. Changes that make no sense like implementation of viewbinding, databinding when jetpack compose suppose to retire them all. Each release brakes something and forces you to remove something right after installation ??? does that make any sense? One day you learn something and it's gone the next. Hard to keep up with that insanity. One might think that with all the resources at their disposal they should make a coherent and well documented product by now. So anyway, it seems like apple is doing way better work when it comes to software.
Recyclerview seems complex because you can tweak and turn things to make it work the way you want to and the sky is the limit. Love android development.
Engamenttttt my friend youre the best i love your vision on everything i proud to pay for your work broo! Greetings from colombia expecting to learn everything about kmm!!
There are some weird quirks for SwiftUI. For example you can't have more than 10 direct children views in a view otherwise Xcode throws a weird, poorly described error. You have to refactor them out. Also AsyncImage (just released for iOS15) does not cache so each time you do a network request for it. There are 3rd party libraries that did this but first party is not perfect. I'm not saying it's quirkier than Android but it has some to be aware of.
From my experience with android, to understand all features you really have to take with you some java experience in order to be able to move fast, understand framewok fast(how it works especially in jetpack) without experience in programming I do not recommand to start working for large projects
Your experience with iOS is based on SwiftUI. UIKit is way more complex than any UI framework out there. There are so many ways to do layout with UIKit, which is confusing and overwhelming for a beginner. You can implement UI with code, xibs, storyboards, etc... all of them have a big learning curve, especially coding UIKit with code, you are 10x slower compared with SwiftUI. The recycler view has probably the same complexity or less than a Collection View... it is the same exact problems. What about memory? On android you have GC, easy... on iOS you need to be very careful not to create memory leaks with Ref Cycles or closures... It is not really fair to compare swift UI experience with your Legacy Android experience. You need to have legacy iOS Experience to be able to say that iOS is easier than android 🤦♂️ Btw, I've done KMM at scale. It is not easy, unless your team has time for researching and talking with the guys from JetBrains, you will lose a lot of time. The productivity and tools are not mature enough, you have to come up with custom scripts to improve the developer experience, and not to mention the random crashes Kotlin/Native produces on iOS, especially after Kotlin/native updates. The problem is although the code you write for business logic is "almost" the same (you still need to do platform-specific code), they run in different environments. The android code will run on the JVM, on iOS it is Kotlin/Native which is not stable yet, even the memory model is being totally refactored right now... So, for sure KMM is not only roses and sunshine. If you think it will save you time, it won't, the advantage is that your business logic will be the same, so it is good for consistency. Right now that is the only big pro of KMM.
wait until you get to coredata and multithreading stuff. I've done both and both fields are complicated in different ways. Both ecosystems are evolving really fast and some new tools are really hard to get used to. Also in Objective-C era ios apps had lower level code comparing to android's java at the time. Now with swift and kotlin it's pretty much on the same level, but swift has more unconventional features that are hard to wrap your head around at first. I'd say android and ios are pretty equal now dev-wise.
i would still call myself a beginner on android but getting to this point took so much grit from me. on the flipside, deploying to Google Play has WAY less barriers than deploying to App Store and deploying apps i think is part of the fun
I don't really agree with RecyclerView, the adapter boilerplate is similar in UIKit. Since you use SwiftUI it would be only fair to compare that to Jetpack Compose, and lazy listviews are comparable there. AFAIK Jetpack compose is more stable and production ready than SwiftUI is. But I agree iOS in general is easier by a mile, my main reasons why iOS development is easier than Android: - Amount of components: On Android you have a lot of them: Application, Activity, Fragments, Services, BroadCastReceivers. On iOS it's basically Application And ViewController. - Component Lifecycle: On Android the Lifecycle is so much more complicated, because the are multiple scenarios where a component will get killed or restarted and it's necessary to restore/recover from that. On iOS your ViewController will never get disposed because of memory pressure. - Direct control over the ViewController constructor. On Android Activities/Fragments will get created for you, you can only pass data using limited bundles or over a shared viewmodel, you do not have control over the constructor. On iOS you can pass whatever you need to a ViewController over a constructor or setter and call it a day, the ViewController will never get killed or re-created so there is no need for serialization here. - Limited options: yes iOS has a lot less options when it comes to a lot of system-related things, like notifications are very limited compared to what you can do on Android, same goes for running in the background or picture-in-picture and and and. - Only need to consider the 2 iOS versions: unthinkable in the Android world, but for iOS it's fine to just target the latest 2 iOS versions, since adoption rate of new versions is fast, the 2 latest iOS versions cover most of the ground already. - No Fragmentation: there is a limited amount of devices that need to get tested. On Android you have a lot of different manufacturers and yes it does matter, in production you'll run into bugs left and right that are very specific to a manufacturer or even just one single model. Multiply that with the 6 API versions you should support and you get a exploding number of devices to test with.
I think the Android documentation is much better. Much of the iOS documentation is in objective c still. Apple also don't have any guidelines for architecture or anything like the weekly now in android show or their tutorials, all they have are talks at wwdc. They also don't have anything as good as leak canary as far as I know, plus you can get retain cycles. But the architecture for iOS I agree is better than Android, since you can do certain things with far less code. You don't have to create services and configure as much, and things like bluetooth are much easier.
Although I share the same opinion as you (I have 3 years of Android Dev experience and 4 months of iOS experience), you can't really compare SwiftUI with XML UIs in Android. And SwiftUI is fairly recent, and a lot of projects are still in UIKit, and some older projects are in Objective-C. Apart from that, Apple generally releases APIs after having put in some thoughts into them. Everything is in standard framework.
I have seen the opposite in my previous employment. iOS was waaayyyy more restricted of what and how you can do things. Android was much better to match requirements (design and functional)
Here in America, most companies design for iOS first and Android is forced to follow suit. I spend half of my time arguing w/ design on why it's dumb to implement iOS UI/UX on Android.
@@404errorfilenotfound oh yeah, that brings back memories. We had a client which didn't bother making Android specific designs at all. That was fun times trying to match it for Android
probably it is been made easier in swiftUI than android studio and java (or Kotlin) because u dont have to much differences in the os between different devices unlike the android. it is open source and there is way to many devices with so much differences. that need to be considered.
Loved this video. Really believe KMM is the future, and yeah I feel like Apple makes life easier for devs lol (I would just hope for them to collab with Jetbrains for a decent IDE instead of XCode)
KMP looks quite interesting, but from what I have understood, if your app relies heavily on multithreaded coroutines (so most modern apps), the KMP MultiThread project isn’t quite ready for prime-time. Also, having written apps on both platforms, I find the code editing & refactoring much easier and flexible on IntelliJ IDE’s like Android Studio. Plus, working with older apps with XCode can sometimes leave you blocked for days from nebulous xcode errors. Of course, if you are starting a brand new app targeting iOS 14, things likely go smoothly. So both platforms really have their ups and downs, but I do agree that iOS is likely easier if you are targeting high IOS versions.
I wanted to switch to iOS but shit they still don’t have something similar to coroutines and you can have all of these guards and callbacks laying around.
I think most people just don't want to learn gradle. I've used gradle outside of android so to me I actually felt right at home. Lesson to be learnt there.
Best android channel on TH-cam: calls it shi** vlog. Fake gurus pretending to know android: my course is the best in the universe for just 7000$ a month.
I came to Android from an Angular/.Net background and the first thing to hit me was how shitty the dependency injection is and how tedious it is to add project dependencies. They really could have learned something from their Angular team
At a quick first glance, it looks quite a bit easier! (Android engineer but with my first Macbook on my current project thought to give it a shot) Swift is pretty clean code too, I like the C-style syntax and it looks like a declarative Kotlin / Compose style. Not changing any time soon :)...just love Android way too much but iOS development is pretty slick.
i think you can say "faster" in build time, "simpler" in making uis. actually i also think it's easier than android however if you go deeply, i think everything is difficult and hard to compare which is easier because there is no finish line
Swift UI is declarative like Jetpack Compose, so if you compare, compare those 2. Recycler view is like Table View from storyboard or xib file. I spend hours to discover I have to drag and drop variable from UI designer to code part of UIController to just display the list. Both parts are very similar. Regarding dependencies XCode has many different popular 3rd party managers for that like cocoapods or carthahe. And of course there is dependency mismatch which can thrown many confusing errors, like linter errors for example. Don't let me even start on provisioning profiles and certificates. First time it took me whole week to just upload an app to the store. Both systems have pros and cons, really neither better or easier.
Cross platform app development platforms suit well for small to medium sized projects. In large projects with huge code base KMM is the right solution.
Libraries like ktor for the network client and kotlin serialization for parsing will come in handy, since both of these libraries support multiplatform out of the box 📦
The problem is the Android OS not Android studio or development per se. It's like Android Studio and the Android OS aren't built by the same people or they don't communicate at all. Android studio is okay. Android itself is too complex and that's what forces Android studio to be troublesome.
Even the old non SwiftUI way is much cleaner in iOS with TableViews and what not. There is simply a big list of things iOS devs dont have to think about things just work for the most part. XCode can be a beast though and publishing is crazy complicated.
Dear mitch , first of all , great work with your videos, i love them. Now ,i'm not sure if you already have discussed this in a previous video but you keep saying that asynctask is garbage, would you kindly explain why ? Please do correct me if i'm wrong but newer ways to get stuff asynchronously , eventually ends up creating just another implementation for an async task with callbacks taking twice the time to implement. so.. why the hate? i do know that it often becomes source of memory leak but knowing what you're doing with it pretty much solves the problem and i'm strict about it cause switching languages just because google advises you too isn't smart.. your thoughts :) ?
15:01.. You can't do that starts till 15:40, hell yeah that covers my 60-70 percent of work which I need to do platform specific. wow so Kotlin is amazing to fool you for multiplatform, I might move back to Xamarin back again, why need to get in to Kotlin ??? Till date the most perfect but least talked about cross=platform I've seen so far is NativeScript.. We built a enterprise level product for an Insurance domain and were able to use almost 90% of the code without anything changed. I know NativeScript sucks when UI comes in forefront, however its less pain in the end. we got almost 2 months to test the app and covered the UI enhancement while fixing the issues man.
There's a good episode on Fragmented Podcast talking about how Android is harder than IOS. I recommend listening to what Donn Felker has to say. But yeah IOS was made for phones, android originally was made for cameras I believe. So google acquired android os and hacked a lot of things to catch up in the smart phone market.
I used Angular JS (developed and maintained by Google) for years. And honestly, it was a nightmare. The yearly release looked like a totally different product.
I've found that iOS development is easy, but there is some trade offs. The gradle can be a pain in the butt. Every time I have to checkout iOS's repository I've had to run cocoa pods on a command line. They also have those weird settings on the profile that if are incorrect you'll be running around in circles. Maps have also been a bit of a pain to work as well.
First problem mitch mentions about android I was facing at the moment, 🤦♂️. Am having a problem with my gradle, "could not find method dependencyResolutionManagement() in settings.gradle, yet it's there. Somebody help
Do you think KMP will gain ground like flutter because I don't see a lot of people rooting for it, like they did for flutter. I am Learning it though but I am still waiting for your first KMP tutorial. Thank you very much man, you have really helped me in my dev journey 👌
Netflix is using KMM for their app. I have been playing with KMM for a while now and in IMO it is going to be the standard going forward. All the devs that i know and worked with don't wanna learn flutter and others and the same for me as well. There are still a few issues with KMM especially related to ios (coroutines do not work in ios), but thanks to dev communities, there is a work around for it.
I might be the rare outlier here, but I've been developing on Android for years but my every attempt at learning iOS development has been more or less a failure for me. Anyone else relate?
Do you think KMP is possible without using KMM plugin at all? I haven't tried out KMP yet, but I have seen people talk about not using KMM plugin for KMP, since it restricts you to using mac os.
I have an air which I use only for the final step, publishing (ionic,flutter apps). I don't get why devs like to work on this os with overpriced h/w. Windows10 is great plus you can game and Linux is top (but worse at gaming).
With Jetpack Compose being released, what are your thoughts now? I heard it modernize Android development alot. I have experience with React and I too get frustrated with (early) Android development.
Recyclerview is just a nightmare for a beginner.
Very eagerly waiting for jetpack compose final release
Viewpager was my first nightmare
as a beginner, I can confirm
😂
Senior here. I still hate RV
Notes
1. Android studio gradle headaches.
2. Documentation sometimes contains crap.
3. RecyclerViewAdapter vs simple SwiftUI
Kotlin multiplatform is promising.
Android documentation is way better plus they have codelabs too...
Gradle errors were hands down one of the most frustrating things when I first started Android dev... And they still are lmao
I think pods are most frustrating, while gradle errors are easy to solve.
@@ravinderyadav5605 no, the problem with Gradle is that it could potentially be incompatible with other solutions and you have to experiment with other versions, and you have to migrate versions without even knowing if that is going to work, you can spend more than 80 hour's to solve a very complicated one
I thought I was the only one
Now I don’t feel so dumb
@@Rajmanov Have you ever used pod in large project? Grable is a lot more reliable, while pod is dependent on ruby which meshed up and just failed on some macbook but not the other
@@Rajmanov All build systems have become terrible complex when going into details. I find xcode the best (i wrote a script updating the xcode project automatically). MSBuild or CMake for our cross platform business logic can be just as bad.
As someone who has done both platforms, this is spot on
Thanks mate for all your tutorials, you helped me a lot
Always thank you for awesome tutorials!
Have to wholeheartedly disagree having spent years on both
Bit of a conflict of interest with that name 😂
I'm an Android App Dev and i almost send my resignation letter to learn iOS dev🤣. Stay safe always Mitch and keep it up.
This is absolutely correct, I am android developer from last 4 years and i never touched the iOS before, However when i learned iOS it took month for me to reach out on same level of android where i am today.
I know 4 years of Android develoment helped to boost my training in iOS. Still i started loving in iOS more than android just because of easiness what i found.
I've been doing it for a week and I'm feeling pretty good. Probably a month I would be pretty competent. Same as you
@@codingwithmitch don’t forget that iOS is an echo system, and to know how to use it takes lot of time (and sometime is not so simple).
@@DiegoNovati1 Lol I'm doing it the android way
github.com/mitchtabian/KMM-Playground/blob/test/iosApp/iosApp/presentation/ui/recipe_list/RecipeListViewModel.swift
Any old timers here remember Android development on Eclipse? That was what truly separated the men from the boys.
Actually I remember eclipse because I used it when I was in school lol
@@codingwithmitch it seems I’m getting old lol
This old timer remembers when API 3 (v.1.5 | Cupcake ) came out in '09 and brought with it the amazing feature of animated screen transitions. Just a month now until that is 12 years ago... how time flies.
@@Mrdresden you are a dinosaur
First of all, good content in the video.
You are comparing swiftui with recyclerview in android, i think it should be storyboard and recyclerview. I have tried building ios apps with storyboard and it is not any better than recyclerview. Compose UI vs SwiftUI would be a better comparison. At work, senior developers do not even use storyboards, they write code to created views and all.
For beginners, everything is difficult and beginners should understand it. With more practice and understanding the architecture of the platform, it will get easier.
Another thing that i have noticed in ios is that the same code would run fine in ios 13 but would not work in ios 14 and i have found such issues in android very less but it doesn't mean one platform is superior than other, they both have their sets of problems.
Excited that JetBrains have developed kotlin multiplatform so that android and ios devs can work together.
I tried to learn android dev. for so long and always got frustrated by the amount of time/effort to build simple ui. Now I am investing in iOS and everything seems easier and smoother than it was with android.
Did you skipped UIKit and go with SwiftUI?
@@bitwisedevs469 No, I started with UIKit. I felt like I would miss basic stuff by jumping directly into SwiftUI.
@@jonathansilva3364 nice, same I will spent months with UIKit first then jump with SwiftUI. Then Compose with Android when it gets matured.
I generally recommend that anyone that is new to development and has access to a Mac, they start with iOS development. It's just simpler in almost every aspect.
Thanks for the video Mitch!
Too bad I don't have money for Macs or iPhones. 😬
@@vaelinalsorna1649 Try VirtualBox in Windows OS,Sir.
This comment coming from Bangladesh
@@abdullahalmasum5542 I bought a mac. This reply is coming from Canda
and the pay is high comparing Android development
I generally recommend the opposite. There just much more learning material available for android
I am a senior android developer and been working with android for almost a decade now. I am about to learn iOS in a couple of weeks and lets see
Please share your view after a weeks
plz share right now
Share your experience please.
Went back to Android development. Xcode is just so hard to use coming from IntelliJ
Kotlin and Swift are twins. I love both the languages.
yes, iOS is definitely much easier, I'm doing both.
i have been watching your tutorials in android development and they are awesome i agree with the fact that android development has a lot of moving parts compared to ios thats why i recently switched to react-native for cross platform development it is much easier and the best part is it is still native apps that come out of the process.its also a the best of both worlds and you can get apps up an running fast too.
Also both are improving significantly since 2018. IOS SwiftUI and Android Jetpack Compose are amazing godsends. It was trash before both those were introduced.
U just made me delete android studio and start learning IOS
Apple should have sent me a free laptop damnit
@@codingwithmitch lol I agree
Can you guide me from where I should start learning iOS ?
Being Android developer, I'm really excited to learn iOS to do parity but I am not sure from where I should start?
@Justin Smith not true in many countries
Last time I tried developing on iOS it was using Objective C, and I didn't care for it too much. The way messaging was handled seemed strange. I haven't touched Swift yet, but this video gives me hope. Nice video!
I have always learned the language alone before learning a framework. I like to sprinkle my language learning with unit testing.. just to get a feeliing.. Then framework gets a lot easier to work with since you are passed the first barrier.. I cannot learn a framework and language at the same time.
I agree 100%, however, there's one issue I faced with iOS development as an Android developer, it was extremely complicated to go out of the box and design custom layouts, I worked at a company that required both designs to be almost equal, and it was a nightmare on iOS
It's easier now since SwiftUI is based on resuable views combined together, so you can easily create custom sub-views to add into the main view. The best thing SwiftUI got rid of is constraints. Those were so damn hard to make pitch perfect.
Ya got me at “Android develmer” lol. I’d probably make the same mistake with words. I agree though a simple recycler view can be a pain tbh.
1. Android studio gives random & vague errors
2. Multiple library, which are incompatible with each other
3. Bad documentation, which is improving
4. Complex implementation for most used things
5. Less dependency
There is no swipe for refresh in jetpack compose... Also no visual feedback with user overscrolls in a lazy column... This still really baffles me
I am sure they will be adding this soon
I have been doing dev for ios and Android apps for years and I think ios development is easy but apple can improve a lot with xcode which is not all at par with android studio
Hilarious. Not so.
Coding experience in xCode with Swift UI is dramatically super smooth and swift as compared to Android Studio. While with JetPack's Compose, coding in Studio is going to speed up to a great extent.
A comprehensive KMM and KMP tutorial in the future would be awesome along with some iOS stuff
Yep that's coming for sure
that's exactly what I'm going through right now.
It's extremely annoying when after fresh install of AS, instead of developing you have to tinker how to make it work, what's worst even their own code samples don't work as intended. Documentation is outdated, confusing and unhelpful. Constant deprecation and implementation of halfbaked ideas. Changes that make no sense like implementation of viewbinding, databinding when jetpack compose suppose to retire them all. Each release brakes something and forces you to remove something right after installation ??? does that make any sense? One day you learn something and it's gone the next. Hard to keep up with that insanity. One might think that with all the resources at their disposal they should make a coherent and well documented product by now.
So anyway, it seems like apple is doing way better work when it comes to software.
it's true i love you, gradle issue frustrated my life, especially when you are a self learner.
self learning is a big waste of time
I still can't wrap my head around how Kotlin runs natively on iOS.
Get your hands dirty
It compiles to ObjectiveC frameworks
Super refreshing to hear this bc it’s been my experience and I thought I was just dumb
same xd
app management, store management, signing, building is much easier on Android. Significant when managing many apps.
Recyclerview seems complex because you can tweak and turn things to make it work the way you want to and the sky is the limit. Love android development.
That is true but why can't you have both
As an android developer, my heart is stuck while you are speaking.
screen in the top left, look at where it says program and click on where it says “aggressive te” and change it to “analog app 1 te”
I think KMM is for those who doesnt want to admit that flutter is not for babies...
change my mind
The problem with Kotlin multi-platform is that Kotlin doesn't have the features that Swift has, specifically concurrency features of Swift.
Engamenttttt my friend youre the best i love your vision on everything i proud to pay for your work broo! Greetings from colombia expecting to learn everything about kmm!!
There are some weird quirks for SwiftUI. For example you can't have more than 10 direct children views in a view otherwise Xcode throws a weird, poorly described error. You have to refactor them out. Also AsyncImage (just released for iOS15) does not cache so each time you do a network request for it. There are 3rd party libraries that did this but first party is not perfect. I'm not saying it's quirkier than Android but it has some to be aware of.
From my experience with android, to understand all features you really have to take with you some java experience in order to be able to move fast, understand framewok fast(how it works especially in jetpack) without experience in programming I do not recommand to start working for large projects
Your experience with iOS is based on SwiftUI. UIKit is way more complex than any UI framework out there. There are so many ways to do layout with UIKit, which is confusing and overwhelming for a beginner. You can implement UI with code, xibs, storyboards, etc... all of them have a big learning curve, especially coding UIKit with code, you are 10x slower compared with SwiftUI. The recycler view has probably the same complexity or less than a Collection View... it is the same exact problems. What about memory? On android you have GC, easy... on iOS you need to be very careful not to create memory leaks with Ref Cycles or closures...
It is not really fair to compare swift UI experience with your Legacy Android experience. You need to have legacy iOS Experience to be able to say that iOS is easier than android 🤦♂️
Btw, I've done KMM at scale. It is not easy, unless your team has time for researching and talking with the guys from JetBrains, you will lose a lot of time. The productivity and tools are not mature enough, you have to come up with custom scripts to improve the developer experience, and not to mention the random crashes Kotlin/Native produces on iOS, especially after Kotlin/native updates. The problem is although the code you write for business logic is "almost" the same (you still need to do platform-specific code), they run in different environments. The android code will run on the JVM, on iOS it is Kotlin/Native which is not stable yet, even the memory model is being totally refactored right now... So, for sure KMM is not only roses and sunshine. If you think it will save you time, it won't, the advantage is that your business logic will be the same, so it is good for consistency. Right now that is the only big pro of KMM.
wait until you get to coredata and multithreading stuff. I've done both and both fields are complicated in different ways. Both ecosystems are evolving really fast and some new tools are really hard to get used to. Also in Objective-C era ios apps had lower level code comparing to android's java at the time. Now with swift and kotlin it's pretty much on the same level, but swift has more unconventional features that are hard to wrap your head around at first.
I'd say android and ios are pretty equal now dev-wise.
i would still call myself a beginner on android but getting to this point took so much grit from me. on the flipside, deploying to Google Play has WAY less barriers than deploying to App Store and deploying apps i think is part of the fun
The difference between the two is that IOS gives you good defaults, Android doesn't
Subscribed for KMP.
It will be great to see D-KMP(SwiftUI + Jetpack compose) as well.
I don't really agree with RecyclerView, the adapter boilerplate is similar in UIKit.
Since you use SwiftUI it would be only fair to compare that to Jetpack Compose, and lazy listviews are comparable there. AFAIK Jetpack compose is more stable and production ready than SwiftUI is.
But I agree iOS in general is easier by a mile, my main reasons why iOS development is easier than Android:
- Amount of components: On Android you have a lot of them: Application, Activity, Fragments, Services, BroadCastReceivers. On iOS it's basically Application And ViewController.
- Component Lifecycle: On Android the Lifecycle is so much more complicated, because the are multiple scenarios where a component will get killed or restarted and it's necessary to restore/recover from that. On iOS your ViewController will never get disposed because of memory pressure.
- Direct control over the ViewController constructor. On Android Activities/Fragments will get created for you, you can only pass data using limited bundles or over a shared viewmodel, you do not have control over the constructor. On iOS you can pass whatever you need to a ViewController over a constructor or setter and call it a day, the ViewController will never get killed or re-created so there is no need for serialization here.
- Limited options: yes iOS has a lot less options when it comes to a lot of system-related things, like notifications are very limited compared to what you can do on Android, same goes for running in the background or picture-in-picture and and and.
- Only need to consider the 2 iOS versions: unthinkable in the Android world, but for iOS it's fine to just target the latest 2 iOS versions, since adoption rate of new versions is fast, the 2 latest iOS versions cover most of the ground already.
- No Fragmentation: there is a limited amount of devices that need to get tested. On Android you have a lot of different manufacturers and yes it does matter, in production you'll run into bugs left and right that are very specific to a manufacturer or even just one single model. Multiply that with the 6 API versions you should support and you get a exploding number of devices to test with.
I think the Android documentation is much better. Much of the iOS documentation is in objective c still. Apple also don't have any guidelines for architecture or anything like the weekly now in android show or their tutorials, all they have are talks at wwdc. They also don't have anything as good as leak canary as far as I know, plus you can get retain cycles.
But the architecture for iOS I agree is better than Android, since you can do certain things with far less code. You don't have to create services and configure as much, and things like bluetooth are much easier.
Although I share the same opinion as you (I have 3 years of Android Dev experience and 4 months of iOS experience), you can't really compare SwiftUI with XML UIs in Android. And SwiftUI is fairly recent, and a lot of projects are still in UIKit, and some older projects are in Objective-C. Apart from that, Apple generally releases APIs after having put in some thoughts into them. Everything is in standard framework.
yaya I know I said multiple times I am comparing SwiftUI with "old android" which is not accurate
Is this still the case in July 2023? A lot has changed since 2 years ago.
I have seen the opposite in my previous employment. iOS was waaayyyy more restricted of what and how you can do things. Android was much better to match requirements (design and functional)
Here in America, most companies design for iOS first and Android is forced to follow suit. I spend half of my time arguing w/ design on why it's dumb to implement iOS UI/UX on Android.
@@404errorfilenotfound oh yeah, that brings back memories. We had a client which didn't bother making Android specific designs at all. That was fun times trying to match it for Android
@@404errorfilenotfound it's same in Europe, from my experience :)
@@404errorfilenotfound this thing is everywhere.
They even told me to mimic iOS popups 🤦🤦
probably it is been made easier in swiftUI than android studio and java (or Kotlin) because u dont have to much differences in the os between different devices unlike the android. it is open source and there is way to many devices with so much differences. that need to be considered.
your perspective about KMM is awesome
App development with Android Studio is frustrating.
Love Flutter and React Native instead.
Loved this video. Really believe KMM is the future, and yeah I feel like Apple makes life easier for devs lol (I would just hope for them to collab with Jetbrains for a decent IDE instead of XCode)
Jetbrains just killed AppCode due to sales below expectations...
@@vxsniffer appcode has nothing to do wiith kmm
Glad to hear things are looking promising.
You convinced me to use native iOS instead of flutter or other similar solutions.
KMP looks quite interesting, but from what I have understood, if your app relies heavily on multithreaded coroutines (so most modern apps), the KMP MultiThread project isn’t quite ready for prime-time.
Also, having written apps on both platforms, I find the code editing & refactoring much easier and flexible on IntelliJ IDE’s like Android Studio. Plus, working with older apps with XCode can sometimes leave you blocked for days from nebulous xcode errors. Of course, if you are starting a brand new app targeting iOS 14, things likely go smoothly. So both platforms really have their ups and downs, but I do agree that iOS is likely easier if you are targeting high IOS versions.
Thank you for sharing your videos. I will definitely consider your Clean architecture course when I get to it.
what do I do if my soft doesn't add up to the correct length of the loop? and I have so gap at the end because the notes aren't the
I wanted to switch to iOS but shit they still don’t have something similar to coroutines and you can have all of these guards and callbacks laying around.
Swift 6 has async/await: it will be announced at the next WWDC
I think most people just don't want to learn gradle. I've used gradle outside of android so to me I actually felt right at home. Lesson to be learnt there.
not know , but just know you've affected my life, and apparently tens of thousands of others, in an imnsely positive way. Thank you
ios developer will dislike this video
Best android channel on TH-cam: calls it shi** vlog. Fake gurus pretending to know android: my course is the best in the universe for just 7000$ a month.
😂
I will be starting my next project with Flutter so I will miss your Kotlin videos: /
Good luck
How is it going with flutter?
I came to Android from an Angular/.Net background and the first thing to hit me was how shitty the dependency injection is and how tedious it is to add project dependencies. They really could have learned something from their Angular team
it's interesting to compare the kmp with ios native in terms of performance
As someone who recently got back into mobile dev..im completely agree.. :)
To setup a roomdb app for android i had alot of problems with getting gradle dependencies to work.
This got me excited about KMP!
Developing for Android sucks, but someone's got to do it, right? Here's your engagement, Mitch! Keep it up!
At a quick first glance, it looks quite a bit easier! (Android engineer but with my first Macbook on my current project thought to give it a shot) Swift is pretty clean code too, I like the C-style syntax and it looks like a declarative Kotlin / Compose style.
Not changing any time soon :)...just love Android way too much but iOS development is pretty slick.
i think you can say "faster" in build time, "simpler" in making uis. actually i also think it's easier than android however if you go deeply, i think everything is difficult and hard to compare which is easier because there is no finish line
Swift UI is declarative like Jetpack Compose, so if you compare, compare those 2. Recycler view is like Table View from storyboard or xib file. I spend hours to discover I have to drag and drop variable from UI designer to code part of UIController to just display the list. Both parts are very similar. Regarding dependencies XCode has many different popular 3rd party managers for that like cocoapods or carthahe. And of course there is dependency mismatch which can thrown many confusing errors, like linter errors for example. Don't let me even start on provisioning profiles and certificates. First time it took me whole week to just upload an app to the store. Both systems have pros and cons, really neither better or easier.
Cross platform app development platforms suit well for small to medium sized projects. In large projects with huge code base KMM is the right solution.
Do you think Swift and Native iOS development will still be in demand with the likes of React Native and Flutter bombarding it?
Can't wait stable version of KMM
everybody is gangsta until firebase notification and podfiles come in. Not to mention how to merge fix that 14k LINES OF STORYBOARD UI...
I'ma gangsta
SwiftUI is not ready stable for iOS Dev ,so u need UIKit because most of all legacy apps still on UIKit and Obj-C
Its long version of saying ios is easy for a beginner who just start but might be tough for a senior android developer
I agree that iOS’s out of the box libraries do most of the work, however, it’s not the easiest to customize if you like a different look/feel
Libraries like ktor for the network client and kotlin serialization for parsing will come in handy, since both of these libraries support multiplatform out of the box 📦
Yep looking at ktor, kotlinx.serialization, kotlinx.datetime, sqldelight
The problem is the Android OS not Android studio or development per se. It's like Android Studio and the Android OS aren't built by the same people or they don't communicate at all. Android studio is okay. Android itself is too complex and that's what forces Android studio to be troublesome.
Even the old non SwiftUI way is much cleaner in iOS with TableViews and what not. There is simply a big list of things iOS devs dont have to think about things just work for the most part. XCode can be a beast though and publishing is crazy complicated.
Dear mitch , first of all , great work with your videos, i love them. Now ,i'm not sure if you already have discussed this in a previous video but you keep saying that asynctask is garbage, would you kindly explain why ? Please do correct me if i'm wrong but newer ways to get stuff asynchronously , eventually ends up creating just another implementation for an async task with callbacks taking twice the time to implement. so.. why the hate? i do know that it often becomes source of memory leak but knowing what you're doing with it pretty much solves the problem and i'm strict about it cause switching languages just because google advises you too isn't smart.. your thoughts :) ?
Take a look at coroutines my friend and experience bliss
Being android devs just listening is swift ui and ios feel jealous
The gradle headache is the one thing why I'm thinking of switching to full stack web developer
Is it possible creating a kmp application on fushia os as flutter does?
I guess probably if kotlin native supports it
15:01.. You can't do that starts till 15:40, hell yeah that covers my 60-70 percent of work which I need to do platform specific. wow so Kotlin is amazing to fool you for multiplatform, I might move back to Xamarin back again, why need to get in to Kotlin ??? Till date the most perfect but least talked about cross=platform I've seen so far is NativeScript.. We built a enterprise level product for an Insurance domain and were able to use almost 90% of the code without anything changed. I know NativeScript sucks when UI comes in forefront, however its less pain in the end. we got almost 2 months to test the app and covered the UI enhancement while fixing the issues man.
However it is harder to submit an app to the Apple Store
Render engine problem
Theme didnt support with UI component
UI didnt reload until run app
Restart ☺👍
There's a good episode on Fragmented Podcast talking about how Android is harder than IOS. I recommend listening to what Donn Felker has to say. But yeah IOS was made for phones, android originally was made for cameras I believe. So google acquired android os and hacked a lot of things to catch up in the smart phone market.
I used Angular JS (developed and maintained by Google) for years. And honestly, it was a nightmare.
The yearly release looked like a totally different product.
I've found that iOS development is easy, but there is some trade offs. The gradle can be a pain in the butt. Every time I have to checkout iOS's repository I've had to run cocoa pods on a command line. They also have those weird settings on the profile that if are incorrect you'll be running around in circles. Maps have also been a bit of a pain to work as well.
First problem mitch mentions about android I was facing at the moment, 🤦♂️.
Am having a problem with my gradle, "could not find method dependencyResolutionManagement() in settings.gradle, yet it's there.
Somebody help
Do you think KMP will gain ground like flutter because I don't see a lot of people rooting for it, like they did for flutter. I am Learning it though but I am still waiting for your first KMP tutorial.
Thank you very much man, you have really helped me in my dev journey 👌
I think KMP is awesome and would be very surprised if it didn't gain a lot of traction in the coming year
Oh great
Thank you very much for responding
Netflix is using KMM for their app.
I have been playing with KMM for a while now and in IMO it is going to be the standard going forward. All the devs that i know and worked with don't wanna learn flutter and others and the same for me as well.
There are still a few issues with KMM especially related to ios (coroutines do not work in ios), but thanks to dev communities, there is a work around for it.
@@localhost3662
Nice I think I will invest more time in learning it now
Thank you very much for your insight
One note though xcode is horrible
Great video (as usual)
How was your experience with MacOS?
I might be the rare outlier here, but I've been developing on Android for years but my every attempt at learning iOS development has been more or less a failure for me. Anyone else relate?
Do you think KMP is possible without using KMM plugin at all? I haven't tried out KMP yet, but I have seen people talk about not using KMM plugin for KMP, since it restricts you to using mac os.
Hi Mitch, as a developer, I'm hung up to have a MacBook.
I didn't want to buy one. They are too expensive and my windows PC is way better
I have an air which I use only for the final step, publishing (ionic,flutter apps).
I don't get why devs like to work on this os with overpriced h/w.
Windows10 is great plus you can game and Linux is top (but worse at gaming).
With Jetpack Compose being released, what are your thoughts now? I heard it modernize Android development alot. I have experience with React and I too get frustrated with (early) Android development.
Awesome content.❤️..not related to this. Which camera you are using love Bokeh effect.
Canon eos r