September has been a month of slow, but significant progress.
What we've done
- We've resolved the issues around the iOS App Store rejecting BeeWare apps - and, by way of proof, we've updated our demo app, Travel Tips. We've also updated the Android version of the app.
- We've completely reworked the tooling for building binary packages for iOS. Mobile Forge is our new project for maintaining iOS binary builds. It provides a much more robust environment for performing cross-compilation, making use of crossenv, rather than bespoke site package overrides. Getting crossenv working has also required us to do a deep audit of the various ways that Python reflects describes the platform it is running on, from the obvious ones like the platform and sys modules, down to sysconfig and the tags that are used by pip to determine wheel compatibility.
- We've completed an initial port of the iOS patches to Python 3.12.0rc3. We're still hunting some edge cases, but initial signs are promising that we'll be in a position to do a near "zero day" release of Python 3.12 support for iOS.
- For Android, we've re-enabled Fortran support in the package build system, and used it to upgrade SciPy.
- We were anticipating that would would complete the Toga Audit this month; however, that unfortunately hasn't happened. We've hit a bunch of complications with getting fonts and canvas support working on Windows and Android, and the process of getting those platforms working has revealed some inconsistencies in macOS, iOS and GTK font handling. However, we have completed the audit of DetailedList and Font, and the audit of Canvas is almost complete.
- We decoupled the Winforms event loop from the main form in a Toga app. This doesn't have any immediate impact on existing Toga apps - but it means we're now in a position to have windowless apps, such as system tray apps.
- We completed the fixes needed to support Briefcase on Python 3.12.
- We made some significant improvements to subprocess encoding handling. This should significantly improve the user experience of Windows users, and users from non-English speaking countries.
- We formally downgraded our support for AppImage to "Best effort". AppImage has proven increasingly difficult to work with as a format; now that we have native system packages and Flatpak as options, the effort needed to maintain AppImage support is better spent elsewhere. We'll still merge fixes to AppImage support if a PR is provided, but we're no longer actively fixing bugs, or running AppImage configurations in CI.
- We added filters to Xcode output to hide ignorable warnings. Xcode builds have always been a little noisy; the new Xcode 15 release added even more noise. The filter means that these warnings will no longer distract from successful build output.
Unfortunately, we didn't complete the Toga audit in September as we anticipated. As mentioned, we hit a number of complications and inconsistencies in font handling, especially in the Canvas widget, which slowed progress. We'll keep working on this audit in October; and once we're done, we'll make a release a new version of Toga. 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.
Once the audit is complete, 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.
We'll also begin the work of upstreaming patches to CPython core. We've been invited to attend the CPython Core Team Sprint this month, which will be great opportunity to lay out the roadmap for formal iOS and Android support in CPython 3.13. This will also involve working on improving the CI infrastructure for building Android and iOS packages.
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
- Correctly handle incomplete project deletions
- Add an option to select the Android base image when creating new emulators
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.