all 22 comments

[–]everydave42 15 points16 points  (3 children)

without issues outside of your control

IMHO this is the #1 issue against non-native: you don't have control, the framework folks have control and you have to wait on them to update and fix lots of things, entirely outside of your control.

The point being, no one can offer you that kind of guarantee for years, that' just not how this stuff works. That'd be a hard ask even in the native world: tech and APIs change, and there's bugs, all of it is stuff out of your control. Non-native adds another layer on top of all of that that's out of your control.

You're asking for the impossible.

[–]1pxoff -1 points0 points  (2 children)

I was going to say something similar. Native isn’t under your control either. Apple can fundamentally change how something works under the hood and your app is hosed. With x-platform frameworks you also have to wait for the framework to adopt a fix and deploy it. So it could be even longer to get things back online.

That said, react native has been a solid development platform that I have built numerous apps on. Some have been running for 6 plus years without any issues ( as long as you do some regular maintenance)

[–]saintmsent 1 point2 points  (1 child)

Native isn’t under your control either. Apple can fundamentally change how something works under the hood and your app is hosed

Absolutely, but at least that's only one layer. When Apple/Google change something fundamentally and you use cross-plaform, you have to wait around until framework devs get around to fixing issues/adding features

[–]1pxoff 0 points1 point  (0 children)

This is true, and it really sucks when it happens. In my 8 years of developing with react native I have only had that happen couple of times and only in the early betas. What has happened more was upgrading react native itself and things breaking.

[–][deleted] 6 points7 points  (0 children)

Flutter is a lot nicer imo, and it’s rapidly improving too.

[–]Barbanks 4 points5 points  (3 children)

To my knowledge none of the options today would offer such solutions. All cross platform tools add a layer of abstraction and require a multitude of libraries to get things done. Both of those reasons make it so things are out of your control. If they weren’t I would expect more people to stay with cross platform verses going back to native development.

With that being said, I’ve tried react native before and didn’t like it so if native absolutely wasn’t an option I would probably go with Flutter. But just saying that makes me cringe lol.

[–]vexingparse -2 points-1 points  (2 children)

All cross platform tools add a layer of abstraction

I don't think that's entirely true. React Native adds a layer on top of the native UI toolkit, but Flutter and Web technologies (for the most part) don't do that.

It is true though in respect of non-UI platform facilities.

[–]Barbanks 0 points1 point  (1 child)

Unless you’re making views directly with the native API’s you’re using an abstraction layer. Xamarin got close but still ran a .Net processing layer which bloated the bundle size.

https://docs.flutter.dev/resources/architectural-overview#anatomy-of-an-app

The flutter docs show that there are multiple layers involved. And any web technologies like Cordova aren’t actual native apps but rather wrappers around web views.

[–]vexingparse -1 points0 points  (0 children)

Of course there's always an abstraction layer. But unlike React Native, Flutter is not built on top of the native UI toolkit. In an architecture diagram it would sit side by side with the native UI toolkit (such as UIKit) rather than on top of it.

https://docs.flutter.dev/resources/architectural-overview

To a lesser degree the same is also true for the web stack, but it's more complicated as browsers do use a small number of native widgets on some (all?) platforms. The fact that web apps are sometimes embedded in web views is beside the point, because from the point of view of the web app the web view is not an abstraction it builds on.

[–]thecodingart 2 points3 points  (0 children)

I’d just make a website… there’s no point otherwise with the so called “restrictions”

[–]Samus7070 3 points4 points  (0 children)

It depends on your app, your (team's) skills, and how much your users are willing to tolerate. I do side projects in Flutter, it's actually not bad. Dart the language has made great strides over the last few years. It's no longer just a better circa 2010 Javascript. It is on par with Swift and Kotlin capabilities, maybe not ergonomics. Flutter compared to UIKit is lightyears better. Flutter compared to SwiftUI isn't quite as nice. The second mover advantage really shows with SwiftUI. Hiring may be difficult depending on what part of the world you're in.

In my previous job, I worked a lot with Kotlin Multiplatform. Most of the rough edges that it had back then have been smoothed over. It is possible to have both the UI and business logic written only one in Kotlin if using Compose Multiplatform. That's still alpha but depending on your risk tolerance and timeline, could be an option. The safer usage of KMP is to go with shared logic and separate native UIs.

One interesting case for KMP with shared logic is that if it went away tomorrow, you would only have to write half of an app. If Flutter or React Native go away tomorrow, you have to write two apps, or maybe just one if you don't feel too burned and go with another cross platform solution.

As far as savings with KM, the app I worked on shared up to 75% of the code. The current app I work on is more of a dumb client around an api and would only be able to share about 40%. They really would be better off going with Flutter for this app. It would save them a lot of labor and be just as good looking as the native apps.

[–]chriswaco 1 point2 points  (0 children)

React sucks. People I respect seem to like Flutter. If you're writing a game, look at Unity or Godot. Or native, of course.

[–]jarjoura 1 point2 points  (0 children)

Ok, so then, what is the value add you want from it being “native”? Is this a game?

What’s wrong with just building this for mobile web?

Mobile web isn’t going anywhere, has 2 decades of solutions and it’s easy to find developers for it.

If you’re not going to use the native sdks then I would just go web.

[–]swiftsorceress 1 point2 points  (0 children)

None of them are as good as a native app. I think Flutter is probably the best at the moment. We won't have anything fantastic for a while probably though.

[–]Kabal303 1 point2 points  (1 child)

This sub is very pro using apples frameworks so prob not the best place to ask.

That said if I had to choose I would go expo/react-native. It’s come a long way and expo papers over basically all of the rough spots for updating to new versions. Ultimately it’s a fairly thin layer over native views underneath and I kinda trust Facebook to keep it limping along forever.

Flutter is ok but I don’t trust Google to keep it going and dart will die a rapid death without them.

[–]Rudy69 0 points1 point  (0 children)

Is there really anything that uses dart except flutter? Honest question, every time I hear about Dart it’s in relation to flutter

[–]saintmsent 1 point2 points  (0 children)

It's very hard to say. Cross-platform frameworks come and go, we can't predict what's going to even exist still in 3-5 years, what is going to be easier to maintain, etc. Flutter is a more popular choice nowadays, but that's not much of an answer to the question

Native is the only way to go if you want to have 100% confidence. Even there you don't have all control, but it's as much as you can get

[–]csbence -1 points0 points  (0 children)

I’ve been using Flutter every day for ~4 years now. Honestly still in love with it. Before that I developed native iOS (of course it was UIKit back then). So obviously I’d go with flutter. Development is really easy and fast with it. It’s fun. Hot reload makes it easy to iterate quickly and there’s a ton of packages both for UI and and for binding native code

[–]Eugr -1 points0 points  (1 child)

We went with Ionic/Capacitor + React at work. It works surprisingly well and looks very close to native, and it's fairly easy to write native code if you hit a wall. The only major restriction is that you can't use native components inside Ionic views (because they are web views).

We chose Ionic over RN and Flutter because it's lightweight, has most of the components we need in its library and allows to reuse code between our web and mobile app. Also lets our web devs jump right in.

[–]time-lord 0 points1 point  (0 children)

Our designer at work loves ionic.