1 00:00:02,460 --> 00:00:06,610 I also don't want to hide that React Native is a fast moving target, 2 00:00:06,660 --> 00:00:10,010 we got new versions being published almost every month. 3 00:00:10,110 --> 00:00:15,480 Breaking changes do happen and of course, I'll do my very best to keep this course updated to let you 4 00:00:15,480 --> 00:00:21,210 know about changes and how to adjust your code but sometimes, you just have to go back to an app you 5 00:00:21,210 --> 00:00:26,610 built six months ago and you have to change something there because something changed in the latest 6 00:00:26,610 --> 00:00:28,170 version of React Native 7 00:00:28,170 --> 00:00:33,930 and in order to continue working on your app, you need to change something in the code which used to 8 00:00:33,930 --> 00:00:34,800 work before, 9 00:00:34,800 --> 00:00:35,850 that's normal, 10 00:00:35,850 --> 00:00:41,800 that will happen, not all the time, not every month but it will happen. Also in React Native, 11 00:00:41,820 --> 00:00:45,120 you typically have a high dependency on third-party packages. 12 00:00:45,120 --> 00:00:51,600 Now the good thing is when working with expo, that's only partly true because expo already itself is 13 00:00:51,600 --> 00:00:54,690 such a wrapper with a lot of cool features built in, 14 00:00:54,690 --> 00:01:00,060 therefore you have a high dependency on expo when working with that but you don't have to find dozens 15 00:01:00,060 --> 00:01:05,950 of other third-party packages to access the camera, to work with Bluetooth or anything like that. 16 00:01:06,030 --> 00:01:09,200 If you're building a bareboned React Native app, that would be different, 17 00:01:09,290 --> 00:01:14,060 there only a basic set of features is built right into React Native 18 00:01:14,100 --> 00:01:19,320 and for most things that you want to add to your native app, you would have to reach out to other community 19 00:01:19,320 --> 00:01:21,550 managed packages to make them work 20 00:01:21,570 --> 00:01:26,600 and even with expo, we'll need a couple of third-party packages to have everything we want. 21 00:01:26,700 --> 00:01:31,350 And that is something you have, you have that dependency and that of course means that if those packages 22 00:01:31,350 --> 00:01:37,300 change or aren't maintained anymore, you have to find alternatives or you have to update your code, 23 00:01:37,440 --> 00:01:44,400 so that's something you just also have to be aware of. And React Native simply also has some bugs, not 24 00:01:44,400 --> 00:01:45,360 crucial ones, 25 00:01:45,390 --> 00:01:51,270 you can build basically any app you want with React Native but sometimes, things just don't work as you 26 00:01:51,270 --> 00:01:56,360 would expect them to work and you need to get creative, find workarounds and so on 27 00:01:56,430 --> 00:02:02,640 and in this course I will also show you some of these strange things React Native has but in general, 28 00:02:02,730 --> 00:02:09,420 when building React Native apps, you have to be willing to stay updated, to use Google, to dive into issue 29 00:02:09,420 --> 00:02:15,690 discussions and to simply try things out. With expo you have a pretty smooth development experience 30 00:02:15,720 --> 00:02:22,770 but still, the road can be bumpy from time to time. Now that might all sound pretty bad, 31 00:02:22,800 --> 00:02:27,100 so shouldn't you learned React Native then? Well let's have a look at the alternatives. 32 00:02:27,220 --> 00:02:33,580 Of course one alternative always is that you build real native apps with the Android framework for Java 33 00:02:33,580 --> 00:02:37,710 or Kotlin or with Swift, ObjectiveC for iOS. 34 00:02:38,290 --> 00:02:43,180 You can do that but of course the downside is you have to learn these languages and the huge advantage 35 00:02:43,180 --> 00:02:49,330 of working in one project and sharing a lot of code will be totally lost. In React Native apps, 36 00:02:49,330 --> 00:02:54,460 sure, you will probably need to adjust your code to the platform you're running on from time to 37 00:02:54,460 --> 00:03:01,330 time but the vast majority of your codebase can be shared and can be reused without any adjustments. 38 00:03:01,330 --> 00:03:06,520 If you're using the native platform languages, then you definitely have to work in two totally different 39 00:03:06,520 --> 00:03:12,790 projects and you won't be able to reuse a lot of code. Alternative too is that you build a progressive 40 00:03:12,790 --> 00:03:13,210 web app, 41 00:03:13,240 --> 00:03:19,300 that's a normal web app that utilizes some features that make it look and feel like a mobile app but 42 00:03:19,300 --> 00:03:26,230 it's not distributed through the app stores and it relies on users using a browser that supports the 43 00:03:26,230 --> 00:03:30,550 features you're using and if that's not the case, your app doesn't run that well. 44 00:03:30,560 --> 00:03:38,790 The third alternative is that you use Ionic or a similar solution, Ionic is tool or a framework that 45 00:03:38,820 --> 00:03:44,790 allows you to build real native apps which you distribute through the app stores with web technologies. In 46 00:03:44,790 --> 00:03:50,550 the end, Ionic takes a normal web app and wraps it into a native app, so it doesn't compile anything, it 47 00:03:50,550 --> 00:03:53,700 just wraps it and that's a nice approach, 48 00:03:53,700 --> 00:03:59,320 I like Ionic actually and it can be perfect for a lot of apps but of course, a possible downside is that 49 00:03:59,340 --> 00:04:03,290 performance can be worse because you just have a wrapped web app, 50 00:04:03,330 --> 00:04:09,030 you have no compiled native app and that's something you do have with React Native of course and since 51 00:04:09,030 --> 00:04:15,060 we overall got tools and we can acquire knowledge that helps us overcome the challenges React Native sometimes 52 00:04:15,090 --> 00:04:22,080 poses, React Native is an awesome way of building native apps. You can share a code, you get great performance, 53 00:04:22,260 --> 00:04:26,150 you can distribute it through the app stores, that's pretty nice. 54 00:04:26,280 --> 00:04:32,160 Now one side note, you also got alternatives like Flutter or Native Script, those alternatives follow 55 00:04:32,160 --> 00:04:37,770 a similar approach as React Native does, you get a compiled app there, they simply use different programming 56 00:04:37,770 --> 00:04:43,440 languages, different frameworks and attached, you'll find a link to a comparison video where I compare all 57 00:04:43,440 --> 00:04:48,690 these alternatives in case you're interested in a bit of a deeper dive into that topic 58 00:04:48,720 --> 00:04:49,050 there.