No, I would never use Expo for a serious project. I imagine what ends up happening in most projects is they reach a point where they have to ultimately eject the app (e.g. needing a native module) which sounds very painful.
The majority of the apps I've wrote have definitely reached that point, for the individual benefits expo provide (e.g. code push) I've considered trying out using just expo kit but I'd rather just uses a tool specifically for that purpose. Above all, I always like to reduce the level of magic in any application, mobile or not.
Regarding "What package do you recommend for UX", I guess it really depends what you mean. But hopefully this gives you everything you need to know:
For navigation I use react-native-navigation, can't recommend this enough as it adds a massive difference in fidelity vs using JavaScript based lib like react-navigation.
For interactive elements (drag drop, sliders, parallax etc) I use a forked version of react-native-interactable.
For custom vector animations e.g. button icons I use Lottie.
I do not use a framework for developing styles/grid layouts (e.g. glamourous), I've got my own base-layout of styles and components.
is such a radical decision that I didn't expect to hear from someone in your experience, knowing that Expo is greatly supported by the makers for React Native.
I know this thread has aged. But I felt a need to respond in particular to this comment.
In my experience, Kyle's response is by far the norm among industry professionals I interact with. It's easy to confirm this. Simply post a comment on the Discord channel Reactiflux #react-native that states, "Expo should be the go-to choice for serious react-native projects. Discuss." Then wait for the comments to roll in.
This is true even in 2023, I recently had to eject from a pretty complicated app and waste about a week to get everything working as is in the bare workflow.
A lot of them were festival apps, they totalled around 200k downloads, not the most useful app but had a large, temporary influx of users. Around 5 of them achieved top 10 in the iOS music category.
On the other hand, one of the more useful ones of mine is Patient View, this probably the proudest points as a developer as I could literally see it helping people with people's illnesses on their day to day life facebook.com/patientview/posts/207....
I've developed quite a few apps for startups too, definitely helps out people with tight budgets who can't afford two native developers and a website developer.
Hey kyle, that's wonderful.
I have a question for you please.
I see you use rnn just like me so how do you tackle showing perticular screen after opening app from notification.
E.g user received a notification message in a chat app As app is killed. Now user taps on the notification and app opens. Now how do you redirect to perticular chat? I tried with handleDeepLink but its slow.
Cool :) I just moved a big project to it, I don't feel like it's perfect yet but still a big improvement over v1. I actually don't understand why so many people are happy with JS based navigation like react-navigation.
Hey Kyle, but could you please point out how you tackle this problem with opening app on the specific screen (using RNN v2) after clicking on push notification in tray? What package do you use for handling push notifications?
Hey Kyle, but could you please point out how you deal with opening app on specific screen after pressing push notification from tray (using rnn v2)? What package do you use for handling push notifications in conjunction with rnn v2? maybe you could point out to some great examples?
What do you think about the fluidity of react-native apps ?
So far, I've seen apps made by Chinese e-commerce giants like Alibaba's Taobao and Jindong, their apps requires lots of resources and are all very slow even on last end Android devices.
I've also seen some startup using it for chat app and it's simply become unusable after a while because all the memory leaks.
Do you think these are just poorly made app or react-native is just not ready to replace native development ?
Which app would you recommend to check out in order to see how powerful this framework can be ?
The only case I've seen that can be tricky to keep performant at the moment is when you're doing CPU heavy tasks whilst listing out uncompressed images >2mb. Memory consumption of images this size do seem to be a tricky problem, though libs like react-native-fast-image aim to solve this sort of thing.
I'd say almost certainly they were developed badly, there's no reason now why you couldn't make apps indistinguishable from native. My top tip for this is to move away from JS based navigation libraries (e.g. react-navigation), that's where you see a lot of the performance gains.
Performance wise the Patient View app I made shows this off, I sync and encrypt thousands of records and chart them out whilst keeping everything 60fps.
1 - Upgrading projects from very early versions of React Native. This has been, at times, an absolute nightmare (mainly iOS)! Especially when your project relies on several libs that require native changes. In the end, it was often easiest to create a new react native project from scratch and manually link libraries one by one.
Thankfully, this is rarely an issue now as it has matured. Having said that, I think it's really important to stay on top of React Native versions if your project has longevity.
2 - I had to integrate a react native app to read sensors for a car HUD, no simple way of overcoming this I just had to learn Objective C to write a React Native Bridge. Getting comfortable doing this is really valuable if you run into projects that require specific native functionality.
3 - Once, I hit an error which I could only replicate at the point of uploading a react native app, it would error out with "You must supply a CFBundleIdentifier for this request". This had me banging my head against my desk for a few days. In the end, it was something simple like the way I was creating my release scheme in xcode.
How and what do you recommend developers who have never written native code to go about learning and implementing native modules? Are there any specific courses or just start with any iOS/Android courses found online which don't relate to react native ?
I feel like it’s actually more useful to learn objc if the purpose is purely for react native. The reason I say this is a lot of the big native modules for rn are written in it, rarely came across swift implementations.
Just a coder and a dad. I love my family and I love to code!!!! started coding at 11, so I have 25 years under my belt. Still love learning about it every day. Black lives matter!
I'm working on my second app now, but this will be the first one I release. My biggest fear going in to this is not building that app, but the red tape of getting it published. With that being said, my questions are.
What should I be prepared for when going to publish my app?
What can I do to help avoid headaches during the process?
How hard much harder is it, to publish both Android and IOS, vs just IOS?
How hard much harder is it, to publish both Android and IOS, vs just IOS?
To get the last question out of the way, I'd say if you face any red tape it's almost certainly going to be on iOS side. Also the time bottleneck is going to be iOS side too, publishing can take 1-2 days but sometimes more.
What should I be prepared for when publishing my app?
I can't give you a simple one sized fits all answer here, but I would say that as long as you're not doing something outrageous you'll probably be ok. Best thing I can do is list some of the common scenarios I've found that might catch you out:
If you're using media that's subject to copyright you may need to prove you have rights to use it (we had to prove we had rights from opta for developing dugout FC)
If you're using chat (particularly anonymous), you'll need a way for users to report people and block people.
If you're developing an app for a client who has a registered organisation you need to make them register their own iTunes connect account with their iban, don't try to use your own.
Your app needs to have a functional use and can't be purely informational.
Your app needs to be useful in someway shape or form for anyone that could come across it, not just specific users (e.g. invitation only)
If you're attempting to white label an app, iOS state there needs to be a functional difference and not just informational.
With the above being said it literally depends sometimes on who views it.
What can I do to help avoid headaches during the process?
Put the app through the review process early for iOS, if you check the option for manual release you could just leave it there and keep developing.
Get all of your metadata early. There are tools for generating all sized icons, take screenshots of the app in the biggest iPad and iphone, you'll need these to submit, iTunes connect can now auto resize to smaller devices.
Just a coder and a dad. I love my family and I love to code!!!! started coding at 11, so I have 25 years under my belt. Still love learning about it every day. Black lives matter!
I have TV-screen where we simply run our web-app on react. I have found out that fps starts slowly go down after ~10-15 minutes. It can loose 5-7fps per hour. App starts with 58fps and goes down to 52fps in one hour.
I had a test where I have webpack + App which renders empty div. This simple app starts to loose fps in 10 minutes after launch.
Is react suitable for apps which suppose to run without clicks and refreshes for hours? (is it problem of my app or the problem of react? Is there anything what could help me?
My backup plan is to refresh the page every hour, but I am looking for a better solution.
Hey Julia, although this is more of a react than react native question I’ll see if I can help point you in the right direction. This definitely seems quite unusual and isn’t standard for react to see this.
To me it sounds like some form of leak, e.g registering event listeners that don’t get unassigned, or some recursive hell. Did you try compiling your app in production mode and running the output with a simple http-server? Also, have you tried running in chrome and inspecting memory and cpu usage?
I have tests not only on dev but also on production of other product, which has the same results. FPS slowly goes down in some time.
This is why I raised the question if react suits for such products.
Probably, there is a problem in a set-up somewhere and react is not involved in the problem at all.
I think I've got a post somewhere in GitHub saying this is the biggest pain point at the moment with core React Native, and I posted that in 2017 github.com/facebook/react-native/i....
I just use a combination of the keyboard avoiding view and react-native-keyboard-aware-scroll-view, I've always been able to achieve what I want but it's always fiddly.
I have great experience in IT over 12 years: front / back - ends, mobile, system administration and deployment cycle. I implement effective and great software products.
I have great experience in IT over 12 years: front / back - ends, mobile, system administration and deployment cycle. I implement effective and great software products.
Top comments (164)
What do you think about start app using expo? Is better start app with react-native Cli?
What package do you recommend for UX?
No, I would never use Expo for a serious project. I imagine what ends up happening in most projects is they reach a point where they have to ultimately eject the app (e.g. needing a native module) which sounds very painful.
The majority of the apps I've wrote have definitely reached that point, for the individual benefits expo provide (e.g. code push) I've considered trying out using just expo kit but I'd rather just uses a tool specifically for that purpose. Above all, I always like to reduce the level of magic in any application, mobile or not.
Regarding "What package do you recommend for UX", I guess it really depends what you mean. But hopefully this gives you everything you need to know:
"I would never use Expo for a serious project"
is such a radical decision that I didn't expect to hear from someone in your experience, knowing that Expo is greatly supported by the makers for React Native.
I know this thread has aged. But I felt a need to respond in particular to this comment.
In my experience, Kyle's response is by far the norm among industry professionals I interact with. It's easy to confirm this. Simply post a comment on the Discord channel Reactiflux #react-native that states, "Expo should be the go-to choice for serious react-native projects. Discuss." Then wait for the comments to roll in.
lol! If I could like this comment twice I would.
This thread aged like crazy but this question could be relevant.
We know your thoughts regarding Expo Managed, but what about Expo Bare Workflow?
I'm very grateful for your answer, this is very helpful !! 😊
I use always expo because I'm starting programming in RN, but I think I will start starting project with react-native-cli.
This is true even in 2023, I recently had to eject from a pretty complicated app and waste about a week to get everything working as is in the bare workflow.
This is a really good question, in a meeting at the moment but will definitely respond to this!
They range quite drastically.
A lot of them were festival apps, they totalled around 200k downloads, not the most useful app but had a large, temporary influx of users. Around 5 of them achieved top 10 in the iOS music category.
On the other hand, one of the more useful ones of mine is Patient View, this probably the proudest points as a developer as I could literally see it helping people with people's illnesses on their day to day life
facebook.com/patientview/posts/207....
I've developed quite a few apps for startups too, definitely helps out people with tight budgets who can't afford two native developers and a website developer.
Hey kyle, that's wonderful.
I have a question for you please.
I see you use rnn just like me so how do you tackle showing perticular screen after opening app from notification.
E.g user received a notification message in a chat app As app is killed. Now user taps on the notification and app opens. Now how do you redirect to perticular chat? I tried with handleDeepLink but its slow.
If you haven't moved to RNN v2 by now, I'd recommend it ;)
Yes, i did move to RNN v2.
Thanks
Cool :) I just moved a big project to it, I don't feel like it's perfect yet but still a big improvement over v1. I actually don't understand why so many people are happy with JS based navigation like react-navigation.
Hey Kyle, but could you please point out how you tackle this problem with opening app on the specific screen (using RNN v2) after clicking on push notification in tray? What package do you use for handling push notifications?
Hey Kyle, but could you please point out how you deal with opening app on specific screen after pressing push notification from tray (using rnn v2)? What package do you use for handling push notifications in conjunction with rnn v2? maybe you could point out to some great examples?
I solved this problem.. If you wish to know ? Ping me
Hey Faiz, were you able to solve this issue? could you please elaborate on what package you used for handling push notifications?
What do you think about the fluidity of react-native apps ?
So far, I've seen apps made by Chinese e-commerce giants like Alibaba's Taobao and Jindong, their apps requires lots of resources and are all very slow even on last end Android devices.
I've also seen some startup using it for chat app and it's simply become unusable after a while because all the memory leaks.
Do you think these are just poorly made app or react-native is just not ready to replace native development ?
Which app would you recommend to check out in order to see how powerful this framework can be ?
The only case I've seen that can be tricky to keep performant at the moment is when you're doing CPU heavy tasks whilst listing out uncompressed images >2mb. Memory consumption of images this size do seem to be a tricky problem, though libs like react-native-fast-image aim to solve this sort of thing.
I'd say almost certainly they were developed badly, there's no reason now why you couldn't make apps indistinguishable from native. My top tip for this is to move away from JS based navigation libraries (e.g. react-navigation), that's where you see a lot of the performance gains.
Performance wise the Patient View app I made shows this off, I sync and encrypt thousands of records and chart them out whilst keeping everything 60fps.
I see, thanks for the answer and cheers for the 100 apps, that's a hell of a pace :)
How did you do the encrypting/decrypting? Pure JS libs tend to be poor performance wise. Anything native you used?
What are the most 3 troublesome issues with React Native and how did you overcome?
1 - Upgrading projects from very early versions of React Native. This has been, at times, an absolute nightmare (mainly iOS)! Especially when your project relies on several libs that require native changes. In the end, it was often easiest to create a new react native project from scratch and manually link libraries one by one.
Thankfully, this is rarely an issue now as it has matured. Having said that, I think it's really important to stay on top of React Native versions if your project has longevity.
2 - I had to integrate a react native app to read sensors for a car HUD, no simple way of overcoming this I just had to learn Objective C to write a React Native Bridge. Getting comfortable doing this is really valuable if you run into projects that require specific native functionality.
3 - Once, I hit an error which I could only replicate at the point of uploading a react native app, it would error out with "You must supply a CFBundleIdentifier for this request". This had me banging my head against my desk for a few days. In the end, it was something simple like the way I was creating my release scheme in xcode.
From point 2:
How and what do you recommend developers who have never written native code to go about learning and implementing native modules? Are there any specific courses or just start with any iOS/Android courses found online which don't relate to react native ?
on #2 you said that you have to learn Obj-C.
Is is still worth it to learn Obj-C or go straight with Swift if we need to write native modules for our RN project?
I feel like it’s actually more useful to learn objc if the purpose is purely for react native. The reason I say this is a lot of the big native modules for rn are written in it, rarely came across swift implementations.
Thank you Kyle!
I'm working on my second app now, but this will be the first one I release. My biggest fear going in to this is not building that app, but the red tape of getting it published. With that being said, my questions are.
Good question and congrats :).
How hard much harder is it, to publish both Android and IOS, vs just IOS?
To get the last question out of the way, I'd say if you face any red tape it's almost certainly going to be on iOS side. Also the time bottleneck is going to be iOS side too, publishing can take 1-2 days but sometimes more.
What should I be prepared for when publishing my app?
I can't give you a simple one sized fits all answer here, but I would say that as long as you're not doing something outrageous you'll probably be ok. Best thing I can do is list some of the common scenarios I've found that might catch you out:
With the above being said it literally depends sometimes on who views it.
What can I do to help avoid headaches during the process?
You rock and that was greatly informative. Thank you so much.
That's alright, enjoying all these questions!
Hi Kyle,
I have TV-screen where we simply run our web-app on react. I have found out that fps starts slowly go down after ~10-15 minutes. It can loose 5-7fps per hour. App starts with 58fps and goes down to 52fps in one hour.
I had a test where I have webpack + App which renders empty div. This simple app starts to loose fps in 10 minutes after launch.
Is react suitable for apps which suppose to run without clicks and refreshes for hours? (is it problem of my app or the problem of react? Is there anything what could help me?
My backup plan is to refresh the page every hour, but I am looking for a better solution.
BR,
Julia
Hey Julia, although this is more of a react than react native question I’ll see if I can help point you in the right direction. This definitely seems quite unusual and isn’t standard for react to see this.
To me it sounds like some form of leak, e.g registering event listeners that don’t get unassigned, or some recursive hell. Did you try compiling your app in production mode and running the output with a simple http-server? Also, have you tried running in chrome and inspecting memory and cpu usage?
I have tests not only on dev but also on production of other product, which has the same results. FPS slowly goes down in some time.
This is why I raised the question if react suits for such products.
Probably, there is a problem in a set-up somewhere and react is not involved in the problem at all.
Ok, I'll keep in mind... Thanks...
No problem! :)
How do you handle Keyboard hiding inputs ?
It's a bloody pain!
I think I've got a post somewhere in GitHub saying this is the biggest pain point at the moment with core React Native, and I posted that in 2017 github.com/facebook/react-native/i....
I just use a combination of the keyboard avoiding view and react-native-keyboard-aware-scroll-view, I've always been able to achieve what I want but it's always fiddly.
Emotions:
Sounds fantastik! This is your glory day, horray!
Each 10th day – new app!
I would like to give you 100 hundred copy-pasted emoji beer.
Question:
What is percentage of bridging to native modules?
Low, less than 10% maybe, but I've worked on some weird projects. There's so many repos now on GitHub when comparing to 2015.
Here are the times I've had to delve into native modules.
Was anything except Keyboard Extension on iOS? For example connection ABAddressBook written on ObjectiveC.
Interesting your integration approach with CoreML for example.
All the above required me to write ObjC. The HUD app in particular required me to bridge a pretty beefy SDK that was pretty closed off to the public.
I haven't integrated with core ml, I do want to play around with using tensorflow and React Native at some point.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.