Revisting Android/Mobile support (follow up from #1307) #2975
Replies: 2 comments 8 replies
|
I actually looked into switching to PySide6 when I ported from PyQt5, but there are real differences that matter between the two. novelWriter has some PyQt-specific adaptation, and the app is complex enough that the way memory management and multi-threading is implemented is a bit too closely tied into PyQt6. Also, while PySide6 is maintained by Qt, it gets less maintainer attention than PyQt6 does. So I stuck with PyQt6. If you need PySide6, the app needs to be ported, because I don't want to add an abstraction layer on top of the framework because of the above mentioned reasons. So then it is a matter on how that project would be driven. If it's a maintained fork with synced releases, then I can point the website to it, which is also what I want to do with MacOS releases where there is no longer an official release. An alternative is to finally take the step and move this project into a GitHub org, which allows adding maintainers and multiple projects. But if it's just going to be me in the end doing most of it, I don't really want to commit to more work. A GitHub org gives much more granular control (it's one of the things I do in my day job anyway, so it's easy peasy to manage). |
|
Hey folks, I'd like to help out with both topics. I have a couple of hours of capacity I can put into novelWriter dev and my background and most of my time is focused on building apps for Apple platforms and some cross-platform stories.
Regarding macOS distribution of the current app, I'm more than happy to setup a fork that (with a few adjustments to the packaging) regularly builds notarised versions of the app via my Apple Developer program membership. Regarding mobile, a version of novelWriter which works on iPad/iOS/Android would be amazing! My feeling here is that we will have a much happier story if we choose a different path for those platforms. Given that novelWriter is a very text-focused experience, I would go for a solution allowing us to access the platform's native text input components (and try not to involve Qt at all). It will be a bit more work upfront e.g. to port the 'nvw project' framework to something like Kotlin Native (KMP is great these days) or Swift (it supports building libraries for Android) which will enable sharing common features while using each platform's first party UI library. Some help from LLMs can speed up the process. We also give ourselves some flexibility to choose which features make it to mobile and how to translate desktop-focused tools into something suited for small screen/touch-sometimes-keyboard form factors. For example, novelWriter for mobile could start as a companion to the desktop app for "writing on the go" and gradually gain more of the suite's functionality. The "core" and starting point would be implementing an SDK to read and write the project file structure (and links) in a reliable and reversible way. I'd be happy to setup a PoC if that sounds like something you'd be ok with. |
Uh oh!
There was an error while loading. Please reload this page.
@vkbo @HeyMyian Hello :) tagging you both since you were part of this last round way back in 2023, on #1307
Wanted to check whether the situation has changed at all in the last couple years. Back then the summary was:
In principle possible, no capacity or Android knowledge on your end, but open to it if a contributor wants to drive it and maintain it separately.
Curious if that still holds?
I'd like to actually take a serious run at this, starting with Android, iOS later if Android goes well, and wanted to float a rough plan here first and see who's interested before committing any real time to it.
Why now? Well, the Qt/Python side of this has moved a lot since 2023. Qt for Python (PySide6) now ships official Android wheels and a pyside6-android-deploy CLI tool that handles packaging end-to-end (Qt 6.8+). And as of Qt 6.12, PySide6 has landed initial iOS support too, so the same codebase could plausibly target both down the line, once Android is solid.
The catch is, novelWriter is built on PyQt6, not PySide6, and PyQt6 has no real Android/iOS path. So I was thinking about Forking the project, migrate the fork from PyQt6 to PySide6 (or via qtpy for a compatibility layer) rework the UI for touch, menus, toolbars, and shortcuts are all built assuming mouse + keyboard right now.
Handle desktop↔mobile project syncing,
leaning toward not building anything custom here, just making sure novelWriter projects work cleanly over whatever generic sync the user already has (Syncthing, a cloud folder, git, the in-progress zip export) just so, if an existing project on desktop is moved to Android, the user can always update once they are back to desktop, I feel like this should be a key part that I have yet to fully highlight, this way Android is cross compatible with the desktop versions.
iOS is also a later phase, though PySide6 is newer and still has real gaps on ios (no simulator yet, no C extension packages on PyPI yet)
This would live as a separate fork/distribution rather than something that needs to merge into or be maintained by the main repo, to keep it off your plate.
I don't have Android dev experience myself (my background is more systems/low-level), so I'd genuinely welcome anyone who does wanting to weigh in helping, or just tell me where this plan is naive.
Mainly posting this to gauge: Is there still appetite for this, and is anyone interested in helping before I start fully looking into it?
P.S.
I love novelWriter, and I am really gratefully for what the software has given me as a long user. :)
All reactions