A professional macOS menu bar application for managing Android devices through ADB and Scrcpy, built with modern Swift architecture patterns.
- Device Management:
- List connected Android devices
- Refresh device list in real-time
- Display device status (connected/unauthorized)
- App Management:
- List installed apps per device
- Launch apps directly from menu
- Refresh app list dynamically
- Device Mirroring:
- Full device screen mirroring via Scrcpy
- Launch apps in dedicated windows
- Custom display resolutions
- ADB Management:
- Automatic ADB path discovery
- Daemon management
- Error handling and recovery
- Preferences:
- ADB status monitoring
- Error display and recovery guidance
The project follows Clean Architecture principles with the following layers:
- Services: Core services like ADB service, device management
- DI: Dependency injection container
- Constants: App-wide constants and configurations
- Repositories: Implementation of repository interfaces
- Parsers: Data parsing and transformation
- Services: Data-related services
- Models: Business models and entities
- UseCases: Business logic and use cases
- Repositories: Repository interfaces
- MenuBar: Menu bar UI components
- Preferences: Settings and preferences UI
Service | Protocol | Implementation | Description |
---|---|---|---|
ADB Manager | ADBServiceProtocol |
ADBService |
Handles all ADB operations and device communication |
Scrcpy Controller | ScrcpyServiceProtocol |
ScrcpyService |
Manages device mirroring and app launching |
protocol DeviceRepositoryProtocol {
func refreshDevices()
func fetchApps(for deviceID: String)
func launchApp(packageID: String, deviceID: String)
func mirrorDevice(deviceID: String)
}
graph TD
A[StatusMenuController] --> B[MenuViewModel]
B --> C[DeviceRepository]
C --> D[ADBService]
C --> E[ScrcpyService]
F[PreferencesView] --> G[PreferencesViewModel]
G --> C
- User Action (e.g., Refresh Devices)
- ViewModel receives action
- Repository coordinates services
- Service executes platform-specific operations
- Combine Publishers propagate changes back
- UI updates automatically
- Clone the repository
- Install dependencies:
brew install android-platform-tools
- Open
AndroLaunch.xcodeproj
in Xcode - Build and run the project
- Xcode 15.0+
- macOS 13.0+
- Android SDK
- ADB (Android Debug Bridge)
- Open the project in Xcode
- Select your target device
- Build and run (βR)
- Unit tests are located in the
Tests
directory - UI tests are located in the
UITests
directory
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature
) - Commit changes
- Push to branch
- Open Pull Request
This project is licensed under the MIT License.