Cross-Platform Desktop App Development Framework Selection

edited February 2022 in General

Hey guys,

We are tring to make IFC Toolbox a cross-plateform app for long-term.

(Here is the link if you don't familiar with the project: IFC Toolbox - Simple tools for processing IFC files)

And I did some research and after a talk with @duncan , he suggest me to put this in the community forum.

We think maybe this topic will also interest a lot of people.

I hope you guys can also give me some suggestions, or work together to improve the content.

Main Factors

At present, the core factors we consider are:

  1. Performance
  2. Offline capability (At lease could be serverless)
  3. Desktop platform compatibility (Win10/11, MacOS, Linux)
  4. Consistency in UX

Benchmark

Framework Code MacOS Windows Linux Company
React Native JS macOS apps with React Windows apps with React Linux app with ValenceNative Facebook
Electron JS Electron Electron Electron GitHub
Ionic JS Based on electron Based on electron Lacks support Ionic
Flutter Dart Coming Next Flutter Update: Desktop Support (Released 03 fev 2022) Coming Next Google
Xamarin C# Xamarin.Mac Windows Platform Features - Xamarin Lacks support Microsoft
MAUI (Preview) C# .NET MAUI supported platforms (GR in Q2 2022) .NET MAUI - GitHub (GR in Q2 2022) Lacks support Microsoft
Uno Planform C# Uno Platform for macOS Uno Platform for Windows (Win7 support) Uno Platform for Linux(With Skia) Uno Platform
QT framework C/C++ Qt for macOS Qt 5.15 Qt for Windows Qt 5.15 Qt for Linux/X11 Qt 5.15 Qt Group

Any kind of discussion and feedback is welcome.

bitacovirAce

Comments

  • I have a soft spot for Qt so that's what I'd recommend. It is a proven technology that works well cross platform.

    The JS approach works too, but never truly feels native, I have found. From personal experience I have used a number of Electron apps and they do feel "out of place" on Linux.

    Things which are C# generally do not work well on Linux. I find the C# ecosystem to be very limited to the Windows environment. Works great in Windows, but I have yet to find any Linux user who is comfortable with it. I'd avoid them. It brings in a heavy dependency.

    atomkarinca
  • Thanks for sharing @Moult . I agree with your point of view, if we speak according to the language, I think they can be divided into three categories. C/C++ based (Qt), JS based (React Native, Electron, Ionic), C# based (Xamarin, Uno Planform, MAUI).

    The problem with C/C++ is that it's too complicated for the most people. And it's hard to get started, and contributors are hard to involved. C# actually has a similar problem. Compared with JS projects, those community grows very slowly, and the contributors are not very active.

    What you said about "out of place" for JS approach, I feel the same. It's always kind of too web page look. The good thing is that you can build the same UI logic across platforms. But for a desktop app, is there really a need to build a unified cross-platform experience, or is it more for a native experience?

    "As a user, what kind of cross-platform desktop application UIUX do you prefer?"
    This is also the question I want to ask. Please give me a quick feedback if you can. Thanks, everyone!

    Unified interface everywhere - LOL ?
    Native-like interface in each - WTF ?

    AceMoultduncanvpajic
  • Qt has Python bindings, so you can perhaps build with that and that will lower the barrier to entry significantly?

  • I used to use QT then changed to flutter and then changed to GIO

    Gio is pure golang and compiles to web , desktop and mobile .

    It’s designed like flutter is but much easier to develop with because of the highly mature golang tooling

    I have am building a pdf annotation tool.
    It can also output pdfs from gio as well as parse pdfs thanks to the rich golang package ecosystem.

    RTL for Chinese and Arabic is getting merged into gio pretty soon

    You are welcome to contact me if you want opinions or advice

    https://github.com/gioui

    CoenduncanYousheng
  • @Moult said:
    Qt has Python bindings, so you can perhaps build with that and that will lower the barrier to entry significantly?

    I checked Qt in detail, it is good. but in terms of UI creation. It seems not so friendly for developers and designers.
    In any way, I will continue to test this and when I got some new stuff I will put it here.

    duncan
  • Hi @Yousheng great to see you persevere with this discussion which is close to my heart :-)

    Yousheng
  • I like the Qt framework and with PySide or PyQt it can be accessed rather well inside Python.
    This guy has a decent series of books and tutorials covering this:
    https://www.pythonguis.com/books/
    I have followed his tutorials and added my own experience (from long time ago using Qt/C++) to develop a basic IFC viewer. Here are my results so far:
    https://github.com/stefkeB/ifcopenshell_examples

    carlopavcvillagrasa
  • @StefanBoeykens said:
    I like the Qt framework and with PySide or PyQt it can be accessed rather well inside Python.
    This guy has a decent series of books and tutorials covering this:
    https://www.pythonguis.com/books/
    I have followed his tutorials and added my own experience (from long time ago using Qt/C++) to develop a basic IFC viewer. Here are my results so far:
    https://github.com/stefkeB/ifcopenshell_examples

    That's fantastic! Leveraging the Qt framework with PySide or PyQt for Python integration is a great choice. Your IFC viewer project on GitHub looks promising and well-documented. Great work! ???

  • I propably would go the core C++ route with a QT QML Ui front end. Stay away from QtWidgets (even QT does, they just let it live for the corporate legacy world).
    QML gives you the option to integrate JS and is also somewhat mobile friendly. Cross-platform Ui on desktop is okay, on mobile not so much. Especially on iOS it‘s better to use a native Swift Ui layer.

    • core C++, with possibility to break out command line apps and integrate Python bindings via Swig
    • QML Ui on desktop with QT layer strictly kept as plain data transfer objects, spice things up with JS if necassary
    • for iOS use a Swift front end, better to leverage graphics with Metal anyway
    • on Android I don‘t know, but a seperate QML Ui will propably suffice with „some“ components reuse from the desktop side
    Moult
  • Hi Everyone,
    I would suggest to check out Godot Engine (https://godotengine.org).
    It was originally a game engine, but it has very good 2D UI capabilities (its own editor is built using itself!). It supports every platform out there and has excellent graphical capabilities (naturally). We have been using it for over 6 years in AR/VR projects (including an AR HUD for cars) and also created an internal prototype where we integrated IFC++ with it to display IFC geometries.
    You can build apps with it in its own Python-like language (GDScript), C#, C++, Python, and any other language that can work with a C API.
    You could even reuse the Godot Editor as a starting point for your toolbox, it has a lot of features already implemented.
    It has a very liberal MIT license and a huge community around it.
    We have been using Qt in the past, but Godot works simply better for us.
    Kind regards,
    Gergely Kis
    CTO of Migeran

    MoultAceatomkarincaGorgious
  • @kisg Yeah Godot is on my list for the next test pet project. You do not have by any chance an open source repo available with your internal Godot + IFC++ test project, do you? That would be awesome.

  • It would be awesome to learn more about how you managed to integrate Godot with IFC! It could work very well to replace proprietary tools like Navisworks, Revizto, Enscape, etc.

    Nigel
Sign In or Register to comment.