November has been a month of focus on the code that enables us to run Python on iOS and Android - but there has still been some other high profile developments in other parts of BeeWare.
What we've done
- PEP730, formalizing the introduction of iOS as a Tier 3 platform in CPython, has been submitted to the Python Steering Council for ratification.
- One of the major topics covered by the discussion about PEP730 was the use of a deprecated compiler argument. This led to some re-examination of how CPython could be delivered on iOS without using that argument. As a result of that discussion, modifications to use CPython as a dynamically loaded framework have been prepared. Although the original focus of this work was iOS, the same change will be also used for macOS - which means BeeWare no longer needs to compile a macOS support package (although we will still be lightly re-packaging the official CPython installer).
- We modified Toga's Image APIs so that Pillow images can be used as source data.
- We switched CI testing of Android apps to use a Linux machine. This wasn't previously possible, because Github didn't expose the necessary permissions in their Linux images; however, now that is possible, our Android tests run up to 5 times faster, and are less likely to be held up in CI because of availability of macOS testing machines.
- We corrected an issue on macOS where an OS-level setting controlling the use of tabs could cause test failures in the Toga test suite.
- There have been some extended discussions and draft PRs related to Toga's Application base class, and the addition of support for status icons. These PRs are still in active development, but they will open up some interesting possibilities for Toga apps when they are completed.
- Briefcase, Toga and Rubicon ObjC were all modified to use PEP621 metadata, removing the need for setup.cfg, setup.py, and MANIFEST.in files. As part of this change, we wrote a new setuptools plugin to allow for dependencies to be dynamically defined.
- We modified Briefcase so that answers to the new project wizard and values for configuration settings when running commands can be overridden at the command line. This is mostly useful for testing purposes - it's now possible to generate a project and build it against a local template or support package build without needing to modify a pyproject.toml file or override input handling.
- We refactored the new project wizard so that support for GUI toolkits is generated by an extensible plugin. Although we still ship with support for Toga, PySide, Pygame and PPB, this support is provided through a public interface, allowing other GUI toolkits to provide Briefcase with toolkit-specific modifications to the new project.
- We switched the default Android skin used by Briefcase from the Pixel 3a device skin to the Pixel 7 skin. This is an entirely cosmetic change, but it does mean that screenshots will use a device that looks a little more modern.
- We've made significant progress on the modifications to Chaquopy to support CPython 3.12. This support will hopefully be released at the same time as the upcoming Android Studio "Hedgehog" release.
- We've made significant progress on running CPython's unit test suite on iOS in a CI configuration.
We won't see as much progress as normal in December as a result of the end-of-year holidays. However, before we sign off for the year, we're hoping to start looking at OptionContainer on mobile platforms, and possibly start looking at Camera API support.
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:
- Update the Toga testbed test suite to use Pixel 7 Pro device sizes
- 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
- 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
- Print notarisation log failures when building macOS apps
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.