Hacker News new | past | comments | ask | show | jobs | submit login

IMO, every attempt thus far has approached cross platform entirely the wrong way. They’re all way too focused on providing deeply custom UI. I believe that it may better to instead abstract app navigation as its own separate thing, making it a setting in a config file (e.g. tabbed, hamburger, split-pane tabbed, etc) and restricting UI coding to individual screens, which would have style hinting abilities and could be built via any number of platform agnostic (and perhaps language agnostic) ways. All this would then compile down to native UIKit, Android SDK, UWP, AppKit, etc.

So the idea would be you program your app’s individual screens, throw in some styling, select platform appropriate nav schemes (hamburger for android and tabbed for iOS for example) and hit compile to generate native per-platform project files+code.

This sort of solution wouldn’t cover more complicated navigation schemes or use cases that actually require highly custom UI, but if you’re doing either of those you’ve probably outgrown any kind of cross platform solution anyhow. Realistically I believe this would work well for probably 80-90% of non-game apps and wouldn’t suffer many of the drawbacks that usually come with “silver bullet” style cross-platform setups.

Or you could abstract out the model, networking, persistence, and other services logic from your app into a reusable library,—and then consume that from a native, unshared frontend.

I'm hoping that Swift becomes sufficiently viable on Android that I can reuse library code across iOS and Android sometime in the next few years.

This is much what Xamarin does, encouraging you to have a common core, and then implement the UI for each target platform separately to fit the platform’s style.

Looks like Kotlin gets the lead in this area with Kotlin Native.

Jetbrains moves pretty fast and the integration works surprisingly well for something this young.

As great as jetbrains is, I think Swift has much better long term potential in terms of FOSS tools. The Swift language server Apple is currently working should bring an open tooling avalanche.

In fact I think the high quality of jetbrains IDEs might actually impede Kotlin tooling development… why bother when first party tools are so good?

The thing is, developers outside of Apple platforms don't really adopt Apple techs. Objective C never took off and the same seems to be happening to Swift. I don't know anyone using it on Linux.

Objective-C’s cross platform use was crippled due to half of its essentials being tied up in Cocoa. Objective-C by itself doesn’t even have memory management.

Swift doesn’t suffer this issue — it’s been built for multiplatform use from day 1. There are still some discrepancies, but today Swift on Linux is about as usable as Swift on Apple platforms. There’s even several (4+ last I checked) modern web frameworks for Swift and even GTK+ bindings.

On top of this, its Windows port recently reached a useable state and there’s work being done on a Win32 bindings. Once that’s done, it will be possible to write an app with a common core and 3 different UI layers all in Swift which connects to a web API written in Swift. That’s already leagues beyond what was ever achieved with Obj-C and momentum is continuing to build.

Ok. But the questions now is: why would you adopt it?

You could use Java/OpenJDK or even Kotlin/OpenJDK.

You could use dotnet core.

You could use Node.js with Typescript.

Or Python/Ruby/PHP/...

All those are mature and support all major operating systems way better than Swift does.

I'm not sure what Swift's Unique Selling Proposition is. From where I'm looking it seems to be: "it's backed by Apple".

> Swift on Linux is about as usable as Swift on Apple platforms

Eh, I wouldn’t say that. I don’t see it significantly ahead of say GNUstep is for Objective-C; Swift on any platform other than macOS is still pretty much a second-class experience.

I consider a big mistake that Kotlin/Native doesn't share the same semantics with pure Kotlin.

However since it is still beta, this might eventually change.

And it does require getting licenses for Clion and AppCode, for the full developer experience regarding Kotlin/Native, versus C++ that is already there in XCode and Android Studio.

Have you attempted cross platform development with Kotlin [1]? If so, how is your experience?

[1] https://proandroiddev.com/we-built-our-ios-and-android-apps-...

Yeah, that wouldn’t be too bad. The main need when doing something like this would be a networking library that uses system provided networking (NSURLSession, etc) under the good rather than curl or something like that — not that curl or whatever else is bad exactly, but you’d be losing out on radio use optimizations among other things.

> abstract out the model, networking, persistence, and other services logic from your app into a reusable library,—and then consume that from a native, unshared frontend

Oddly enough, this is what we're going with...

I’d suggest using C++ or a language with C bindings if you want this today (or even in the future).

And then I’d have to write C++. No thanks :-/

That is exactly what Office team and Dropbox are doing with their mobile apps.

Microsoft used the term hamburger development at their CppCon presentations, with the meat being the C++ code and the bread for the native glue and views. :)

Naturally one can use something else other than C or C++ for the library code, but then there is the additionall effort of adding yet another toolchain and debugging layer into the process.

You can do this with Flutter. Flutter provides two packages for ui: material and Cupertino. But you an make your own package using Flutter. This is something I'm doing right now in fact.

Unless I’m mistaken, the Cupertino package isn’t using real UIKit controls… they’re just Flutter controls skinned to look like UIKit and drawn to an OpenGL context. My proposed solution is built to use actual UIKit under the hood on iOS.

Flutter’s “Cupertino” theme is poor facsimile of native UIKit controls.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact