4 ms·
I used to maintain Detox for iOS when I was at Wix, from 2017 to 2021. We ended up dropping support for Expo for plenty of reasons, some technical, some "politi
by LeoNatan25 3y ago
I used to maintain Detox for iOS when I was at Wix, from 2017 to 2021. We ended up dropping support for Expo for plenty of reasons, some technical, some "political". The people reporting "issues" (more like asking questions) for their Expo apps, usually had very little technical understanding of any of the increasingly thick environment stack (the Expo layer, RN layer, UI framework layer, OS layer). They were basically web developers who were trying to emulate developing for the browser, with zero interest (and often, capacity) in learning any of the complexities of the aforementioned complex environment.
It was our experience the expo layer added a lot of complexity and many bugs, with very little ability of users to actually fix anything without "ejecting" their project away from that ecosystem. That was on top of the RN layer, which in itself was full of bugs. We would send users to report expo bugs to the expo team, and were first met by "just fix it on your end, you are detox!" type of comments from that silly community, and those that did report the issues, saw no reaction from the expo team, despite detox being one of the most popular testing frameworks in the RN world at the time (no idea about now, but back then, even Facebook was using detox to test RN itself).
At the end of the day, we decided the hassle was not worth the low quality user benefit, so we decided to drop support for Expo. It was one of the best bureaucratic decisions we ever made.
- DanielHB 3y agoExpo was really lackluster when I last worked with react native around 2018/2019. I hear it has gotten much, much better now but I haven't tried lately
- zwily 3y agoIt has. I built an app using Expo several years ago and recently had to update it. Upgrading expo was a pain (as it always is) but the changes and additions in the latest version made so many things easier. And with custom clients, you can do a lot more now than you could before without ejecting.
- jamonholmgren 3y agoIt's the best way to build React Native apps, with very few exceptions, these days. (I have been building RN apps of all types since it came out in 2015.)
- wsgeorge 3y ago> the increasingly thick environment stack (the Expo layer, RN layer, UI framework layer, OS layer). This is at the core of my difficulty with cross-platform frameworks for Android and iOS. Dealing with the first-party stack presents enough problems on its own. Adding more layers to that easily compounds the frustration involved in getting anything done.
- norman784 3y agoI learned a while ago that is not worth using an abstraction layer over the official tooling (whatever Apple and Google provides you), even for small apps I was building one for each platform (as one dev). Tried at the time Xamarin and PhoneGap, and bit later RN, each one has his quirks and things that works in one platform but not in other so in the end you end up building one app for each platform more or less, but with more bugs than the official ones.
- scop 3y agoI’ve come to the same conclusion. I began to build a very simple app about a month ago and as a Web Dev figured React Native would be the best tool. Having completed about 60% of the app, I’m going to trash the whole thing and restart with Swift/Kotlin. I’ve encountered too many “quirks” that end up burning a huge amount of time for what should be an inconsequential component.
- ramones13 3y agoYou might want to check out CapacitorJS - https://capacitorjs.com/ https://capacitorjs.com/ It’s more web than RN and depending on what you’re doing might not feel as native, but it’s pretty easy to make a solid app with it.
- samtheprogram 3y agoUsing Swift UI, or UIKit, has its own quirks. And then you need to shift mental gears with entirely different UI component paradigms. I find most people making this argument haven't worked full time with one or the other. If you're a larger company who can afford two teams/groups, or if you are working on something lower level like OpenGL or ML, it makes sense. Having done both for multiple years, I can't understand when people think it would be faster to build separate apps. It's not even remotely close. You're swapping out doing bug fixes, platform specifics like push notifications, the occasional separate UI implementation, and distribution twice with doing _everything_ twice.
- mpweiher 3y agoFor some bizarre reason I haven't figured out yet, it seems like the "cross platform" choice is always the worst one. So when people talk about cross-platform on the Mac, for example, it's always some JavaScript abomination, or Java, or Delphi (yes, seriously), or Go. How about going the other direction and getting Cocoa running somewhere else? GNUstep, Cocotron etc. Gosh, that would actually make sense, can't have that. Literally. In fact, one company did. Apportable. Google bought them and buried the tech. Hmm
- jameside 3y agoModern Expo is very different and in 2023, Expo has full support for custom native code and isn't a layer, so to speak. Ejecting is gone. React Native has also become much thinner in several ways. For instance, developers write Kotlin and Swift with the Expo Modules API and uses JSI (RN's "JavaScript Interface") to directly bind the native methods to Hermes JS methods. Relatedly, the developer demographic has grown and a lot more developers are adding Kotlin and Swift to their skill sets. They write JS and React most of the time while also writing custom native code when they need to. Most of the best Expo apps include custom native code. Test frameworks have also grown a lot. I suspect the issues with Detox were often from developers looking to use it with the Expo Go starter app that doesn't support custom native code. These days I hear a lot of positive things about Maestro as well and there was a nice talk on it at App.js Conf earlier this year: https://www.youtube.com/watch?v=uoCzBdFCoqc https://www.youtube.com/watch?v=uoCzBdFCoqc
- LeoNatan25 3y agoHi James, thank you for this comment. I'm glad to hear the tech and, more importantly, the community have improved. By "layer", I mean custom controls and animation toolkits that get bundled in an Expo-enabled project. Those are in addition to the RN-provided ones. It all adds to complexity.
- jameside 3y agoExpo Modules Core is the only module that is bundled in. It is a small runtime library that defines the Expo Modules API used by other modules, and adds about 150 KB to a production build of an app downloaded from the stores. A hello world iOS app made with Expo ended up being smaller than the same hello world app that used RN without Expo due to the Xcode settings. There are also no custom UI controls or animation libraries bundled with Expo. The Expo Go starter app includes a preset SDK, and when developers create a build for the app stores or a development build of their own app, only the libraries they use are included. IMO it would be a meaningful improvement for the react-native package to provide the minimal runtime needed, namely JSI, Hermes, Turbo Modules, Yoga, Fabric, and perhaps a few primitive view components like View, ScrollView, and Text. The package provides more than a library needs. Animations and gestures today are better served in my experience by modules outside of the react-native package, like Reanimated and Gesture Handler that use truly native gestures. React Navigation uses the system navigator UI and Expo Router adds file-based routing and universal links. Expo Image adds support for modern image formats like AVIF and WebP and uses mature, performant image libraries like Glide and SDWebImage. So there is definitely still work to be done that can improve quality and reduce complexity in RN.
- johncedric 3y agoActivate my iPhone 5s for iOS
- LeoNatan25 3y agoSorry, only simulators supported ;-)
- kudochien 3y agoThe limitation is not true nowadays. Expo works well with Detox and listed in Detox's showcase: https://wix.github.io/Detox/showcase https://wix.github.io/Detox/showcase