This commit avoids the usage of `readDataToEndOfFile` and instead uses
a helper method that:
- Attempts to use `.readToEnd()`
- Has a fallback to return an empty string
- Attempts to close the pipe
- Icons are now loaded if possible (if the path could be inferred)
- Some new apps that are detected by default:
- Browsers: Safari, Google Chrome, Microsoft Edge, Firefox, Brave,
Arc, Zen
- Editors: WebStorm, VSCodium
- Git GUI: Tower, SourceTree
- Terminal: Ghostty
- `openWithEditor` has been refactored to `openWithApp` which now lets
browsers open domains from their URL, not from their local folder.
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.
Cask conflict (`php` vs `shivammathur/php/php`)
- The cask conflict check has been removed, now that #310 is resolved
by correctly checking the formula alias via the correct `php` formula.
(This was addressed in ebf872621ab58f71f4136bf1f27937592a5dfe5e.)
Translations
- Some missing translations have been added.
- Some empty or unused translation keys have been removed.
- 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)