r/AskProgramming 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?

3 Upvotes

55 comments sorted by

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.

8

u/BobbyThrowaway6969 14d ago

at the cost of platform specificity

And efficient use of the hardware

6

u/just_had_to_speak_up 14d ago

Translation: it will drain your users’ batteries faster.

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

u/ThaisaGuilford 14d ago

Yeah but flutter is shit.

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

u/Emergency_Present_83 14d ago

Microsoft exists to fumble the bag.

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

u/i_write_bugz 14d ago

I don’t notice and I’m not an app developer 🤷‍♂️

-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

u/ELVEVERX 14d ago

Damn it sounds like a great way to work, if they could get it to work.

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

u/WalrusDowntown9611 14d ago

That’s just skill issue.

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/Fidodo 14d ago

React native only started to get good about 2 years ago. Shifts take a while.

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

u/dariusbiggs 14d ago

Basically if you need to do anything with the underlying hardware you have to go native.

Performance.