이 AI 에이전트를 사용하여 내 iPhone을 자동화했습니다
요약
Mobilerun 서비스를 활용하여 iOS의 샌드박스 제한을 극복하고 iPhone을 자동화하는 방법을 소개합니다. WebDriverAgent(WDA)를 기반으로 클라우드와 연결하여 AI 에이전트가 실제 사람처럼 기기를 제어할 수 있는 설정 과정을 다룹니다.
핵심 포인트
- Mobilerun은 WDA를 활용해 iOS 기기에 입력 주입 및 스크린샷 노출 가능
- Xcode와 WebDriverAgent를 통해 iPhone에 제어 환경 구축
- 개발자 모드 활성화 및 자동 잠금 해제 등 필수 설정 단계 안내
- 무료 Apple ID 사용 시 7일마다 빌드 만료 및 기기 제한 주의
이 AI를 사용하여 내 iPhone을 자동화했습니다
저는 항상 Android 사용자들이 부러웠습니다. 휴대폰을 연결하고 몇 가지 ADB 명령어를 실행하면 몇 분 만에 기기에서 탭을 수행하는 봇을 가질 수 있으니까요. iOS는 저에게 그런 것을 허락하지 않았습니다. Apple의 샌드박싱 (Sandboxing) 구조 때문에 물리적인 iPhone을 원격으로 제어할 수 있는 공식적인 방법이 없었습니다. 그래서 오랫동안 "내 iPhone을 자동화한다"는 말은 제가 실행에 옮길 수 없는 문장이었습니다.
Mobilerun을 발견하면서 상황이 바뀌었습니다. 이 서비스는 자신의 iPhone을 클라우드에 연결하고, 실제 사람처럼 앱을 탭하고, 타이핑하고, 탐색하는 AI 에이전트에게 기기를 넘겨줄 수 있게 해줍니다. 저는 제 휴대폰에 직접 설정하여 어디까지 가능한지 확인해 보기로 했습니다. 그 과정은 다음과 같았습니다.
시작 전 필요한 사항
코드를 건드리기 전에 다음 사항들을 준비했습니다:
- Personal Phone 구독이 포함된 Mobilerun 계정
- Xcode가 설치된 Mac
- USB로 연결된 내 iPhone
- 서명(Signing) 기능이 있는 Apple ID (무료 개인 팀 계정도 괜찮습니다)
미리 알아두어야 할 점이 하나 있습니다. 무료 Apple ID를 사용하면 빌드(Build)가 7일 후에 만료되므로 주기적으로 다시 빌드하고 다시 신뢰(Re-trust)해야 하며, 한 번에 3대의 기기만 서명할 수 있습니다. 유료 Apple Developer 계정(연간 $99)을 사용하면 이 두 가지 제한이 모두 제거됩니다. 저는 우선 테스트를 위해 무료 Apple ID로 시작했습니다.
내부적으로 실제로 작동하는 방식
Mobilerun은 iOS에서 입력 주입(Input injection)과 스크린샷을 노출하는 오픈 소스 프로젝트인 WebDriverAgent (WDA)를 통해 iPhone을 제어합니다. Mobilerun은 더 높은 품질의 스트리밍, 낮은 지연 시간의 접근성 트리(Accessibility tree) 가져오기, 그리고 더 빠른 터치 입력을 위해 튜닝된 자체 포크(Fork) 버전을 유지 관리합니다. 아이디어는 간단합니다. Xcode를 사용하여 iPhone에 WDA를 한 번 빌드해 두면, mobilerun-ios라는 CLI 도구가 Mobilerun의 클라우드와 WebSocket 연결을 열고 내 기기를 온라인 상태로 유지합니다.
이 구조를 이해하고 나니 나머지 설정 과정이 훨씬 더 이해하기 쉬워졌습니다. 제가 정확히 수행한 단계는 다음과 같습니다.
1단계: 개발자 모드 켜기
개발자 모드 (Developer Mode)는 Xcode가 iPhone에 개발용 빌드를 설치하고 실행할 수 있게 해주는 기능입니다. 저는 설정(Settings) → 개인정보 보호 및 보안(Privacy & Security) → 개발자 모드(Developer Mode)로 이동하여 스위치를 켜고, 안내에 따라 휴대폰을 재시동했습니다. 재부팅 후 변경 사항을 확인했으며 설정이 완료되었습니다.
주의할 점 하나: 만약 개발자 모드 항목이 아예 보이지 않는다면, 이는 iPhone이 아직 Xcode가 실행 중인 Mac에 연결되지 않았기 때문입니다. iPhone을 연결하고 Xcode를 한 번 실행하면 해당 옵션이 나타날 것입니다.
2단계: 연결 상태를 유지하도록 iPhone 설정하기
개인용 자동화 휴대폰은 몇 시간 또는 며칠 동안 온라인 상태를 유지해야 하므로, 연결이 끊기지 않고 지속되느냐 아니면 계속해서 수동으로 관리해야 하느냐를 결정짓는 세 가지 설정을 변경해야 했습니다.
첫째, 자동 잠금 (Auto-Lock)을 비활성화했습니다. iPhone이 잠기면 화면이 검게 변하고 세션이 오프라인 상태가 되기 때문에, 설정(Settings) → 디스플레이 및 밝기(Display & Brightness) → 자동 잠금(Auto-Lock)을 '안 함(Never)'으로 설정했습니다.
둘째, 설정(Settings) → 일반(General) → 날짜 및 시간(Date & Time) → 자동으로 설정(Set Automatically)에서 자동 시간대 설정을 켰습니다. 이렇게 하면 기기의 시간대가 시뮬레이션된 위치와 동기화됩니다. 탈옥(jailbreak)하지 않은 기기에서는 수동으로 설정할 경우 제대로 작동하지 않습니다.
셋째 — 이 부분은 고민을 많이 했습니다 — 암호 (passcode)를 제거했습니다. WDA(WebDriverAgent)의 호스트 세션은 가끔 충돌하거나 만료되는데, Mobilerun은 이를 자동으로 재시작하지만 암호가 방해되지 않을 때만 가능합니다. 그렇지 않으면 재시작된 세션이 잠금 화면에 머물게 되고, 누군가 수동으로 잠금을 해제할 때까지 그대로 방치됩니다. 저는 이 휴대폰이 관리자 없이(unattended) 작동하기를 원했으므로, 설정(Settings) → Face ID 및 암호(Face ID & Passcode) → 암호 끄기(Turn Passcode Off)에서 암호를 껐습니다.
이 점을 분명히 말씀드리고 싶습니다: 암호를 제거하면 Face ID, Apple Pay 및 일부 iCloud 기능이 비활성화됩니다. 저는 이것을 위해 일상적으로 사용하는 메인 기기가 아닌, 자동화 전용 휴대폰을 사용했으며, 이를 시도하려는 모든 분께도 동일한 방식을 권장합니다.
3단계: WebDriverAgent 빌드 및 설치
이 과정은 전체 프로세스 중에서 단연코 가장 까다로운 부분이었습니다. 그리고 이후에 겪은 대부분의 연결 문제는 바로 이 단계에서의 서명(Signing) 또는 신뢰(Trust) 문제로 거슬러 올라갔습니다. 저는 천천히 진행했습니다.
저는 Mobilerun의 WDA 포크(fork)를 클론(clone)했습니다:
git clone --branch v1.1.0 https://github.com/droidrun/WebDriverAgent
(업스트림(Upstream) Appium WebDriverAgent도 작동하지만, 지연 시간(Latency)이 더 높고 스트리밍 FPS가 낮기 때문에 저는 Mobilerun의 포크를 사용했습니다.)
그 다음 저는 다음과 같이 수행했습니다:
- Xcode에서 WebDriverAgent.xcodeproj를 열었습니다.
- 연결된 제 iPhone을 실행 대상(Run destination)으로 선택했습니다.
- WebDriverAgentRunner 스킴(Scheme)을 선택했습니다.
- WebDriverAgentRunner와 WebDriverAgentBroadcast 타겟 모두에 대해, Signing & Capabilities를 열고, Automatically manage signing을 체크한 뒤, 제 Apple ID / Team을 선택했습니다. (WebDriverAgentBroadcast는 고프레임(High-FPS) 화면 스트리밍을 가능하게 하는 확장(Extension)입니다. 이를 건너뛰면 빌드에 실패하므로 건너뛰지 마세요.)
- Cmd+U를 눌러 테스트용 빌드(Build-for-testing)를 수행했습니다.
- iPhone에서 설정(Settings) → 일반(General) → VPN 및 기기 관리(VPN & Device Management) → 제 팀(Team)을 탭한 후 신뢰(Trust)를 눌러 인증서를 신뢰했습니다.
저는 여기서 두 가지 전형적인 문제에 부딪혔습니다. 첫째, "Failed to register bundle identifier" — 번들 ID(Bundle ID)는 Apple ID당 고유해야 하므로, runner의 ID에 접미사를 추가하고(예: com.facebook.WebDriverAgentRunner.) 이를 확장 프로그램(Extension)에서도 com.facebook.WebDriverAgentRunner..xctrunner.broadcast.와 같이 동일하게 맞추었습니다. 둘째, 첫 번째 Cmd+U 시도 시 "Could not launch WebDriverAgentRunner"가 발생했는데, 이는 단순히 인증서가 아직 신뢰되지 않았음을 의미했습니다. 기기에서 신뢰 설정을 마친 후 다시 Cmd+U를 누르자 성공적으로 진행되었습니다.
4단계: mobilerun-ios CLI 설치
WDA 빌드가 완료된 후, CLI를 설치했습니다. 저에게는 Homebrew가 가장 쉬운 경로였습니다:
brew install droidrun/tap/mobilerun-ios
Homebrew를 건너뛰고 싶다면 curl 설치 방법도 있습니다:
curl -fsSL https://media.mobilerun.ai/releases/mobilerun-ios/install.sh | sh
다음 명령어로 설치가 올바르게 되었는지 확인했습니다:
mobilerun-ios --version
5단계: 로그인
다음 단계:
mobilerun-ios login
CLI는 짧은 코드를 출력하고 브라우저에 인증 페이지를 열었습니다. 거기서 승인한 후, mobilerun-ios whoami를 통해 모든 것이 제대로 작동하는지 확인했습니다.
만약 CI(지속적 통합) 또는 헤드리스 (headless) 환경에서 이를 설정하는 경우, 브라우저 흐름을 완전히 건너뛰고 대신 API 키를 사용할 수 있습니다:
export MOBILERUN_IOS_TOKEN=dr_sk_your_api_key
6단계: iPhone 연결하기
iPhone을 연결하고 잠금을 해제한 상태에서, 사용 가능한 장치 목록을 확인했습니다:
mobilerun-ios list
결과는 다음과 같이 표시되었습니다:
UDID NAME TYPE OS STATE PORTAL
00008020-001A2B3C4D5E6F70 My iPhone real 18.2 ready —
UDID를 복사하여 연결을 시작했습니다:
mobilerun-ios 00008020-001A2B3C4D5E6F70
UDID를 입력하지 않으면 연결된 모든 iPhone에 연결됩니다. 이 명령은 실행되는 동안 장치를 온라인 상태로 유지하며, Ctrl+C를 누르면 세션이 종료됩니다. 백그라운드에서 계속 실행되기를 원하는 설정의 경우, 대신 detach 플래그를 사용했습니다:
mobilerun-ios -d 00008020-001A2B3C4D5E6F70
이 명령은 PID와 로그 경로를 출력한 후 깔끔하게 종료되었습니다. 나중에 mobilerun-ios stop으로 중단할 수 있습니다.
7단계: 첫 번째 작업 실행하기
Mobilerun 대시보드의 Devices 페이지를 열었더니, 연결된 Personal Phone으로 제 iPhone이 나타났습니다. 거기서 Playground로 들어가 장치를 선택하고, 모든 것이 처음부터 끝까지(end to end) 제대로 작동하는지 확인하기 위해 작업을 시작했습니다. 결과는 성공적이었습니다. 이제 제 iPhone은 어디에서든 AI 에이전트가 실제로 제어할 수 있는 대상이 되었습니다.
발생한 문제 (및 해결 방법)
진행 과정에서 몇 가지 문제가 발생하여, 도움이 될 수 있도록 여기에 나열합니다:
WebDriverAgentRunner가 실행 시 충돌(crashing)하는 경우는 보통 Xcode에서 runner 타겟을 다시 서명(re-sign)하고, Cmd+U를 다시 누르기 전에 인증서가 신뢰되는지 확인해야 함을 의미했습니다.
mobilerun-ios list 명령어가 기기를 표시하지 않을 때는 거의 항상 세 가지 중 하나가 원인이었습니다. 케이블이 제대로 된 데이터 케이블이 아닌 충전 전용 케이블이거나, iPhone이 잠겨 있거나, 또는 "이 컴퓨터를 신뢰하시겠습니까?"라는 프롬프트를 수락하지 않은 경우였습니다.
인증 실패(Auth failures)는 mobilerun-ios login을 다시 실행하거나, API 키의 경우 MOBILERUN_IOS_TOKEN이 실제로 작업 중인 동일한 셸(shell)에 내보내기(exported) 되었는지 재확인함으로써 해결되었습니다.
세션 도중 화면이 검게 변한다면, 이는 자동 잠금(Auto-Lock) 기능이 다시 활성화된 것이었습니다. 이를 '안 함(Never)'으로 다시 설정하면 매번 해결되었습니다.
그리고 몇 시간 뒤 연결이 끊기고 기기가 잠금 화면에 그대로 멈춰 있다면, 이는 WDA(WebDriverAgent) 세션은 재시작되었으나 암호(passcode)가 이를 차단하고 있음을 의미했습니다. 수동으로 잠금을 해제하면 즉시 해결되었고, 무인 설정(unattended setup) 환경에서는 암호를 제거하는 것이 영구적인 해결책이었습니다.
한 가지 더 알아둘 점은, TikTok의 접근성 트리(accessibility tree)를 덤프(dumping)하면 타임아웃이 발생하며 자동화 세션이 충돌한다는 것입니다. 그래서 저는 당분간 TikTok 관련 작업은 피하고 있습니다.
이번 경험을 통해 배운 점
순정 iPhone을 클라우드 연결 자동화 장치로 만드는 데는 개발자 모드(Developer Mode), WebDriverAgent의 Xcode 빌드 한 번, 그리고 단 하나의 CLI 명령어가 필요했습니다. Xcode 서명(signing) 단계가 가장 많은 시간과 인내심을 요구했지만, 이는 일회성 비용입니다. 저처럼 무료 Apple ID를 사용하는 경우에는 일주일에 한 번 정도 발생할 뿐입니다.
더 자세히 알고 싶다면, iPhone 연결에 관한 Mobilerun의 전체 문서는 여기에 있습니다: docs.mobilerun.ai/guides/connect-iphone
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기