Improve logs UI and refactor architecture for better maintainability
UI Improvements
- Add collapsible logs panel with Xcode-style chevron toggle button
- Remove rounded corners from individual log entries for cleaner appearance
- Add clear logs button with red styling to distinguish destructive action
- Set logs panel to be hidden by default to save screen space
- Implement smooth collapse animation using height transitions instead of slide effects
- Reorganize log controls into compact header with copy/clear buttons only when expanded
- Improve log entry styling with better padding and spacing
Architecture Refactoring
- Extract MapSceneCoordinator for better separation of map-related logic
- Create DeviceLocationRunning protocol to abstract device communication
- Add SavedLocationsStore for persistent location management
- Introduce AppPlatform and AppStorageKey enums for type safety
- Split iOS device discovery into dedicated IOSUSBDeviceDiscovery service
- Add SimulatorDiscovery service for cleaner simulator management
- Create ProcessRunner utility for consistent command execution
- Add CoordinateParsing utilities for location data handling
- Extract SimVirtualLocationAlertModifier for reusable alert presentation
Code Quality Improvements
- Replace magic strings with typed constants in AppStorageKey
- Improve error handling with structured approach
- Add proper async/await patterns for device discovery
- Enhanced logging with structured message formatting
- Better memory management with weak references
The logs panel now behaves like Xcode's console - collapsible, clean,
and non-intrusive while providing full logging functionality. The
architecture is now more modular and testable.