May 2024 Status Update
BeeWare activity in May was dominated by preparing for and attending PyCon US in Pittsburgh. That event generated a lot of activity in the BeeWare project - but we've also added some other significant improvements.
What we've done
- We attended PyCon US. We presented on the state of mobile support in CPython to the Language Summit; we presented a tutorial to over 30 attendees; we ran a booth in Community Row; we presented a talk on writing a data visualisation app with BeeWare tools; and we ran an extremely successful sprint. At the peak, we had over 30 people sprinting on BeeWare projects; and we handed out over 20 challenge coins to first time contributors. Many of the new features in this status update can be attributed to contributions from sprint participants.
- We modified Toga's Window API to allow setting the content of the window when the window is constructed, and improved the APIs for replacing children in an existing window layout.
- We modified how validation of TextInput widgets are handled so that change handlers aren't invoked until validation has been performed.
- We modified how the DetailedList is created on Android so that the dependency on the native SwipeRefreshLayout widget only exists if your app actually uses a DetailedList widget.
- We improved the error handling around camera permissions on macOS, and ensured that Briefcase will generate the right permissions for macOS Sonoma.
- We diagnosed some issues associated with code signing on macOS when running on iCloud-mirrored drives, and when Git has been configured to preserve Windows newlines. We also improved the error handling when notarisation fails.
- We formally documented the plugin extension points that Briefcase provides. With this formally documented interface, Pygame-CE and PPB, have taken formal ownership of their Briefcase bootstraps.
- We formally adopted PEP 621 format for specifying license files in Briefcase.
- We loosened the restrictions on bundle identifiers, and improved handling of applications with special characters in their formal names.
- We developed a draft implementation of a change that will allow Briefcase to package console applications. We expect this change will land in the next week or so, and be released soon after that.
- We started work on removing binary stubs from the macOS and Windows app templates. This was starting to become a significant performance issue for first-time Briefcase users.
- We improved the mechanism for invoking methods in Rubicon ObjC, making it possible to invoke methods with repeated argument names.
What's next?
In June, we're expecting to see progress in three main areas.
Firstly, we'll be finalising the work on packaging console applications. We expect to see a Briefcase release by mid month that will incorporate this, and all the other improvements that have landed over the last month.
Secondly, we'll be working on the APIs for the Toga App and Window classes. We've already done a lot of prototyping work in this area; once this work is complete, Toga should have support for apps without a menubar in their main window, support for status bar apps without a main window, vastly improved abilities to customise standard menu items, and a stable API for document-based apps.
Thirdly, we'll start looking at the broader CPython binary packaging ecosystem. The work we've done so far this year has led to CPython 3.13 formally supporting iOS and Android as Tier 3 supported platforms; the next step is ensuring that the rest of the community can build iOS and Android packages. This will involve improvements to tools like pip, cibuildwheel, meson-python and more. We expect that this work will take much longer than a month to complete, but we hope to be able to share some progress in June.
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
- Add an API to entirely replace the style of a widget
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.
April 2024 Status Update
This month has seen BeeWare reach one major milestone, almost reach a second, as well as landing several smaller improvements.
What we've done
- iOS is officially a Tier 3 supported platform for CPython! All the patches needed to support iOS have been merged, and a buildbot has been deployed to verify that CPython can run on iOS. As a result, PEP 730 has been moved into "Final" status.
- Android support in CPython is getting very close to completion. The last three patches (adding a test harness for running the test suite on Android, redirecting stdout and stderr to the Android log, and updating sysconfig to support Android) are currently in review; once those have been merged, and a buildbot has been deployed, Android should also be at Tier 3 status.
- We landed a new Geolocation service for Toga, providing access to GPS data on mobile devices and macOS.
- We made some modifications to how Toga handles application icons, removing the need to duplicate the icon in application data. These changes are in final review.
- We added a new wizard to add a Briefcase configuration to an existing Python project.
- We modified how Briefcase handles splash screens on mobile devices, and corrected some issues with icons seen on recent Android releases.
- We corrected a problem in Rubicon ObjC caused by a change to the ctypes module in CPython 3.13. It might be possible to upstream this fix to CPython itself; but for now, Rubicon ObjC is able to support Python 3.13.0a6.
- We drafted a new tutorial step about customising application appearance. This update is in review, and should be live in the near future.
What's next?
The bulk of May will be taken up by preparing for and attending PyCon US. We're presenting a talk and a tutorial; we're also presenting at the Language Summit, we will have a booth in the community section of the Expo Hall, and we'll be there for the first 3 days of the sprints. If you're coming to Pittsburgh and you'd like to attend that tutorial session, ticket sales are open!. We're also hoping that we'll be able to wrap up the work on Android support in CPython, and start work on supporting command line applications in Briefcase.
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
- Add an API to replace a child of a widget
- Add an API to entirely replace the style of a widget
- Add the ability to define content when creating a window
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.
2024Q2 Roadmap
Q1 2024 has seen some major progress - but as always, there's still plenty of work to do. As always, this roadmap should be read as a guide to what we aim to focus on over the coming quarter, rather than a hard commitment of features that will be made available on a specific deadline.
Q1 progress
The first quarter of 2024 has seen significant progress towards getting iOS and Android to Tier 3 supported status in CPython. PEP 738 has been formally accepted by the CPython steering committee, and the vast majority of the changes needed to support iOS and Android have either been merged, or received substantial review from the CPython core team.
We've also made progress on a number of long standing feature requests in Toga. We've added an OptionContainer for Android, so tab-based UIs can be used on all platforms. We've added a MapView widget that works on all desktop and mobile platforms. We've also added the start of hardware APIs, including Camera and Geolocation APIs.
Q2 priorities
Our Q2 goals are:
- Get iOS and Android to Tier 3 supported status. We expect to finish upstreaming the patches we have for CPython early in the quarter. However, Tier 3 status also requires CI infrastructure to verify that the platforms are stable. In Q2, we will commission buildbots so that CPython's CI is able to verify the ongoing stability of iOS and Android as a platform.
- Extend the BeeWare tutorial. The BeeWare tutorial provides a good introduction to using Briefcase and Toga, but there are a number of common support questions that aren't covered by the tutorial, and some features that we've added since the tutorial last saw significant edits. We're going to revisit the tutorial, adding some extra steps to cover these new features and common issues.
- Attend PyCon US 2024 We're presenting a tutorial and a talk; we will have a booth in the community section; we'll be there for the full duration of the sprints; and we're also expecting to attend the language summit. It's going to be a busy 2 weeks - we hope we see you there!
- Start working on packaging for mobile platforms. PEP 730 and PEP 738 cover the core of CPython itself, but Python is much more than just the core interpreter and standard library. There's also the ecosystem of third-party libraries, many of which have binary components. In this quarter, we're going to start looking at the changes that are needed to make it easy for the community to start packaging wheels for iOS and Android.
- Modify the App class to support other types of apps. This includes adding an API for a "Simple App" that doesn't have a menu bar, finalising the API for document-based apps, and providing an API for system tray apps.
Longer term goals
Completing PEP 730 and 738 is a major milestone - but there's still a lot of work to be done. It will take a lot of time and community education before iOS and Android binary packages are widely available. We intend to do whatever we can to support the community, ranging from documentation, to tooling support, to submitting patches to upstream packages.
One of the ways to accelerate this transition will be to make iOS and Android compelling platforms to support. This means adding more capabilities to Toga, so that there aren't any capability gaps for a user writing an app. It also means writing more documentation and tutorials so that common app development tasks are well explained.
Summary
This month marks 2 years since full-time work began on BeeWare; and 10 years since the first commits on the project. We've come a long way in that time - from a collection of cobbled-together proof of concept demonstrators to a fully tested GUI platform, with equally tested deployment tooling, and official support in CPython itself. The future for Python as a GUI development platform on desktop and mobile has never looked better, and we're excited to see what the coming years will bring.
March 2024 Status Update
This month, we have less to report by raw feature count - but the changes we have made represent extremely significant progress.
What we've done
- Our primary focus this month has been making the changes to CPython needed to add support for iOS and Android. We've made major progress towards this goal: all the patches required for iOS have been merged; a large number of patches have been submitted for Android, with only a small number still required. This month, we have:
- Added test exclusions to support running the test suite on Android
- Fixed some issues with the process of building an Android libPython
- Modified sys.platform identification for Android so it returns "android" not "linux"
- Added an API to get device and OS information on Android
- Modified ctypes so it can load libraries on Android
- Modified a signals test to make it more reliable on more platforms
- Added a build script and instructions for Android builds
- Added a custom module loader so that iOS apps can load binary modules from Frameworks
- Modified test_doctest to support platforms that don't support subprocesses
- Modified the standard library to support iOS
- Added documentation for the iOS platform
- Corrected some additional test failures introduced on Android
- PEP 738, adding official Android support to CPython, has been formally approved by the Python Steering Council.
- We updated the CPython Developer Guide to describe the iOS development process.
- We improved Briefcase's handling of stdout for some tools. We're hoping this will fix - or at least make it easier to diagnose - a mode of failure we've had reported for the Android emulator on Windows.
- We added color to Android's log output.
- We corrected the handling of key shortcuts on Window and GTK, adding a lot of key combinations that weren't previously possible to represent.
- We restructured the Toga documentation landing page, making it easier to find the documentation you're likely to need.
- We landed the MapView widget, and have completed most of the work on a new Geolocation service.
What's next?
In April, we're hoping to wrap up the work on iOS and Android patches for CPython, and add buildbots for those platforms. With the buildbots in place, iOS and Android will officially be Tier 3 supported CPython platforms. We also plan to revisit the BeeWare tutorial, adding some more steps in preparation for a tutorial presentation at PyCon US in May. If you're coming to Pittsburgh and you'd like to attend that tutorial session, ticket sales are open!
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
- Add an API to replace a child of a widget
- Add an API to entirely replace the style of a widget
- Add the ability to define content when creating a window
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.
February 2024 Status Update
February may be the shortest month, but that doesn't mean we've got any less progress to report!
What we've done
- PEP 738, adding official Android support to CPython, has been formally submitted to the Python Steering Council for approval.
- We've started landing patches in CPython to add formal support for iOS and Android. There are more patches in review, and more to come, but so far we've landed patches that:
- Fix the compilation of the grp module on Android
- Disable tests that can't run on mobile platforms
- Refactor the CPython build system to allow for some of the oddities of iOS as a platform
- Add build targets for compiling iOS-compatible frameworks
- Correct the linking of extension modules on Android
- Enable the concurrent.futures tests on platforms that don't support multiprocessing
- We added macOS ARM64 machines to our CI capabilities for Toga and Briefcase. We've officially supported ARM64 on macOS for some time, but we've been unable to test this support as part of our CI and release procedure - we've had to do ad-hoc testing on the machines we're using to develop on a day to day basis. As a result of improvements to Github's CI infrastructure, we're now able to perform automated testing. As part of these changes, we've also added testing for Python 3.13 (which will be released around October of this year).
- We added an API for detecting the displays attached to a computer, and specifying the location of windows relative to those displays.
- We added a pluggable API for image formats. With this API, any third party library that has an internal format for images can implement support so that Toga can convert to and from images in that format.
- We've significantly improved shortcut key handling on GTK and Winforms, including improved coverage of non-alphanumeric keys, and support for numpad keys.
- We've added a MapView widget. This widget is in final review, but should land very soon.
- We've improved error handling when the Android emulator fails to start. This should hopefully make it easier to identify the source of any emulator failures.
- We've added the ability to run Linux apps that have been built for different platforms. Using Docker, it's now possible to run a Fedora system app on an Ubuntu machine, or any other combination of supported platforms.
- We've added the ability to pass extra arguments to Docker when building images.
- We've improved the console output for non-interactive consoles on some long-running commands.
What's next?
In March, we will continue to focus on iOS and Android patches for CPython; if all goes extremely well, the bulk of patches should be upstream (or at least submitted for review) by the end of the month. While we're waiting for CPython patches to be reviewed, we'll be adding geolocation APIs to Toga.
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
- Add an API to replace a child of a widget
- Add an API to entirely replace the style of a widget
- Add the ability to define content when creating a window
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.
January 2024 Status Update
January has seen some long awaited and high profile features added to BeeWare.
What we've done
- PEP 738, formalizing the introduction of Android as a Tier 3 platform in CPython, has been formally accepted as a draft. We're now revising the draft following community feedback, in anticipation of submitting the PEP for formal approval in the near future.
- We added a cross-platform Camera API to Toga. This API has been implemented for iOS and macOS; the implementation for Android is in final review.
- We added an OptionContainer widget for Android. This now means that OptionContainer is available on every desktop and mobile platform.
- We added the ability to define a button with an Icon. In addition, we've added some major clarifications to the documentation about the difference between an Icon and an Image.
- We reworked the way that widget IDs are handled. This change was required due to a bug caused by the interaction of Python's garbage collector and the widget registry that prevented the re-use of widget IDs in some situations. The new implementation means that the widget registry behaves a lot more like a browser's DOM - a widget can only be discovered by ID when it is actually part of a widget layout.
- We added Briefcase support for Python 3.12 on Android.
- We added a mechanism for defining app permissions in your Briefcase project.
- We added the ability for Android projects to declare the native Android libraries that they depend on.
- We've been polishing the CPython patches necessary to support iOS and Android, in anticipation of submitting these patches upstream. To follow progress on this work, subscribe to the CPython tickets for iOS support and Android support.
What's next?
In February, we'll be focusing on the iOS and Android patches to CPython, and the finalisation of PEP 738. While we're waiting for CPython patches to be reviewed, we'll be looking into geolocation and mapping functionality.
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
- Add an API to replace a child of a widget
- Add an API to entirely replace the style of a widget
- Add the ability to define content when creating a window
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.
2024Q1 Roadmap
It's the start of a new year, which means it's time to cast our minds forward to what BeeWare will bring in the coming year. 2023 saw some major milestones in stability and features; in 2024, we're going to build on that foundation. As always, this roadmap should be read as a guide to what we aim to focus on over the coming quarter, rather than a hard commitment of features that will be made available on a specific deadline.
Q4 progress
During the last quarter of 2024, we finally finished our audit and testing of Toga. We now have 100% branch coverage on every line of Toga's core, and on the macOS, Windows, GTK, Android and iOS backends. We published Toga 0.4, incorporating all these changes - but it also meant that we were able to start adding new features to Toga, including an OptionContainer widget on iOS, and a draft of a Camera API for iOS and macOS. Toga's new test framework has made adding these new features must easier - for example, we were able to very rapidly identify (and resolve) gaps in functionality in the new iOS OptionContainer widget by running the existing test suite on a new implementation. We expect that this testing foundation will continue to serve us well as we add more features in the coming year.
The other major development for the quarter was the start of the upstreaming process for Python on mobile platforms. PEP730, proposing the addition of iOS to the Tier 3 supported list of CPython core, has been ratified by the steering council; and PEP738, proposing the same for Android, is in draft form. The first patch contributing towards iOS support has already landed.
Q1 priorities
Our Q1 goals are:
- Complete upstreaming iOS and Android support patches to CPython core. We will finalise PEP738 and submit it for ratification; and we'll continue upstreaming the iOS and Android patches that we've been maintaining independently. This work has a hard deadline of May 7, as that is when Python 3.13.0b1 is planned, which is the feature cutoff for Python 3.13 development, so making sure we hit that deadline will be our main priority.
- Add OptionContainer for Android. The implementation on iOS was relatively straightforward; we have no reason to believe that the Android implementation will be any more complicated.
- Complete the implementation of the Camera API. We have a draft PR implementing a Camera API on macOS and iOS; we'll extend this API to Android, and complete the work on Briefcase that is needed to add support for permissions.
- Add an API for geolocation, and a Map widget. Geolocation is another major hardware features that is common on phones; we need to write a cross-platform layer for that hardware, plus add a native mapping widget to show off this capability.
Longer term goals
For the remainder of this year, you can expect to see three major themes in BeeWare development.
Firstly, we're going to continue to work upstreaming the work BeeWare has done in the mobile space into the wider CPython community. Once iOS and Android have been incorporated into CPython core, the focus will move to the packaging ecosystem. This means adding official support to upload iOS and Android packages to PyPI, and making it easy for third party projects to incorporate iOS and Android builds into their release processes.
Secondly, we'll be increasing our efforts in education and training. BeeWare has a tutorial that we're extremely proud of - but there are many things we could add to that tutorial, and there are plenty of "How To" and topic guides that could be written for those who have finished the tutorial and want to try more advanced ideas.
Thirdly, we'll continue to expand the capabilities of Toga. There are a handful of high profile widgets and capabilities that have been patiently waiting for us to have a stable platform to build on, and the spare capacity to implement them - features like a Radio Button widget, Trees and Tables on mobile platforms, a cross-platform Settings API, and cross-platform cloud file access.
Summary
2024 promises to be a very exciting year for BeeWare. For the last 2 years, we've been focused on consolidating and stabilizing existing features. That work is coming to a close, which will allow us to turn our attention to building new features that show off the stable foundation we've built, and to providing the resources that will allow more users to try BeeWare for themselves.
December 2023 Status Update
December has been a short month due to end-of-year holidays, but BeeWare has still made some important progress.
What we've done
- PEP730, formalizing the introduction of iOS as a Tier 3 platform in CPython, has been ratified by the CPython Steering Council.
- The first patch to CPython that explicitly mentions iOS has been merged. This is a relatively minor change that is required for building cross-platform binary modules; we'll start submitting more substantial patches in the new year.
- PEP738, formalizing the introduction of Android as a Tier 3 platform in CPython, has been drafted, and is currently under discussion.
- Chaquopy 15 was released, adding support for Python 3.12 on Android. This release also improves compatibility with Android Studio's transition away from Groovy, towards Kotlin for configuration.
- An implementation of OptionContainer was added for iOS.
- A number of improvements were made to image handling, including optimizations when creating images from internal APIs, and a correction to flexible image resizing behavior.
- A long standing bug that would cause macOS tables to crash was resolved.
- The ability to define platform-specific icons was added to Toga.
- Toga 0.4.1 was released, incorporating the features and bug fixes from the last 2 months.
- Work has begun on a cross-platform Camera API . This currently works on iOS, with a draft implementation on macOS. Before this work can land, we need to add support in Briefcase for declaring permissions; a design for this has been proposed, and will be implemented early in the new year.
What's next?
When we return from the end-of-year break, we'll be back into developing Toga. In the near future, you should see an OptionContainer on Android, and permission support in Briefcase; once that work is wrapped, we'll start looking at more more hardware APIs and missing widgets. You should also start to see more patches land in CPython to support iOS, and the finalisation of PEP 738.
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
- Add an API to replace a child of a widget
- Add an API to entirely replace the style of a widget
- Add the ability to define content when creating a window
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.
November 2023 Status Update
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.
What's next?
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.
October 2023 Status Update
In October, we've (finally!) reached a major milestone - but there's still lots of work to be done!
What we've done
- We finally finished the Toga audit!!. We now have 100% test coverage of all Toga code on macOS, Windows, Linux/GTK, iOS and Android, with a consistent and fully documented API across all widgets. This has been a truly mammoth project, resolving countless bugs, adding dozens of new features, and improving platform support (especially on Windows and Android). Once we've finalised a couple of housekeeping issues, we will release Toga 0.4 incorporating all these changes. This will hopefully occur later this week.
- We attended the Python Core Team Sprint at the RedHat offices in Brno, Czechia. As a result of this attendance, we produced a draft of PEP 730, which is the first step towards formalizing support for iOS in CPython. An analogous Android PEP will be drafted once we've sorted out the process around the iOS PEP (as this is the first time a platform has gone through a formal process to be added to PEP 11's Tier 3 list).
- We reworked the build system for Apple support packages to separate the compilation of dependencies (like BZip2 and OpenSSL) from the compilation of Python itself. These libraries are updated infrequently, and on a completely different cadence to CPython itself, so treating them as re-usable resources rather than something that needs to be compiled at the same time as Python will significantly improve CPython build times.
- We released Briefcase 0.3.16, formalizing our support for Python 3.12, and adding the new support for dynamic libraries on iOS. This release also formally downgrades our support for AppImage, following extended problems in supporting AppImage as an output format.
- We released Rubicon ObjC 0.4.7, formalising our support for Python 3.12.
- We modified Briefcase to ensure that macOS apps are universal by default, with an option to request a single-architecture build.
- We added a deep debug logging level to Briefcase, and simplified the output of many other commands to ensure that important warnings aren't lost.
- We added support for Undo and Redo operations on macOS text widgets.
- We added support for user-registered fonts on iOS and macOS.
- We made some modifications to improve Toga's memory management when creating and destroying windows.
What's next?
Now that we've finally finished the widget audit, we can finally release Toga 0.4, and start using the foundation that we've spent the last 12 months building.
In November, we'll start the work of upstreaming iOS patches to CPython core. The PEP we've drafted is nearing a form where it can be submitted to the Steering Council for approval, but the drafting process has raised a couple of technical issues that need to be investigated. However, while we wait for formal acceptance of the PEP, we will continue working on building continuous integration for our iOS CPython builds, and begin preparing patches that can be merged into CPython.
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.