import { pageMetadata } from "@/lib/page-metadata"

export const metadata = pageMetadata("ios")

# iOS 시뮬레이터

실제 모바일 사파리를 사용하여 인증된 모바일 웹 테스트를 수행합니다. 네이티브 자동화에 Appium과 XCUITest를 사용합니다.

## 요구 사항

- 설치된 Xcode를 포함한 macOS
- iOS 시뮬레이터 런타임 (Xcode를 통해 다운로드)
- Appium 및 XCUITest 드라이버

## 설정

```bash
# Appium을 전역적으로 설치
npm install -g appium

# iOS용 XCUITest 드라이버 설치
appium driver install xcuitest

사용 가능한 디바이스 목록 보기

시스템에 있는 모든 iOS 시뮬레이터를 확인합니다:

agent-browser device list

# 출력:
# 사용 가능한 iOS 시뮬레이터:
#
#   ○ 아이폰 16 프로 (iOS 18.0)
#     F21EEC0D-7618-419F-811B-33AF27A8B2FD
#   ○ 아이폰 16 프로 맥스 (iOS 18.0)
#     50402807-C9B8-4D37-9F13-2E00E782C744
#   ○ 아이패드 프로 13인치 (M4) (iOS 18.0)
#     3A6C6436-B909-4593-866D-91D1062BB070
#   ...

기본 사용법

-p ios 플래그를 사용하여 iOS 모드를 활성화합니다. 작업 흐름은 데스크탑과 동일합니다:

# 아이폰 16 프로에서 사파리 실행
agent-browser -p ios --device "아이폰 16 프로" open https://example.com

# 참조를 사용해 스냅샷 가져오기 (데스크탑과 동일)
agent-browser -p ios snapshot -i

# 참조를 사용해 상호작용
agent-browser -p ios tap @e1
agent-browser -p ios fill @e2 "텍스트"

# 스크린샷 찍기
agent-browser -p ios screenshot mobile.png

# 세션 종료 (시뮬레이터 종료)
agent-browser -p ios close

모바일 전용 명령어

# 스와이프 제스처
agent-browser -p ios swipe up
agent-browser -p ios swipe down
agent-browser -p ios swipe left
agent-browser -p ios swipe right

# 거리 지정 스와이프 (픽셀 단위)
agent-browser -p ios swipe up 500

# 탭 (클릭의 별칭, 터치에 더 명확한 의미 제공)
agent-browser -p ios tap @e1

환경 변수

환경 변수를 통해 iOS 모드를 구성합니다:

export AGENT_BROWSER_PROVIDER=ios
export AGENT_BROWSER_IOS_DEVICE="아이폰 16 프로"

# 이제 모든 명령어가 iOS를 사용합니다
agent-browser open https://example.com
agent-browser snapshot -i
agent-browser tap @e1
변수설명
AGENT_BROWSER_PROVIDERiOS 모드를 활성화하려면 ios로 설정
AGENT_BROWSER_IOS_DEVICE디바이스 이름 (예: "아이폰 16 프로")
AGENT_BROWSER_IOS_UDID디바이스 UDID (디바이스 이름 대체)

지원되는 디바이스

Xcode에 포함된 모든 iOS 시뮬레이터가 지원되며, 다음과 같습니다:

  • 모든 아이폰 모델 (아이폰 15, 16, 17, SE 등)
  • 모든 아이패드 모델 (아이패드 프로, 아이패드 에어, 아이패드 미니 등)
  • 여러 개의 iOS 버전 (17.x, 18.x 등)

실제 디바이스는 또한 USB 연결을 통해 지원됩니다 (아래 참조).

실제 디바이스 지원

Appium은 USB를 통해 연결된 실제 iOS 디바이스의 사파리를 제어할 수 있습니다. 이는 추가적인 한 번만의 설정이 필요합니다.

1. 디바이스의 UDID 확인

# 연결된 디바이스 목록 보기
xcrun xctrace list devices

# 또는 시스템 프로파일러를 통한 확인
system_profiler SPUSBDataType | grep -A 5 "iPhone\|iPad"

2. WebDriverAgent 서명 (한 번만 수행)

실제 디바이스에서 실행하기 위해 WebDriverAgent는 애플 개발자 인증서로 서명되어야 합니다.

# WebDriverAgent Xcode 프로젝트 열기
cd ~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
open WebDriverAgent.xcodeproj

Xcode에서:

  1. WebDriverAgentRunner 타겟 선택
  2. 서명 및 기능으로 이동
  3. 팀 선택 (애플 개발자 계정 필요, 무료 계정도 가능)
  4. Xcode가 서명을 자동으로 관리하도록 설정

3. agent-browser와 함께 사용

# USB로 디바이스 연결 후, UDID 사용
agent-browser -p ios --device "<DEVICE_UDID>" open https://example.com

# 고유한 경우 디바이스 이름 사용 가능
agent-browser -p ios --device "존의 아이폰" open https://example.com

실제 디바이스 참고 사항

  • 첫 실행 시 디바이스에 WebDriverAgent 설치 (디바이스에서 신뢰 요청이 필요할 수 있음)
  • 디바이스는 잠금 해제되어 있고, USB로 연결되어 있어야 함
  • 시뮬레이터보다 초기 연결이 약간 느림
  • 실제 사파리 성능 및 동작에 대한 테스트 가능
  • 최초 설치 시, 설정 → 일반 → 가상 네트워크 및 장치 관리로 이동하여 개발자 인증서 신뢰

성능 참고 사항

  • 첫 실행: 시뮬레이터 부팅 및 Appium 시작에 30~60초 소요
  • 다음 명령어: 빠름 (시뮬레이터는 계속 실행됨)
  • 종료 명령어: 시뮬레이터와 Appium 서버 종료

데스크탑과의 차이점

기능데스크탑iOS
브라우저크롬/파이어폭스/웹킷사파리만 지원
지원됨단일 탭만 지원
PDF 내보내기지원됨지원되지 않음
화면 캡처지원됨지원되지 않음
스와이프 제스처네이티브 아님네이티브 지원

문제 해결

Appium을 찾을 수 없음

# Appium이 전역으로 설치되었는지 확인
npm install -g appium
appium driver install xcuitest

# 설치 확인
appium --version

사용 가능한 시뮬레이터 없음

Xcode를 열고 설정 → 플랫폼에서 iOS 시뮬레이터 런타임을 다운로드하세요.

시뮬레이터 부팅 실패

직접 Xcode나 시뮬레이터 앱에서 시뮬레이터를 수동으로 부팅하여 작동하는지 확인한 후, 다시 agent-browser로 시도하세요.