터미널에서 Android·iOS 에뮬레이터를 바로 제어하는 SimUtil
SimUtil은 Dart 기반 Nocterm TUI로 터미널에서 Android 에뮬레이터와 iOS 시뮬레이터를 탐색·실행·연결하고 플러그인과 ADB 도구를 통해 기기를 제어하는 도구이다.
TL;DR
SimUtil은 Dart와 Nocterm 기반의 크로스플랫폼 터미널 UI 도구로서 macOS, Linux, Windows 환경에서 Android 에뮬레이터와 iOS 시뮬레이터를 터미널에서 탐색하고 즉시 실행하도록 설계되었다. README에 명시된 주요 작동 방식은 장치 목록에서 Enter로 즉시 부팅하는 One-Key Launch, Android 런치 옵션과 내장 ADB 도구로 무선 페어링과 로그캣 필터링을 지원하는 통합 워크플로, 그리고 YAML 설정 파일을 통해 scrcpy 등 외부 셸 명령을 플러그인 방식으로 등록해 선택한 기기 대상 명령을 동적으로 실행하는 구조이다. 이 도구는 GUI 기반 IDE를 실행하지 않고도 다중 기기 모니터링과 외부 도구 연동을 터미널 중심으로 집약하려는 개발 환경에 적합하며 설치는 바이너리 스크립트·Homebrew·pub.dev·소스 빌드 등 여러 경로로 가능하다. 제한점으로서 README에는 성능 수치나 자동화된 테스트 결과가 포함되어 있지 않아 대규모 병렬 에뮬레이터 운영의 한계나 리소스 제약에 관한 정보는 별도로 확인해야 한다.
주요 기능
- 에뮬레이터 및 시뮬레이터를 즉시 실행하는 One-Key Launch 기능을 제공한다. 사용자는 목록에서 기기를 선택한 뒤 Enter 키만으로 장치를 부팅하거나 재시작할 수 있다. 이 기능은 Android Studio나 Xcode를 직접 열지 않고도 기기를 기동하는 작업을 간소화한다.
- Android 에뮬레이터 실행 시 Normal, Cold Boot, No Audio 같은 세부 런치 옵션을 지정할 수 있다. 사용자는 부팅 동작과 오디오 옵션을 조합하여 다양한 시나리오로 에뮬레이터를 시작할 수 있다. 런치 옵션은 즉시 적용되는 형태로 TUI에서 선택 가능하다.
- 내장된 ADB 도구로 무선 연결과 페어링을 지원한다. IP 주소를 통한 연결과 Android 11 이상에서의 6자리 코드 페어링 및 QR 코드 페어링을 처리할 수 있다. ADB 관련 작업은 별도 외부 툴을 직접 실행하지 않고도 SimUtil 인터페이스에서 수행 가능하도록 통합되어 있다.
- 플러그인 시스템으로 scrcpy나 Maestro 같은 외부 셸 커맨드를 설정 파일로 등록해 실행할 수 있다. 플러그인은 commands 항목으로 여러 명령을 정의하고 플랫폼 필터·실행 모드·단축키를 지정할 수 있다. 플러그인은 코드 변경 없이 YAML 설정만으로 추가되며, 선택한 기기에 대해서만 관련 명령을 표시하도록 조건을 설정할 수 있다.
- 로그캣 뷰어와 필터 기능을 통해 Android 에뮬레이터의 로그를 터미널에서 확인할 수 있다. 실시간 로그 스트림을 확인하면서 필터를 적용해 관심 로그만 추적할 수 있다. 로그 기능은 문제 디버깅과 런타임 상태 확인에 사용 가능하다.
어떻게 동작하는가
SimUtil은 Dart 언어로 작성되었고 Nocterm 터미널 UI 프레임워크 위에 UI를 구성하여 키 입력 처리와 창 분할, 테마 렌더링을 구현한다. 내부적으로는 로컬 셸 명령과 플랫폼 툴(예: ADB, scrcpy)의 존재를 확인한 뒤 설정된 명령을 spawn하거나 분리된 프로세스로 실행하는 방식으로 외부 도구를 호출한다. 플러그인 설정은 ~/.simutil/settings.yaml에 저장되고 템플릿 변수({device.id}, {device.name})가 인수에 치환되어 선택된 기기를 대상으로 명령이 동적으로 실행된다.
해결 문제
에뮬레이터와 시뮬레이터를 관리하기 위해 Android Studio나 Xcode를 반복해서 열어야 하는 작업 흐름을 간소화한다. SimUtil은 터미널 환경에서 장치 목록을 한눈에 보여주고 키 입력으로 부팅·종료·연결 같은 작업을 수행하게 하여 개발자의 반복 작업 시간을 줄인다. 또한 무선 ADB 페어링과 외부 화면 미러링 도구 호출을 통합하여 여러 도구를 오가며 수행하던 절차를 하나의 TUI로 통합한다.
지금 주목받는 이유
README에 Product Hunt 배지가 포함되어 있고 GitHub release 배지와 스타 수 배지가 노출되어 있어 공개 노출과 사용자의 관심이 존재한다. 터미널 기반으로 에뮬레이터 관리를 집약한 설계가 커맨드라인 중심의 개발자 워크플로와 맞아떨어진다. 또한 플러그인으로 외부 도구 연동을 손쉽게 구성할 수 있다는 점이 확산 요인으로 작용한다.
차별점
- 터미널에 최적화된 TUI를 제공한다는 점이 차별화 요소이다. Nocterm 기반 UI로 키 중심 조작과 창 분할을 통해 에뮬레이터 목록, 디바이스 상세, 기기 미러를 한 화면에 배치할 수 있다. 이로 인해 GUI 기반 IDE를 열지 않고도 동일한 관리 작업을 수행할 수 있다.
- 플러그인 설정을 YAML 파일로 관리하여 코드 변경 없이 외부 도구를 확장할 수 있다. 플러그인 단위로 availability 검사와 플랫폼 필터, 단축키를 지정할 수 있어 다양한 개발 워크플로에 맞춰 커스터마이즈가 가능하다. 플러그인 명령은 실행 모드(detached·inherit) 설정으로 분리 실행 또는 부모 프로세스 상속 실행을 선택하도록 구성된다.
- ADB 관련 유틸리티와 무선 페어링 워크플로를 TUI에 통합하여 별도 ADB 명령을 수동 입력할 필요를 줄였다. IP 연결, 6자리 코드 페어링, QR 코드 페어링과 같이 플랫폼별 페어링 옵션을 메뉴로 제공한다. 이 통합은 장치 연결과 로그 확인을 동일한 인터페이스에서 처리하려는 환경에 적합하다.
사용 사례
- 일상적인 모바일 앱 개발에서 에뮬레이터를 빠르게 실행하고 상태를 전환하는 용도로 사용할 수 있다. 개발자는 하나의 터미널 창에서 여러 기기를 병렬로 띄우고 즉시 전환하면서 테스트 시나리오를 반복할 수 있다. GUI 기반 IDE를 켜지 않고도 반복적인 기기 제어 작업을 단축할 수 있다.
- 물리 Android 기기를 무선으로 연결하여 디버깅하거나 화면을 미러링하는 작업에서 활용할 수 있다. README에 명시된 ADB 무선 연결, 6자리 코드 페어링, QR 코드 페어링 기능을 통해 케이블 연결 없이 원격 디바이스에 접근할 수 있다. scrcpy 같은 플러그인을 통해 원격 기기 화면을 별도 프로세스로 실행하여 제어할 수 있다.
- CI 환경이나 원격 개발 서버에서 GUI 접근이 제한된 상황에서 원격으로 에뮬레이터를 관리하는 목적으로 적용할 수 있다. TUI 환경에서 부팅 옵션과 로그 확인, 플러그인 실행을 스크립트화하면 비대화형 환경에서도 장치 운영을 자동화할 수 있다.
- 디버깅 중 실시간 로그 확인 및 필터링을 통해 문제 추적 작업에 사용할 수 있다. SimUtil의 로그캣 뷰어는 필터링 기능을 제공하므로 잡음이 많은 로그에서 관심 있는 항목만 포착하여 조사하기가 용이하다. 로그와 기기 제어를 같은 도구 내에서 처리하면 문제 재현과 원인 파악 속도가 빨라진다.
시작하기
바이너리 설치는 README의 curl | bash 한 줄 설치 스크립트 또는 PowerShell용 설치 스크립트를 실행하는 방식으로 시작할 수 있다. macOS나 Linux 환경에서는 Homebrew 탭을 추가한 뒤 brew install simutil로 설치할 수 있고 Dart 환경에서는 dart pub global activate simutil으로 설치해 전역 명령으로 실행할 수 있다. 소스에서 빌드하려면 git clone 후 dart pub get을 실행하고 dart pub global activate --source path . 명령으로 로컬 경로를 활성화한 뒤 simutil 명령으로 실행하면 된다.
요구사항
- macOS, Linux, Windows 세 플랫폼에서 실행 가능하다고 README에 명시되어 있다. 이는 각 운영체제용 바이너리 또는 Dart 기반 설치 방식 모두를 지원하는 구조임을 나타낸다. 소스에서 직접 설치하려면 시스템에 Dart SDK가 설치되어 있어야 한다.
이미지 분석


810
Stars
101
Forks
+214
Trending
1
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.