실제 iOS 기기에서 Maestro: 실무 가이드
Source: Dev.to
TL;DR
Maestro는 공식적으로 물리적인 iOS 기기를 지원하지 않습니다. 이를 해결하기 위해 maestro-ios-device를 만들었습니다. 기존에 사용하던 YAML 흐름이 실제 iPhone에서도 그대로 작동합니다.
The problem
- Maestro 테스트는 iOS 시뮬레이터에서는 통과하지만 실제 iPhone에서는 통과하지 않습니다.
- 실제 iOS 디바이스에 대한 공식 지원은 내년 어느 시점까지는 기대되지 않습니다.
- 클라우드 제공업체(예: BrowserStack)는 자체 인프라에서 Maestro를 실행할 수 있지만 구독이 필요하고 앱/데이터를 외부로 전송합니다.
현재 플랫폼 지원 (2025년 12월)
| 플랫폼 | 시뮬레이터 | 실제 디바이스 |
|---|---|---|
| Android | ✅ | ✅ |
| iOS | ✅ | ❌ |
우리의 솔루션: 물리 iOS 기기와 연결하는 브리지
기능
- 기존 Maestro YAML 플로우를 실제 iPhone에서 실행
- 테스트 파일을 수정할 필요 없음
- 여러 기기에서 병렬 테스트 지원
- iOS 16.x – 18.x 지원
제공하지 않는 기능
- 클라우드 구독 요구
- 앱이나 테스트 데이터를 외부로 전송
- Maestro 테스트 작성 방식을 변경
설치
curl -fsSL https://raw.githubusercontent.com/devicelab-dev/maestro-ios-device/main/setup.sh | bash
디바이스 브리지 시작하기
maestro-ios-device --team-id YOUR_TEAM_ID --device DEVICE_UDID
테스트 실행하기
maestro --driver-host-port 6001 \
--device DEVICE_UDID \
--app-file /path/to/app.ipa \
test flow.yaml
예시 YAML 흐름 (변경 없음)
appId: com.example.app
---
- launchApp
- tapOn: "Login"
- inputText: "user@example.com"
- tapOn: "Submit"
- assertVisible: "Welcome"
여러 실제 iOS 기기에서 병렬 테스트
원래 Maestro 코드베이스에는 하드코딩된 포트 제한이 있었으며, 이를 제거했습니다.
Terminal 1
maestro-ios-device --team-id ABC123 --device IPHONE_12_UDID --driver-host-port 6001
Terminal 2
maestro-ios-device --team-id ABC123 --device IPHONE_14_UDID --driver-host-port 6002
이제 테스트 스위트를 기기마다 나누어 실행하면 CI 시간을 절반(또는 그 이상)으로 단축할 수 있습니다.
How it works under the hood
- Device Detection – 개발자 모드가 활성화된 물리적 디바이스를 인식합니다.
- XCTest Runner – 테스트 드라이버를 실제 하드웨어에 빌드하고 배포합니다 (Apple 개발자 인증서가 필요합니다).
- Port Forwarding –
localhost를 디바이스의 HTTP 서버와 연결합니다. - Session Management – 실제 디바이스 제약을 원활하게 처리합니다 (예: 앱 재설치를 통한
clearState).
지원되는 명령 및 상태
| 명령 | 상태 | 비고 |
|---|---|---|
| launchApp | ✅ | – |
| tapOn | ✅ | – |
| inputText | ✅ | – |
| assertVisible | ✅ | – |
| clearState | ✅ | 앱을 재설치합니다 (--app-file 필요) |
| setLocation | ⚠️ | 추가 설정 필요 |
| addMedia | ❌ | iOS 플랫폼 제한 |
배경
- DeviceLab은 팀이 자체 물리적 디바이스에서 테스트할 수 있는 방법이 필요했습니다.
- Maestro 코드베이스에는 이미 iOS 디바이스 지원을 위한 기반이 포함되어 있었지만, 최종 통합만이 부족했습니다.
- 우리는 업스트림 저장소에 PR #2856을 제출했지만, 커뮤니티 PR은 병합되는 데 시간이 걸릴 수 있어 maestro-ios-device를 독립 실행형 도구로 출시했습니다.
버전 호환성
| Maestro 버전 | 상태 |
|---|---|
| 2.0.10 | ✅ 테스트됨 |
| 2.0.9 | ✅ 테스트됨 |
| Other versions | 테스트되지 않음 |
요구 사항
- Xcode가 포함된 macOS (코드 서명에 필요)
- Apple Developer 계정 (무료 티어는 개인 기기에서 작동)
- 개발자 모드가 활성화된 iOS 기기
FAQ
이 도구가 공식 도구인가요?
아니요. 이는 비공식 커뮤니티 도구이며 mobile.dev 또는 Maestro 팀에서 지원하지 않습니다. 공식 iOS 디바이스 지원이 제공되면 전환할 것을 권장합니다.
기존 YAML 플로우가 작동하나요?
예. iOS 시뮬레이터에서 실행된다면 실제 디바이스에서도 별도의 변경 없이 실행됩니다.
도구가 무료인가요?
예. Apple Developer 계정만 있으면 됩니다(개인 디바이스용 무료 티어면 충분합니다).
데이터가 네트워크를 떠나나요?
아니요. 모든 테스트는 사무실 내 자신의 디바이스에서 실행되며 외부 서비스로 전송되는 내용이 없습니다.
링크
- 도구:
- PR:
- 원본 이슈:
DeviceLab에 의해 제작되었습니다 – 다른 사람의 장비를 빌리지 않고 여러분의 장치를 테스트 랩으로 전환하세요.