Completions were invoked on a background queue. Most call sites wrapped their UI work in DispatchQueue.main.async, but upgradeSingle's completion calls refreshAll(), which sets statusMenuItem.title directly — an AppKit mutation off the main thread. It also raced on cachedOutdated / lastOutdatedFetch (written from background, read from main). runBrew now always dispatches its completion to the main queue, so every caller can safely touch UI, and the now-redundant inner main.async hops are removed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .claude/skills | ||
| asset | ||
| BrewBar | ||
| BrewBar.xcodeproj | ||
| BrewBarTests | ||
| .gitignore | ||
| .swiftlint.yml | ||
| LICENSE | ||
| README.md | ||