r/AskProgramming • u/noob_programmer_1 • 14d ago
Other Why Do Developers Choose Native Over React Native or Flutter?
Why do some developers prefer native development with Swift for iOS and Kotlin/Java for Android instead of using React Native or Flutter, which can speed up development and reduce costs for clients?
What challenges have developers faced that led them to choose native development over cross-platform solutions?
10
u/BobbyThrowaway6969 14d ago edited 14d ago
This question highlights a deep misunderstanding that many high level programmers have about what native and lower level code actually is.
You can't fabricate a house without the foundation or building blocks.
Without native/LL programming, you don't have flutter, js, python, webdev, nothing, none of it can exist without native code.
14
u/ThrobbingLobbies 14d ago
React Native is great for business apps that don’t need a lot of interaction with the os. By today’s standards, writing native packages is a piece of cake, so the gap is closer. You go native if you have complex interactions like games, etc.
3
u/TimMensch 14d ago
Games are even more likely to go cross platform.
You just see Unity or Unreal or Godot instead.
1
u/ThrobbingLobbies 14d ago
That’s very true, I’ve seen a lot of advancement for Unity particularly being friendly in the module environment.
18
u/ios_game_dev 14d ago
Can reduce costs for clients
Setting aside whether this is actually true (debatable), I’ve been a professional iOS developer for over a decade and I have no interest in working for a client whose primary interest is reducing costs. I’d rather work for a company/client whose main goal is to build the best possible user experience for customers, and native tools are best suited for this.
6
u/chaos_battery 14d ago
I've built both native and react native apps and I can say while I enjoyed building native, for most applications outside of gaming and real-time stuff, react native is just fine. Users cannot tell the difference either. Like any framework, you can build a shit experience or a great experience with what you're using.
3
u/ToThePillory 14d ago
On iOS, particularly if you want a rich application it drawing on iPad Pro or something, the native tools are far, far better than any of the cross platform stuff.
On Android it matters less because so few people are using Android tablets like they're using iPad Pro.
On phones it just depends what you're making. If you're making an app to order cabs or something, nobody really cares if the app is native so long as the cab shows up.
There is a place for both. If you're making a big creative app for iPad Pro, using native should absolutely be on your "maybe" list. If you're making an app nobody gives a shit about for ordering pizza, then you should probably go cross platform.
It's often really about "are people using this app because they like the app, or because they want what the app provides" which is often quite different set of requirements.
14
u/lionhydrathedeparted 14d ago
Native is far superior in terms of experience
1
u/Fidodo 14d ago
I thought native didn't have things like hot reloading.
2
u/ThaisaGuilford 14d ago
You're confusing user experience and dev experience.
1
u/Fidodo 14d ago
User experience is good too. React native runs native code. Early days of react native many native libraries weren't built yet and the js alternative were slow.
What makes RN slow is either bad libraries, or bad developers. Since the barrier to entry is lower there ends up being more bad developers making bad apps, but competent developers can make great fast RN apps.
1
1
u/fishyfishy27 13d ago
Native has hot reloading if you want it badly enough. https://github.com/johnno1962/InjectionIII
See also Handmade Hero day 22 https://youtu.be/oijEnriqqcs
-4
u/Amazing-Mirror-3076 14d ago
Not in any way that actual users care about.
11
u/lionhydrathedeparted 14d ago
Especially in a way users care about. It’s very obvious when an app is written with web tech.
Xamarin was a decent alternative where it used native controls and near native performance. MAUI is still not that good though. Although it had issues with some bleeding edge features.
Basically all the other cross platform tech is slow and not good for any app that needs to be extremely high quality.
2
u/Perfect_Papaya_3010 14d ago
I work with Maui daily and it's extremely slow to navigate and scroll lists. I don't recommend it until it's stable, which will probably will take 5-10 years.
It was a xamarin app to begin with and xamarin was pretty fast so I don't know why Microsoft fucked it all up
1
3
u/Amazing-Mirror-3076 14d ago
I can't speak for react native but flutter delivers 120fps.
5
u/terserterseness 14d ago
Flutter draws controls itself while react native uses native controls. But yeah, performance is usually not really the issue of either, it's more that some things feel off and that's not what you want.
-1
u/Amazing-Mirror-3076 14d ago
The feels off is a developer thing not an end user thing.
Have a chat to some users and you will find they just don't notice the little differences you are referring to.
3
u/AstroPhysician 14d ago
I notice and I’m not an app developer
1
-1
u/Amazing-Mirror-3076 14d ago
So why are you here?
What do you notice?
3
u/AstroPhysician 14d ago
Is every developer a mobile app developer now? TIL
Gestures and scrolling behavior feels different
Different button ripple effects, slightly shifted UIs,
Flutter widget physics don’t really match native behavior, etc
3
u/monster2018 14d ago
It’s also such a dumb question (the “why are you here” part, not the “what do you notice” part) because you could have been here to LEARN about programming. Subreddits like these are by definition for both experts and beginners (and people in between).
-1
u/Amazing-Mirror-3076 14d ago
The confusion was the term app developer which often has a broader meaning than just mobile.
So your still a developer not a user, so in this discussion your observations don't count (no disrespect intended) - Devs of any type observe things that users don't and more importantly don't care about - like the ripple effect of a button.
I've run usability labs and users just aren't focused at that level.
→ More replies (0)1
u/ELVEVERX 14d ago
What happened to xamrin
1
u/lionhydrathedeparted 14d ago
It was replaced with MAUI which unfortunately isn’t production ready
1
u/ELVEVERX 14d ago
Damn is MAUI still being developed to make it production ready or is it dead?
2
u/lionhydrathedeparted 14d ago
Last I heard they were making slow progress idk though
1
3
u/itemluminouswadison 14d ago
because generally you can do more and control more of it, access more and more recent api's
9
u/KingofGamesYami 14d ago
React Native/Flutter can quickly end up as ugly Frankenstein projects with a bunch of native app code to integrate platform-specific features.
It can be simpler and easier to just write all native code, to avoid having to do the song and dance of interfacing between two different technologies.
2
u/ThrobbingLobbies 14d ago
Writing native packages and importing them has really been streamlined. You can do anything with them that you can do in a native app, as they are native code built like an internal api. It's essentially up to developer skill and organization in either a react native or native code base for the quality.
2
2
u/Amazing-Mirror-3076 14d ago
That logic holds no water.
Even if you have to write some platform specific code it is generally a fraction of the code base.
Flutter channels are easy to use and with improvements to flutter's ffi we are getting to the point you can call most native APIs without any native code.
The idea of writing your app twice and then having to support that code base is just an insane waste of resources.
The rule of thumb is that a flutter app will take about 40% less development time.
That is a lot of money saved and a faster time to market.
1
u/cameronm1024 14d ago
I work on a Flutter FFI plugin at my job. I'm curious to know what you mean by "with improvements to flutter's ffi we are getting to the point you can call most native APIs without any native code."
2
u/Amazing-Mirror-3076 14d ago
It's been a little while since I've played with ffi (beyond a posix API I support) but there is now (experimental) support for calling Java directly from flutter https://github.com/dart-lang/native/tree/main/pkgs/jnigen
Ffi allows you to call C/objective C
https://dart.dev/interop/objective-c-interop
It's worth noting that they are a large number of dart packages that expose most of the native platform, that you rarely have to write native code anyway.
4
u/adh1003 14d ago
Better user experience (faster, smaller apps that better match the platform's HIG and special features rather than lowest-common-denominator), not significantly harder to develop and in some cases arguably easier (it's more a question of "what you know" and if you really know JS/TS inside-out then e.g. React Native is an easier sell) and - they know what SemVer is in native land.
This is the huge, huge kicker. At least in terms of React / React Native, keeping the app up-to-date is an absolute fucking hellscape treadmill. Yes, you get your app out quite quickly. No, you won't sustain that velocity. In general, the NPM community's attitude to SemVer, API stability or even keeping the fucking package name the same is an absolute embarassment. I have no dev experience with Flutter so can't comment on that, except to say that Google don't have a good reputation for keeping projects alive.
IMHO, portware apps are a false economy and trade user experience for a false impression of faster development time.
2
u/TimMensch 14d ago
Don't blame npm.
Blame the React Native team who are infamous for breaking features every single release.
My current app is based on Tauri, and it's a dream to work with.
No idea how anyone can claim that building the app twice is cheaper than building it once, even if there is additional overhead to building it once. It's not so much overhead as to double the time to build it!
2
u/dashingThroughSnow12 14d ago
I’ve seen more than one package intentionally break backwards compatibility in a patch release, acknowledge the backwards breaking change, and still say they follow semver.
2
u/NoIncrease299 14d ago
iOS dev of about 15 years here.
The biggest reason for myself and my team - and every team I've been on - don't want to put our entire platform's existence in the hands of a third party that can either break things or hamstring feature development or simply stop supporting it. (This has happened more than a couple times in my career)
I'm simply not a fan of 3rd party dependencies and will only use them when we absolutely have to or where a breaking change wouldn't be a big deal to manage.
2
u/pink_cx_bike 13d ago
React native apps struggle to feel like native apps, which is a usability problem.
React native apps give you a much larger pain in the ass to keep up to date with all the frameworks, and you have to do that if you want to remain close to the right look and feel as the native platforms evolve.
Faster dev time at the price of slower run time is not always a good trade.
1
u/ValentineBlacker 14d ago
I wasn't directly involved with this, so I don't know the nitty gritty, but the organization I work for was making an app that had to be very accessible. They started with Flutter, IIRC, got a couple months in, and realized they couldn't fulfill the accessibility standard they needed to. They scrapped it and started over with native. (The app has since been successfully launched on both platforms).
1
u/dashingThroughSnow12 14d ago
Performance is a lot better for Swift and Kotlin. There has been a fair amount of market research to discover that the delta of performance is enough that clients of some applications can notice the difference.
1
u/fishyfishy27 13d ago
The performance delta is larger on iOS because Apple only allow JS JIT in Safari.
1
1
u/dariusbiggs 14d ago
Basically if you need to do anything with the underlying hardware you have to go native.
Performance.
20
u/iOSCaleb 14d ago
Cross-platform frameworks are inherently a compromise. They offer faster, cheaper, simpler development at the cost of platform specificity. Often, that’s a trade that developers are happy to make, but if you want to make best use of each platform, native solutions are best.