Most of the logic from the MainMenu+Startup extension has now been
completely removed. It has now been moved to the Startup+Launch
extension, which is a better place for this logic. Where necessary,
functions have been annotated with MainActor.
Additionally, checking which third-party apps have been installed
has been moved to `App+DetectApps.swift`, a separate extension.
- RealShell is not reloaded during runtime (bugfix?)
- Container variables are now private(set)
- Initialization now also sets `webApi` property (new)
- It is only possible to run `bind` on a `Container` once now
(previously known as `prepare`)
- Preparation for upcoming WebApi to replace `curl` command
(for checking for updates)
The newer Swift native method is broadly supported and can properly
handle complex UTF-8 characters like emoji, whereas the old API does
not work correctly with emoji.
In most cases, this likely wouldn't have caused any issues but it does
make things a little cleaner now, and ensures we won't encounter emoji
trouble in the future.
- Added extra check for valid `brew info php --json` output
- Moved PHP binary check and PHP installation not broken checks to `core`
- Workaround for Homebrew logs appearing in JSON output