Fix iOS command flakiness and harden device/runner concurrency.
- Session store: replace the non-blocking FileLock.exclusive (which made
concurrent commands sharing a session fail with errno 35) with a FileMutex
that queues intra- and cross-process.
- CLI: auto-detect the backend across platforms when --platform is omitted,
so --serial <udid> / --device "<name>" resolve regardless of platform;
remember the resolved platform in the session to keep the fast path.
DEVICE_NOT_FOUND now lists devices from every platform with labels.
- iOS runner: tolerant isAlive (no false-negative relaunch churn), a
per-device cross-process launch lock with double-check, and per-device
command serialization — all on a shared FileMutex.
- Regenerate version.dart from pubspec as part of `make compile` so
`ad --version` can't drift (was stuck at 0.0.4).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>