Is Kotlin Multiplatform Mobile Ready for Production?

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
is kotlin multi-platform or kotlin multi-platform mobile ready for production that's the question that i'm going to try and answer in this video this is going to be probably a longer video this is going to be more of like a presentation style video if you could imagine sitting at a conference somewhere it's me standing in front of a stage with a powerpoint behind me that's the kind of thing that i'm going to or the kind of presentation that you can expect from this video so as many of you know if you follow me on twitter instagram youtube the internet somewhere i've been working on column multi-platform lately or more specifically kotlin multi-platform mobile and in this video what i'm going to do is i'm going to summarize my experiences using kotlin multi-platform because i've got now a real app in production i've got an ios app and i've got an android app in production both of which are built with kotlin multi-platform mobile so because this video is going to be a little longer than the videos that i typically make it's a you know all-encompassing summarization video i'm going to actually put time stamps i'm going to tell you exactly what i'm going to be talking about in this video and i'm going to put time stamps down below so you can easily just kind of jump to whatever section you want or if you've got a co-worker or a friend or a colleague or something and there's a specific topic that i talked about and you want to refer them timestamps will be down below so first let's just go over the topics that i'm going to talk about so what am i going to talk about as you can see from the heading up there first i'm going to demo the android and the ios apps that i have in production that i built with kmm next i'm going to talk about the libraries or the tools that i used so for android this is like the dependencies that i used um you know for example jetpack compose for ios like what did i use you know swift ui for example and then like what code what libraries did i did i share between the two next we'll talk about the architecture so i'm going to do a little bit of an architecture diagram i'm going to talk about what i think is the ideal architecture for a kmm project next we'll talk about the problems this will be me mostly just complaining about the things that i had issues with when trying to build these kmm projects then we'll talk about how long it took me to build these apps now for those of you who know me know that i i don't have any experience with ios development i actually just bought an ios or a mac computer specifically for this kmm project so i'm going to talk about basically how long it took me to not only learn kmm and how to get this app into production but how long it took me to get onboarded i guess with you know ios development and swift ui so how long does that total time take me and this isn't to either brag or say or talk about how slow i learn or anything like that it's just to give you some perspective about how long it took me to do something that i had zero experience with and now i have two things in production then we'll talk about what i think kmm could improve on after spending this time on and having apps in production so what are the things that i think would like take it to the next level sort of thing next is kmm for large teams so do i think that kmm is something that you know hundreds of developers could work on a project together is is that a good idea kind of my perspective on that then we'll talk about flutter or kmm one of the questions that many many people want the answer to and finally is kmm ready for production this is the question that everybody wants to know the answer to and even the title of this video now keep in mind that everything i say in this video is my personal opinion one lonely guy sitting on a computer playing around with stuff these are just my opinions don't get angry if i say something that you didn't like don't get overly excited if i say something that you really liked these are just my opinions i'm going to be as honest to you guys as i can actually i'm going to be completely honest i'm going to tell you exactly what i think about everything that i did so again my opinions i'm one guy don't get angry and don't get you know too excited alrighty so let's uh let's get into this demo so on the right hand side here i have the android my personal android phone that i have the app installed in and on the left is an ios phone that i had to buy to test this app yes i had to spend so much money to get started with this ios stuff i had to buy a laptop i had to buy a phone all kinds of stuff anyway that hey that maybe this will be in the complaining section let's let's get into the app demo so first let's launch the android client so i'm gonna click the icon you get the nice splash screen and then boom it takes you to a map where you see all of the power outages from the province that i live in in canada so for those of you who don't know anything about this app which is probably most of you this is an app that i built um quite a few months ago it's an app that shows all the power outages that are in my province there's one power company in my entire province where i live in british columbia canada they do manage all the power so there's one you know source of data for if there's power outages they happen to publish this to their website anyway let's let's get into the let's get into the demo because i'm i'm sure you guys just want to see that so very very simple app i wanted to try and make this as simple as possible when i built it i have essentially one screen which is the map if i was you know click on a power outage i have a you know a bottom sheet down here where i can get information about that it says you know what happened when the power is going to be restored if there's a crew that's already been sent how many customers are affected and then the general area i can zoom into the power outage to see like the specific area that it is affecting and then there's some filtering options if you want to take a look at all the other power outages so if i click on that icon in the top right there it opens up a drawer and i can filter for the different regions in the province so let's click on lower mainland which is where i live you can see the map updates in the background when i select lower mainland and what that does is it changes the map to only show the outages for that particular region and i can filter even further i can filter on municipalities so i live in abbotsford so i'm going to click on abbotsford down there then you can see it zooms into abbotsford and it shows the power outages and i can you know click on them and get information about them that's pretty much it that's pretty much all the app does again very simple but it solves a problem there's there's currently no app from bc hydro that shows you know this power outage information so that was the android client now let's take a look at the ios client so same kind of thing here i'm going to click the icon right away it opens to the map exactly like the android client does if i click on a particular outage again same kind of options i get this bottom sheet that becomes available to me i can zoom into that power outage exactly the same kind of thing here then i have the filtering options over here let's click lower mainland again again the map updates in the background you saw that as soon as i clicked on lower mainland let's click on we'll click on a different region this time we'll click on vancouver and then boom it zooms into you know vancouver and i can click on the outages one thing i actually did not show you in the the android client is how i can update these filters so you can see there's like a little edit button over here so if i click edit on the municipality that i clicked it zooms back out and then gives me options to the different municipalities if i click on the edit button for the region that i clicked so let's click that again it then you know zooms right back out and then shows me those regions that i can select so that's pretty much it and you can see that they are almost identical both the ios client and the android client now let's talk about the dependencies that i use the different you know tools libraries whatever you want to call them the different things that i used in these projects and which one which ones of those were shared between both ios android and which ones were you know android specific or ios specific so for the shared kind of libraries i have sql delight for the caching client the the app will download network data and then it will cache it and then every 15 minutes it updates that network that uh gets the new network data then updates the cache so sqlite is a common caching client really great i had a bit of trouble setting it up but i'm talking about that in the complaining section but anyway that's what we're using for caching ktor for the network client ktour by the way is an excellent networking library i'm surprised i haven't used it before i guess the reasoning that i've never looked at it before is because i always use retrofit on android and there's nothing wrong with retrofit like retrofit's great um it just was it solved all of my problems so i never really went to go look at anything else but ktor is awesome like ktor is a top tier networking library i probably will use ktor from now on and i won't use retrofit anymore then we have collinex datetime so if you use android you probably use like the java util date classes obviously i want to share as much code as possible so in my you know domain models i can use a shared data structure for the dates collinex date time is great for that i've call the next serialization for deserialization and serialization of data we have firebase crashlytics i think firebase crashlytics should be included in every single production project out there unless you have some other you know crash logging uh tools that you use but firebase crashlytics is awesome it's uh the information that you get in the firebase console with the crashes that happen in production are awesome you know i don't know how you would solve any problems if you didn't have crashlytics any problems in production anyway so crashlytics awesome it's free why not use it uh then we have we're over to android now so we have jetpack compose obviously and this is um using a single activity no fragments so a compose only navigation system is what i used we have navigation component which helps to build that compose only navigation system we have hilts for dependency injection now i could have probably actually definitely could have used a common dependency injection solution i could have used a coin i know would have worked i think codeine would also have been fine but coin i know definitely would work so in the future uh like when i make a course on uh when i make a course on kmm i will probably do coin for dependency injection and i won't bother using hilt the reason i used hilt is i thought that we had to use hilt in order to be able to do constructor injection into view models and maintain the instance of the view model in a composable but we don't we we can uh we can essentially get rid of view models now altogether but i'm gonna talk more about that in my course that i make so hilt is not needed i could have just used coin or whatever so anyway next we have work manager as i said the network data is refreshed every 15 minutes so i fire off or i create a work manager job that that does that i schedule for every 15 minutes to go get that new network data and then update the cache and then we have accompanist coil for displaying the images i think that was it oh no last one google maps of course now we're going over to ios so we have swift ui for the ui building stuff this is you know another declarative ui toolkit just like jetpack composes just like flutter uses we have cocoapods for dependency management for those of you who are not familiar with ios development ios doesn't have anything like a build.gradle file does on android so you need i guess like a dependency management solution and that's what cocoapods is then we have google maps now there was other options that are you know native to ios but i wanted to use something that i was familiar with i could have used i think it's called map kits and there's other things you can use but i chose google maps because i'm familiar with google maps so i thought it would be easier turns out it was probably not the right choice but i will talk about that later and last but not least is what kind of dependency injection did i use well i used good old-fashioned manual dependency injection so now let's talk a little bit about architecture what architecture did i use and what architecture do i think is ideal for a kmm project you know you guys saw the apps you saw what they look like they're fairly simple but i'm gonna approach this from the perspective of you know any size app what what architecture is ideal for a small app what is good for a big app i think it's the answer is all the same clean architecture so what does clean architecture look like in a kmm project it looks a little bit like this you have your domain where your core business models exist your data source where you have your caching client your networking client then you have your interactors or in other words your use cases and then that that separates the you know the business logic the business layer from the framework layer that's the two that's the main kind of separation line business up top where it's pure kotlin nothing to do with ios nothing to do with android and then down below we have framework where you're gonna get basically like in an ideal scenario the only thing you have down there is your swift ui code and your jetpack compose code or any other kind of framework specific things like services and stuff like that so the reason i think that clean architecture is the ideal architecture for a kmm project is because it maximizes separation of concerns it maximizes the uh the separation between your pure kotlin code and your your framework specific code so like i said your domain models your networking caching client your use cases all of that that's a lot of code like that's probably the bulk of the code in your project um that's all kotlin so that's all shared and then you only have to like in a perfect world you only would be building the uis for ios and the ui for android now when i built my kmm project i actually built a view models that were framework specific so i built like an android view model and i built an ios view model and they had their relative observable data structures in there and then those get presented to the the ui the swift ui or the jetpack compose ui i'm going to talk a little bit more about this later but i think there's a way that you can move the viewmodel up into the business layer which would be like another huge code saving like if you could share the view model then literally like the whole project other than the ui would be shared which is like awesome and another thing on that topic like you know um how much code should be shared i guess that's a question that um commonly comes up i think like i almost think that that's the most you'd want to share like all the way from your domain data source use cases view model i think you'd want to stop there i don't think you would want to share more code than that because you you want to take advantage of the native tools that are available so like swift ui jetpack compose you can write that in a shared way i think i think that this this gives you the best possible app where you're you're sharing the code that should be shared and you're not sharing the code that shouldn't be shared you're taking advantage of the framework specific uh things or specialties that are available and you're sharing the things that doesn't matter you know i think that in a perfect scenario that's probably all the code that you'd want to share and now it's time to start complaining what are the things that i got hung up on that i spent more time that i probably should have on what are the things that gave me headaches the biggest difficulty that i had with setting up kmm and getting all this started was gradle configuration i don't know anything about gradle like i know almost nothing about gradle i don't know how to write gradle scripts really only very very simple ones i i really just don't know a lot about gradle so any kind of gradle configuration thing or issue that came up i had a very difficult time solving and the kmm documentation it addressed some of these things that that would cause problems caused my project to not build or whatever but a lot of it was just not documented and i had to go and look at other sample projects shout out to john o'reilly i looked at all of your sample projects and a lot of that was the reason why i would solve these problems so gradle configuration that was that was my biggest uh biggest hang up and i'm i'm sure that has something to do with you know you have to use android studio canary if this was a real or a fully uh published version of android studio i'm sure a lot of these things would be ironed out there would be like a specific gradle configuration that you could use every time it would be well documented so yeah the biggest the biggest headache i had was grail configuration i got stuck a lot of times my project wouldn't build and it was just end up being due to some stupid little gr like a one-liner in gradle that i had to add something and it would then work and it would build also sql delight that required some gradle configuration and i was having some issues with that i didn't write down the specifics so i can't tell you specifically what it was but yeah just like in general cradle configuration caused me a lot of problems next was actually cocoa pods so this was an ios specific thing if you remember from our chart here we have cocoa pods which is one of the ios specific dependencies so again i had no experience with ios development before starting to build this km project i didn't know what cocoapods was i didn't know how to use it but i had some i had a lot of issues with cocoapods i ended up trying to like build a project just a standalone ios project with cocoapods and i had no issue at all everything worked exactly as it was supposed to but as soon as i tried to get it into the kmm project it ended up giving me all kinds of headaches the reason was it was another gradle configuration thing i didn't know that uh you know android studio had a cocoapods plug-in that i had to add a gradle configuration for cocoapods there was this uh podspec dot or cocoapods.podspec file or something like that that would be generated based on your cocoapods configuration in android studio so i would go look at sample projects and try to figure out because this stuff isn't documented and i'm trying to figure out what the hell what's wrong with cocoapods and i go look and i'd see that they have this file cocoapods.podspec and i'd look at it and i'd say oh maybe i need to add this and i'd add it to my project and you know write in all the properties but actually that was a file that was generated so i'm not supposed to add it i'm supposed to add the configuration and then it gets generated anyway i had a bunch of problems with that but got to figure out obviously from i think john o'reilly also i'm pretty sure i asked him so shout out to john o'reilly again other than that it was pretty much straightforward other than google maps the ios sdk um i remember i told you that it turned out that wasn't like a great idea i probably should have used map kit i don't actually i don't even know it might have also had problems but i'm guessing map kit would have been the better uh the better choice uh the reason is because it lags a little bit like the leg is so so tiny you probably honestly would not notice it if you were using the app yourself but i noticed it because i was i was just like really trying to see if this was working it lags a tiny bit if i scroll around whereas on the android one there is zero lag and to make sure that it wasn't just like how google maps is on ios i downloaded the google maps app onto my iphone and it does not lag at all so it's i don't know if it's something that i did or it's maybe like google maps does not work well with swift ui i'm really not sure but everything i'm doing appears to be correct i've looked at the samples you know i'm doing the same things they are and it's my map is like a tiny bit laggy so i you know i'm not too upset about that but i wish it wasn't laggy obviously now let's talk about how long it took me to do everything how long it took me to learn swift ui and keep in mind i didn't even own a mac i had to buy a mac so i didn't know anything about ios development literally zero about ios development so how long it took me to learn that how long it took me to learn kmm and then how long it took me to like get build these two apps and get them both into production not too um i'm not trying to brag i'm also not trying to i have no idea if this was either fast or slow so i'm not trying to brag i'm not trying to be like oh i learned slow i'm just trying to give you an idea for how long it took me my perspective and so that you know like approximately how long it would take you if you wanted to do the same thing if you wanted to learn ios development wanted to learn km try and get something in production all that so taking a look here at my calendar it looks like i had 26 total working days so again keep in mind i knew nothing about ios development i ordered my mac online the day it came is when i'm i'm considering that the starting date the day it came i spent about two weeks learning swift ui i watched a course uh hacking with swift and i watched that and tried to build a couple of things on my own in those two weeks and then i jumped into kmm so in those 26 working days i uh you know probably spent 10 learning swift ui and then the rest is the rest of the 16 days was me rebuilding my android client because i previously had this app in production but it was um it wasn't even built with jetpack compose i built it i don't know six to eight months ago or something like that and uh so i rebuilt the whole thing with jetpack and pose using a kmm project so sql delights for the shared caching k tour for the shared network and then i also built the ios client so within 26 days learning ios development learning kmm and getting something into production and i'm not spending 12 hour days or anything like that like if you took an average i'm probably spending like six hours coding a day because i'm doing other stuff too you know i have an online business to run i have a community to manage i have a new baby at home so i've been spending more time at home even so like i'm not working crazy hours i'd probably take an average of six hour days each time and uh and yeah so a pretty reasonable amount of time in my opinion to do all of that so now hopefully you have an idea of how long that might take you now let's talk about what i think kmm could improve on to sort of take it to the next level so hands down in my opinion what i think would take it to the next level is being able to bring view models up into that business layer and in order to do that in my opinion what it would take is you would need some kind of an observable data structure that would cause jetpack compose to recompose if it changes and and also uh cause swift ui to you know rebu i don't know what it's called it's not called recomposing it's i'm just gonna say rebuilding but basically something that will swift ui will react to and also jetpack compose to react to because currently like in my projects what i'm doing is i'm adding mutable state to the mutable state objects to the view model i observe those in those in the composables and then when those things change obviously the composables get recomposed and updated with swift ui what you do is you create an observable object you add a published published i think it's just a published annotation so a published field to those observable objects and then when those things change just like the mutable state in the swift ui it gets updated so if there was a data structure that you could use that would you know both cause jetpack compose to recompose and also cause swift ui to like update its ui that would be amazing because then your view models could also be shared and there's something um you know i was i was tweeting about this a little bit and i have there's a thread on twitter about it and i got a lot of really great answers but apparently this might already exist and i haven't gone down the rabbit hole yet so that's why i'm not uh you know saying that you can already do this but it appears to be that you can already do this so let's take a look at the tweet so daniel barcelona over here gave uh responded to my tweet he says the dkmp architecture does that it provides a shared kmp view model to jetpack compose and swift ui including screen based co-routine scopes so that was another one that i i would have liked to have is like some kind of a shared i guess co routine because sometimes in the view model or sometimes in jetpack compose you require a co-routine to be launched to do something so having a you can't obviously share a view model right now that has a co-routine scope because swift ui does not know what that is and then which are canceled or re-initialized when the app goes to the background or the foreground so this looks really cool this looks super promising again i have not looked into this yet this was literally just this morning that i saw this tweet so that's gonna be like what i look look into next because i think that would be you know like i said that would maximize the amount of code that you would want to share the the amount of code that would be in that business layer domain data source use cases view model if all of that can be shared that's probably all you ever want to share that's like the perfect scenario where you can take advantage of sharing code that can be shared and taking advantage of the framework specific tools that are available on swift ui or android so now what about flutter kmm or flutter the question or one of the questions that everybody wants to know the answer to and i don't want to talk too much about this but in my opinion it's it is my personal opinion that it's always best to stay as close to the framework as you possibly can so stay like if it is feasible time wise if you're looking at the same like if you had a choice to build a flutter app or a native app and you knew that the native app was going to take the exact same amount of time you're building the native app it's obvious because you're you're closer to the framework you know that any problem you run into is probably going to be easier to solve on the native framework now i don't want to say anything bad about flutter and actually i don't have anything bad to say about flutter i think flutter is a great tool it does a job it serves a purpose but that being said if i was to have a choice pretty much no matter the app size no matter the project if my choice was if i was like a tech lead or a guy responsible for putting a team together and building an app i would 100 go down the kmm route i would not build a flutter app but if you want to see more about my opinions on flutter i actually spent a month on flutter just straight flutter every single day i spent on flutter and then i did a summarizing video just like the one you're watching right now so you can go up uh hopefully i will remember to put a card i think it's gonna be it's gonna be in one of these corners i always forget which corner but it's going up there you can go watch that video and i talk i think it's like for 30 or 40 minutes it's like uh yeah me talking about all of the sort of hot topics on android what the flutter comparisons are and breaking it down and really like uh did i like flutter is it worth it blah blah blah blah blah all that stuff so if you're interested go check that out that'll give you much more context next we're going to talk about kmm for large teams so do i think that kmm is a practical choice if you are you know on a team of hundreds of developers for example so just to be clear like the the choice the distinction here would be um either two teams like an ios team and an android team or uh and build like two separate native apps or build a kmm app that's the the choice i'm talking about here which one is better if you have a huge team so i think kmm would actually be quite difficult to work on with a big team and here's the reason why imagine you're an ios developer you're an expert in ios development if you if you're building a kmm project you're kind of always going to be at the mercy of the android developers or the kotlin developers and the reason for that is all the core business logic is going to be written in kotlin so especially if you don't know kotlin because every time you want to do something that is going to involve a change in that business layer which probably is a lot of stuff you're going to have to go up to some other kotlin you have to go cross over to the kotlin side or the android side and be like hey guys like what do you think of this of course you could obviously create like a pull request or whatever kind of um code management thing that your team is doing and do it digitally you don't have to like walk up to somebody and be like hey guys what do you think about this but it i hope you just see like what i'm saying here you're you're always going to be at the mercy of the android team like there's always going to be like that interaction of okay we want to make a change or we want to do a thing we have to go and talk to the android team first because they're essentially the ones with all the power because they're the people who are able to change the code and make sure that the code works on the uh the column side of the android side or the shared the shared code and really like the worst part about that is not like having to have that interaction or anything like that like that's probably honestly not that bad you probably just say something and they go and do the thing and you know whatever but it's time like there's always gonna especially if you go to a big a big big company there's like you have to the time it takes to like bring up the thing that you want to do bring it over to the team and say is this something that we can do then they have to get back to you and say yes or no or this is what you need to do or how to change it there's always like back and forth back and forth back and forth so how many times you got to go back and forth until you finally say okay the kotlin team is going to do this now the ios team gets it and they can implement the change on the ui side but then also like what if it doesn't work right away then they got to go through that process again they got to say oh we we did this didn't work we need it to be changed slightly back and forth you see what i mean like there's there's potentially a huge amount of time wasted in that back and forth so really like i think the best thing the best uh possible team uh com composition for a kmm project would be like everybody knows both everybody knows ios development everybody knows kotlin everybody knows android development then you have a few people who are like like a very very small number of people who are like super super expert in ios very small number of people who are super super expert in android but the the vast majority of them are kotlin android and ios and have a little bit of experience in all of them that i think would give like the the fastest um the the best uh the best and fastest way to you know propose a change implement the change and move forward all right boys and girls now let's talk about the thing that everybody wants to know the answer to is kmm ready for production you know i did some thinking when i was planning this video and thinking about this question and when you really ask yourself like is it ready for production it's kind of a silly question because you know i'll just give you a spoiler alert here my opinion yes obviously and that's what i thought right away i was like obviously yes but really when you think about the question it's like it's kind of weird like what what is the person really asking when they say is this thing tool framework library is this ready for production what are they really asking i wrote down a couple points here because i i asked myself that question and i thought that's interesting what what are they asking so the first thing that they could potentially mean in my opinion is um can i build an app with kmm that's like the most obvious question maybe that's just straight up what they're asking and the answer to that is yes obviously so check for that one next the next question i have here is can i convert my current ios or android app to a kmm project again check yes for that one uh will it randomly crash my app on some devices that would that's a valid question uh the answer to that one is maybe the there's not a straightforward answer to that but i mean we would do the same things that we would do for an android ios app to determine if it would be crashing you're going to run your instrumentation test you're going to run your unit test if those things pass then you're probably good to go so will it randomly crash on my app or and some other device or will my app randomly crash on some devices maybe run your tests you're probably okay the next one that i came up with was does it have all the necessary functionality that i would need to build a feature-rich app so an app with like a ton of features for example like the youtube app we have you know payments videos images accounts tons of stuff downloading stuff so this this question could also be rephrased like is there sufficient libraries or tooling to build a feature-rich app with kmm and again i would answer yes to that you know there's libraries like ktor for caching sq delight for or sorry ktor for network sq delay for shared caching uh coin for dependency injection kotlin daytime for date stuff serialization there's all kinds of great libraries out there for pretty much every issue that you would run run into because you know kotlin is used server side too so there's other kotlin specific libraries that are available to you so again the answer to this is yes i don't see why you wouldn't be able to build a feature rich app with any amount of features with kmm so if you've got any other of these sort of uh what do they mean questions when they ask why is kmm ready for production put them down below and ask them because these are just the ones that i came up with um i thought it was interesting just to think about though because i said i just asked myself i'm like is kmm ready for production i don't know what does that mean so if you've got any other questions put them down below and hopefully me or some other people will answer those questions so that's it boys and girls that is my deep dive into kotlin multi-platform mobile that's my experiences with it in the last uh you know month or so and i have to say this is the way that i'll be building apps for the foreseeable future this is definitely the thing that i will be pursuing aggressively whether it's building my courses building personal apps building my own apps that are going on the app store doing consulting anything i do is going to be i'm going to be recommending kmm kmm looks excellent it appears to be picking up speed there are some very talented people who are working on it over at jetbrains touch labs and i don't know a bunch of other places probably so kmm people kmm so what's next for me i'm going to be uh building a course i'm going to be building a kmm course it will probably be a paid course on my website what we're going to be doing is we're going to be rebuilding or we're going to be building from scratch the jetpack compose app or the the core the app that i built in the jetpack compose course the recipe app that accesses network data from the api that i built foodfork.ca we're going to be building that into a kmm project the reason i'm not building like a brand new fresh project like a new idea the reason i'm rebuilding a current one is because then you can clearly see uh the compare and the contrast like what is it like to build a kmm project versus a straight up android project it's gonna be almost identical and then how easily is it to integrate uh you know ios or swift ui onto that km project and build it so that's what we're gonna do i think it's gonna give you a great outlook on what a simple or fairly simple kmm app would look like and of course if you want to be notified when this course is ready or you want updates follow me on youtube go to my youtube channel codingwithmitch or the easiest and the best way is probably you know follow me on twitter that's a good one for sure let me just go to my twitter profile mitch underscore tapian pretty straightforward links are going to be down below and also become a go register on my website it's free if you want to register an account just go to codingwithmitch.com go to the login page click on register fill this information out pretty simple couple fields here and then you're going to get emails so click subscribe to newsletter i barely send out emails by the way people i haven't sent out an email in probably like a month and a half i'm not going to spam you they're very very selective the emails that i send out basically only when i create a brand new course or something cool or i'm doing a giveaway i gave away a pixel i don't know i gave away pic one of the pixel xls or something like that i gave that away like six months ago join the newsletter get the email i'll let you know when the course is ready you won't regret it you'll thank me actually that's definitely what you'll be doing you'll be saying thanks mitch thank you for telling me to subscribe to your newsletter because now i can build a kmm project alright that's all i got today people don't forget to like comment subscribe all that make sure to do that for the algorithm because otherwise my video doesn't get recommended to other people so turn that i think it's a great thumbs up turn into a blue thumbs up leave a comment it doesn't even have to be about what i talked about just say hey say hey man good video hey man good courses hey mitch you have a stupid haircut anything doesn't matter leave a comment thanks for watching and i will see you guys in the next one
Info
Channel: CodingWithMitch
Views: 60,497
Rating: 4.966207 out of 5
Keywords: jetpack compose, kotlin multiplatform, kotlin multiplatform mobile, kotlin multiplatform jetpack compose, kotlin multiplatform swiftui, is kotlin multiplatform ready for production?, is kotlin multiplatform mobile ready for production?, what is kotlin multiplatform, what is kotlin multiplatform mobile
Id: L8Xq15NTuCc
Channel Id: undefined
Length: 36min 3sec (2163 seconds)
Published: Tue May 04 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.