2024Q4 Roadmap
Q3 has seen some major progress against long term goals of the BeeWare project. 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.
Q3 progress
In Q3 the biggest milestone we achieved was the finalisation of Tier 3 support for Android in CPython. The last of the compatibility and documentation issues associated with Android have been resolved, and Android buildbots are now running for both x86_64 and ARM64. Python 3.13.0 is due for release in about a week; we should be in a position to support this release very soon after the official release.
We've also made significant progress on binary packaging. We've backported all the Python 3.13 patches for iOS into BeeWare's support for Python 3.9-3.12, and we've updated our Mobile Forge infrastructure to generate binary wheels for a number of popular packages. We've developed iOS compatibility patches for pip and crossenv; these patches have been submitted and received initial reviews; we'll continue to work with those projects to land these patches upstream.
Q4 priorities
In Q4, we'll be focussing on the tools and documentation needed to for third-party Python packages to add Android and iOS support to their official CI and release processes. In addition to contributing to tools like pip and cibuildwheel, we'll develop the tools and documentation needed so that it is easy to add CI configurations for mobile platforms. The hope is that by the end of the year, there will be at least one third-party package that produces Android and iOS wheels without any direct involvement of the BeeWare team.
Longer term goals
Once we've got a strong story for packaging third-party packages for iOS and Android, we'll be able to turn our focus back to Toga, and the work needed to make iOS and Android compelling app development platforms. There's a number of navigation and data organization widgets that need to be developed; we also need to improve documentation of some common development patterns that are sources of common questions in BeeWare support channels.
There are also further improvements that we'd like to see in Python itself. This year we've been able to get Android and iOS to Tier 3 support; getting those platforms to Tier 2 is an obvious goal for future Python releases. We'd also like to contribute the tooling needed so that Python is able to distribute official binary releases of iOS and Android, and add an official macOS artefact that mirrors the "Windows embedded" installer. We've had discussions with the Python core team about how this could be achieved; over the coming year, we hope to land these changes.
September 2024 Status Update
In September, BeeWare hit an important milestone for Android support, made good progress on packaging for iOS, and landed some significant changes to Toga.
What we've done
- Android is now officially a Tier 3 platform in CPython! Over the last month, we've resolved a number of bugs that were preventing us from deploying a reliable buildbot for Android (on both x86_64 and ARM64); as a result, the CPython buildbot fleet now contains Android buildbots. The Android-related changes to documentation have also been merged; Python 3.13.0rc3 (due for release any day now) will incorporate all these changes.
- We completed the updates to Mobile Forge to support the new official iOS wheel format, and published updated wheels in this format for the packages for which we have recipes. As part of these changes, we've also added CI checks to Mobile Forge.
- We've submitted a patch to support iOS in pip. This patch also requires some patches to packaging and distlib that pip includes as vendored copies.
- We've submitted a patch to crossenv that allows cross-compiling Python packages for iOS. There is some additional work required before this patch can land - crossenv's testing framework is currently broken, so it's not currently possible to verify changes in CI. We'll be working on restoring this testing support in the very near future.
- We attended the CPython core team summit. During this week-long sprint, we were able to resolve a number of open questions about Python support on mobile, and begin planning for work that will hopefully be incorporated into the Python 3.14 release.
- We released Toga 0.4.7, incorporating fixes for a number of bugs discovered in the recent 0.4.6 release, as well as some minor feature additions.
- We transitioned Toga's GTK backend to use PyGObject's native asyncio support. This allowed us to deprecate Gbulb, the GTK asyncio plugin that we've been maintaining for several years.
- We corrected an issue with the use of recent Textual versions in Toga, and added a bare-bones runtime test to ensure that the problem doesn't re-occur. This also required a fix for macOS console app testing in Briefcase.
- We made some usability improvements to the rendering of Toga's documentation, and modified Toga's ReadTheDocs configuration to encourage search engines to return the stable documentation by default.
- We modified the handling of Toga's app icons on macOS to improve compatibility with PyInstaller.
- We corrected a number of issues with WebView handling, including ensuring that DOM storage is always available, and improving error handling when the WebView cannot be initialised on Windows.
- We added protection against an edge case of asynchronous Task handling that could lead to the premature garbage collection of long lived tasks. We've also had some discussions with the CPython core team about fixing this problem in Python itself.
- We spoke at PyBay on building mobile apps in Python.
What's next?
In October, we will continuing working on binary package support for mobile platforms. In addition to responding to any review feedback on the patches we've already submitted, we'll be working on new patches for cibuildwheel and meson-python, as well as tooling to make it easy for third-party libraries to run CPython test suites on mobile platforms. We should also be able finalise Briefcase's Python 3.13 support for Android, and start work on Android packaging. Supporting packaging for mobile platforms is a long term project which we expect to continue for several months; the hope is that by the end of the year, we will be able to contribute patches to third-party projects so that iOS and Android wheels become officially produced, rather than BeeWare-maintained artefacts.
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
- Add an option to select the Android base image when creating new emulators
- Add an API to entirely replace the style of a widget
- Correct the handling of quotation marks in Android 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.
August 2024 Status Update
August has seen some good progress on BeeWare's support for Python 3.13, plus a number of long-awaited features landing in a stable release of Toga.
What we've done
- We've completed the process of backporting the CPython changes for iOS compatibility to Python 3.9 through 3.12. We've published support packages and stub binaries that incorporate these changes, and made the changes to Briefcase needed to support these new versions.
- We've begun work on updating Mobile Forge and related binary tooling to support the new official binary tag and framework format required by the PEP-compliant patch for iOS support. So far, we're able to compile simple binary packages like lru-dict, and non-Python dependencies like libjpeg; we're working on restoring binary support for more complex binary dependencies.
- We've landed the Android test runner script, fixed a number of issues that have arisen in CPython's Android support since the original patches landed, and deployed an Android CPython buildbot. This buildbot has revealed some edge cases (primarily in socket and signal handling) that only appear to manifest under the unusual load conditions generated by a buildbot; so, we've temporarily disabled the buildbot while we investigate the cause of these problems.
- We completed work on a new API for document-based apps.
- We completed work on an API for status icon apps.
- We released Toga 0.4.6. This includes the support for document-based apps, status icon apps, and a number of other long-awaited features, such as apps without menubars, available in a stable release.
- We updated the support for WebView on Windows to a more recent version, and resolved an issue with compatibility with Windows Store Python.
- We diagnosed and contributed fixes for a number of issues in tools that BeeWare depends on for our build tooling. This includes updates to CI configurations to support Sphinx 8, fixes for Sphinx 8 support in a Sphinx plugin, and diagnosing issues with a recent Towncrier update.
- We presented a keynote at Kiwi PyCon on the future of Python.
What's next?
In September, we'll be continuing work on binary package support for mobile platforms. Once we've restored support for binary wheels using the new binary tag and framework format, and added support for Python 3.13, we'll start upstreaming the changes we've made so that the wider Python ecosystem can start supporting iOS and Android. We'll also start working on the fixes to tools like pip, cibuildwheel, and meson-python that need to have explicit iOS support. We expect that this work will be ongoing for several months, but some of the work should be submitted upstream for review by the end of the month.
We'll also be presenting at talk at PyBay in San Francisco on mobile app development in Python, followed by the CPython core team sprint.
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
- Add an option to select the Android base image when creating new emulators
- Add an API to entirely replace the style of a widget
- Correct the handling of quotation marks in Android 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.
July 2024 Status Update
July saw a lot of our attention being consumed by the upcoming Python 3.13 release; but we've also seen some other improvements to the BeeWare suite.
What we've done
- We've resolved a number of issues with iOS and Android compatibility in CPython 3.13. Although patches for iOS and Android compatibility landed months ago, a number of changes have been landed since then which have inadvertently broken compatibility with these platforms. These issues usually indicate a subtle issue with the implementation of the feature that has been added - but diagnosing and correcting the source of the problem can often take days. There have also been some small improvements made to the iOS patches, such as a configuration option ensuring App Store compliance for both iOS and macOS.
- We've begun the process of backporting the CPython changes for iOS compatibility to the older supported CPython releases. So far, we've completed the port to 3.12, and the 3.11 port is mostly complete; backports for 3.10 and 3.9 should be underway shortly. This includes significant changes to the Python-Apple-support repository, switching the build of the macOS support package to be based on the official CPython download, and adding a CI test suite that can be used to simplify the process of making a new release.
- We've almost completed adding a test runner script for Android. This will form the basis for an Android CPython buildbot in the very near future.
- We've added support for using an externally managed libmpdec implementation to the iOS patch. This is a change that was recently introduced to CPython, and will become required in CPython 3.15.
- We've almost completed work on a new API for document-based apps.
- We've developed an initial design and prototype for status icon apps.
- We've added an API to make it easier to add and remove commands from a Toga app.
- We corrected an issue that was causing intermittent Toga CI failures on macOS.
- We've improved Briefcase's validation of the version of Git that a user has installed.
- We've corrected an issue with the way macOS signs apps. This was causing problems with apps that have particularly complex application layouts.
- We've modified Briefcase to use the newly available "stripped" Python Standalone binaries on Linux.
- We've improved the validation of document type declarations in a Briefcase project.
What's next?
In August, we'll be continuing preparations for the upcoming Python 3.13 release, and working on the mobile Python binary packaging ecosystem. The initial release candidate for Python 3.13 will be released very soon; with any luck, this means there should be less inadvertent breakages to diagnose, so we can focus on improvements to tools like pip, cibuildwheel, meson-python and more. We expect that this work will take most of the rest of the quarter to release; but there should be some initial signs of progress by the end of the month.
We'll also be at Kiwi PyCon, presenting a keynote about the future of Python.
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
- Add an option to select the Android base image when creating new emulators
- Add an API to entirely replace the style of a widget
- Correct the handling of quotation marks in Android 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.
2024Q3 Roadmap
We're halfway through the year, and BeeWare has seen another quarter of significant progress. 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.
Q2 progress
The biggest news for the quarter is that iOS is now officially a Tier 3 supported platform in CPython. All the patches required for iOS compatibility have been landed, and a buildbot is in place; as of 3.13.0b1, CPython will build for iOS without any patching. Android support is close behind; the only missing piece is the buildbot.
We made some major improvements to the BeeWare tutorial, adding sections on customization of the packaged app, and handling permissions for apps. We were able to use these changes as part of a well-received tutorial at PyCon US. We also ran a very successful booth and sprint at PyCon US.
We also completed a lot of improvements in Briefcase and Toga, expanding the types of apps that can be supported. Briefcase can now package console apps; and Toga now has an official API for apps that don't have menu bars, background apps, and apps that aren't governed by the lifecycle of a single "main" window. These have been the subject of long-standing feature requests (some of them almost as old as Toga itself), so it's great to be able to finally address these limitations.
The one area where we weren't able to make an progress was in packaging for mobile platforms. However, we did have some very productive discussions at PyCon US, so we're confident we'll be able to make good progress on this in the coming quarter.
Q3 priorities
The highest priority for Q3 is to get ready for the Python 3.13 release in early October. This involves finalising the work on the Android buildbot so that Android is officially Tier 3; preparing Briefcase and the Python builds that BeeWare supports to be ready for the 3.13 release; and doing as much work as we can on the packaging ecosystem so that package maintainers can publish wheels for iOS and Android.
We'll also be attending Kiwi PyCon in August, and attending the Python Core Team summit in September.
Longer term goals
Getting the Python ecosystem to support iOS and Android is requires a lot more than just adding patches to CPython and some related tools. There will be a lot of education and support work required to help the community adopt iOS and Android; and there is certain to be ongoing maintenance as Python and the platforms evolve. There are also many ways that Python mobile support could be made even better, including the publication of official iOS and Android binaries, and potentially getting to Tier 2 (or even Tier 1) support.
There's also a lot of work that can be done to Toga to make iOS and Android compelling platforms to develop for. Toga is still missing some key widgets to support navigation and data organization; and even when these widgets exist, there will be a need for documentation and examples to demonstrate how to build apps for these platforms. We anticipate we'll be looking at these towards the end of the year. We also anticipate that we'll start looking more seriously at Toga's web backend, attempting to bring it to a level of support comparable to the desktop and mobile platforms.
Summary
It's been another busy quarter with a lot of progress, but as always, there's still plenty to do. Completing official support for iOS and Android means the foundational work needed to support mobile platforms will be complete; we can then focus on what we - and the community - build on that foundation.
June 2024 Status update
In June, BeeWare made a lot of progress, landing lots of new features - many of which have been the subject of requests and discussions for a long time.
What we've done
- We added support for packaging console apps to Briefcase. This involved adding a new .pkg packaging type for macOS, as well as a number of other improvements to the stub app and MSI packaging on Windows. In addition to providing a way to package console apps on macOS, the addition of .pkg format means it is now possible to distribute apps using centralised device management tooling (such as Kandji or FleetDM).
- We modified Briefcase to distribute the stub binaries as standalone artefacts, rather than including them in the app template. We also significantly optimised how Briefcase uses templates. Between these two changes, the download size required for a first project on macOS has been reduced from around 200MB, to less than 4MB.
- We isolated Briefcase's use of Cookiecutter so that all of Briefcase's cached content is contained in Briefcase's own cache folder.
- We added support for distribution certificates on macOS.
- We modified Toga's APIs to use namedtuple types for Size and Position references.
- We corrected a number of stability issues with Toga's testbed CI, and added CI testing for Wayland on Linux.
- We completed a major overhaul of typing in Toga's API surface.
- We added support for conditional coverage in Toga's testing. It is now possible to get a clean coverage report without running the test suite on every Python version and every platform.
- We added an official API for customizing the system-installed menu items.
- We added an API for detecting the screens available for an app to use, and for setting the position of windows relative to those screens.
- We added support for "simple" apps - apps that don't have menu bars.
- We added support for apps whose lifecycle isn't tied to a single "Main" window, such as background apps (apps that don't have any windows) and document-based apps.
- We added support for app modal dialogs.
What's next?
Work on Toga's App interface isn't quite finished - we're expecting to finalise the Document API in the near future. Once that work is complete, our focus will be the mobile Python 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 most of the rest of the quarter to release; but there should be some initial signs of progress by the end of the month.
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
- Add an option to select the Android base image when creating new emulators
- Add an API to entirely replace the style of a widget
- Correct the handling of quotation marks in Android 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.
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.