Why macOS App Version Numbers Lie to You (And How We Fixed 8 Real-World Edge Cases)
Running App Mechanic across a fleet of Macs (MacBook Air, MacBook Pro, and iMac) quickly reveals a dirty secret of macOS packaging: CFBundleShortVersionString in Info.plist is only half the story.
1. The Truncated JetBrains Plist (Android Studio)
Android Studio stamps only 2026.2 in Info.plist even when you have 2026.2.2.8 installed. The real release version lives inside Contents/Resources/product-info.json under dataDirectoryName (AndroidStudio2026.2.2). App Mechanic now inspects product-info.json and performs prefix-aware build matching.
2. Electron Shell vs. Cloud Engine (Descript & Hermes)
Descript's DMG is versioned 114.0.4 after its cloud editor, but its Electron wrapper stamps 2.22.1 inside app.asar/package.json and Info.plist. Meanwhile, local Hermes.app builds stamp 0.0.1 in Info.plist while the real version lives in hermes --version.
3. Mac App Store vs. Homebrew Cask Drift (WhatsApp)
Direct-download web builds in Homebrew Cask (26.44.12) frequently ship days ahead of Apple App Store review (26.43.75). By verifying Contents/_MASReceipt, App Mechanic isolates Mac App Store apps to mas outdated so you never get nagged about an update Apple hasn't approved yet.
4. Keg-Only Homebrew Node & GUI Subshells
When macOS GUI apps open Terminal via AppleScript, keg-only formulae like /opt/homebrew/opt/node@22/bin aren't always on PATH—causing npm install -g shebangs (#!/usr/bin/env node) to fail with env: node: No such file or directory. App Mechanic now discovers and injects your active Node runtime automatically.
5. Upstream App Rebrands (Superset → Paradev)
When Superset rebranded to Paradev, existing /Applications/Superset.app installs risked losing catalog tracking. Our new rebrand registry cross-maps legacy bundles to their new Homebrew Cask tokens while keeping 1-click Launch pointed at your on-disk bundle.