August has seen an important milestone reached in our Toga work, and some exciting new features.
What we've done
- We attended PyCon AU 2023, and presented a new talk about the fundamentals of building GUI apps in Python; the video of this presentation is already online. At the sprints, 8 new contributors earned their challenge coins, for a range of small and large fixes.
- The Toga Audit is complete on macOS, iOS and GTK! The last pieces were the audit of Window and App; with those PRs (and some others that are outstanding), we have 100% code coverage for Toga's codebase. Windows and Android are catching up rapidly - we've completed the audit of OptionContainer, Table, and Tree, as well as a major revamp of how layouts are calculated, which ensures that minimum window sizes are enforced, and layouts on High DPI displays are correct.
- We added a Texual backend for Toga. This means the same Toga application will now run on 3 desktop platforms, 2 mobile platforms, as a single page web app, and in a terminal window. As with the web backend, there's still a lot of work to fill out all the widgets, but we've got enough in place to run the BeeWare tutorial app and the first 2 Toga tutorial steps.
- We improved the architecture and word size checks that Briefcase performs when building apps. This effectively adds support for 32-bit x86 and ARM platforms; we're limited in our ability to perform automatic tests to verify these platforms work as advertised, and upstream tooling isn't always up to the task (for example, Linuxdeploy doesn't support ARM at any word size) - but Briefcase now performs much more robust checks, and will make a best effort when support should exist.
- We added support for openSUSE (and other SUSE-derived distributions) to Briefcase.
- We updated the version of the Android command line tools that Briefcase uses.
- We resolved a long standing issue with the use of Objective C blocks on M1 hardware.
Based on current progress, it seems highly likely that the Toga audit will be complete on Windows and Android by the end of September. This will bring the Toga audit to completion, providing a very stable foundation for future work on Toga. It also means you can expect a new Toga release in the coming month, incorporating the myriad bug fixes and improvements that the audit has revealed. This release will include a number of backwards-incompatible changes identified as part of the audit, so be prepared for a bumpier-than-usual upgrade process.
So - what comes after the audit? Firstly, we'll be looking into iOS App Store submission - we've been made aware that although Briefcase apps work fine on both device and simulator, the App Store has been rejecting apps because of an internal layout issue. We have already begun work on this, and thanks to a contribution from the community, we have a very strong foundation for this work. We'll also start looking at Python 3.12 support, and making preparations for upstreaming our iOS patches into CPython core.
We'll also be looking at a technical limitation that the widget audit has revealed on Android. A number of Toga's Android widgets aren't as fully featured as they could be, due to the fact that accessing the full API would require subclassing a Java base class. This is an area where Chaquopy has some limitations; so we're going to try and address these limitations.
Want to get involved?
Want to get involved? Here are some open issues that would be a great place to get started with contributing to a BeeWare project. They're all relatively minor changes, but would provide a big improvement to the lives of BeeWare users:
- Filter out a message generated after Xcode updates
- Add the ability to configure the ABIs built by an Android project
- Rationalise the application of adhoc signing on macOS
- Provide an option to override app settings from the command line
- Add support for custom PyPI repositories
- Document how to debug an application in popular IDEs
- Switch Toga's Android backend to use native Chaquopy syntax
Pick one of these tickets, drop a comment on the ticket to let others know you're looking at it, and try your hand at a PR! We have a guide on setting up a Briefcase development environment; but if you need any additional assistance or guidance, you can ask on the ticket, or join us on the BeeWare Discord server.