Snapshot (Fastlane)은 지원되는 모든 기기와 언어에서 iOS 앱의 스크린샷을 자동으로 생성하는 도구입니다. 시뮬레이터를 통해 수동으로 스크린샷을 만드는 것과 달리 Snapshot은 UI 테스트를 실행하고 앱의 지정된 지점에서 스크린샷을 촬영합니다. 공식 Fastlane 문서(2026)에 따르면 Snapshot은 릴리스용 스크린샷 준비 시간을 4시간에서 15분으로 단축합니다.
주요 사항
Snapshot (Fastlane)은 App Store용 앱 스크린샷 생성을 자동화하는 Fastlane 에코시스템의 구성 요소입니다. iOS 시뮬레이터에서 UI 테스트를 실행하고, 지정된 앱 상태에서 스크린샷을 촬영하며, 각 언어와 기기에 맞는 올바른 이름으로 구조화된 디렉토리에 저장합니다.
Snapshot이 없으면 개발자는 수동으로 시뮬레이터를 시작하고, 각 화면을 열고, Cmd+S로 스크린샷을 찍고, 언어를 전환하고 모든 조합에 대해 이 프로세스를 반복해야 합니다. 스크린샷 자동화는 ASO 최적화의 핵심 요소입니다. App Store는 각 새 릴리스마다 최신 스크린샷을 요구하고 60개 이상의 스크린샷을 수동으로 업데이트하는 데는 몇 시간의 작업이 필요하기 때문입니다.
App Store Connect 문서(2025)에 따르면 현지화된 스크린샷이 있는 앱은 대상 국가에서 25% 더 많은 전환을 얻습니다. Snapshot을 사용하면 팀이 한 번의 실행으로 32개 언어의 시각적 콘텐츠를 업데이트할 수 있으며, 이는 앱의 새로운 기능과 관련된 마케팅 캠페인에 특히 중요합니다.
App Store에 게시하는 모든 프로젝트에서 Snapshot을 사용하세요 — 릴리스 프로세스를 자동화하고 ASO를 개선하려는 팀의 표준 도구입니다.
Snapshot의 스크린샷 생성 프로세스는 여러 단계로 구성됩니다: UI 테스트 준비, Snapfile 구성, 시뮬레이터 시작 및 결과 수집. Snapshot은 지정된 기기와 언어에 대해 순차적으로 각 시뮬레이터를 시작하고, UI 테스트를 실행하며 snapshot() 함수가 호출된 지점에서 스크린샷을 촬영합니다.
모든 테스트가 완료되면 Snapshot은 App Store 요구 사항을 충족하는 이름으로 screenshots/[Language]/ 디렉토리에 스크린샷을 수집합니다. 각 스크린샷은 대상 기기에 맞는 해상도의 PNG 형식으로 저장됩니다. Snapshot은 생성된 모든 스크린샷의 시각적 확인을 위한 HTML 보고서도 생성합니다.
Snapshot이 작동하려면 앱의 XCTest UI 테스트 코드에 snapshot() 호출을 추가해야 합니다. 이 함수는 호출 시점의 현재 화면 상태 스크린샷을 촬영합니다. 개발자는 각 주요 작업(화면 열기, 데이터 입력, 탭 탐색, 결과 표시) 후에 snapshot()을 배치합니다.
UI 테스트 구조 예시: 테스트는 앱에 로그인하고, 로그인 화면을 캡처하기 위해 snapshot("01-LoginScreen")을 호출한 다음, 홈 화면으로 이동하여 홈 화면을 캡처하기 위해 snapshot("02-HomeScreen")을 호출합니다. XCTest는 iOS 앱의 단위 및 UI 테스트를 위한 Apple의 프레임워크로, Xcode에 직접 통합되어 있습니다.
// Snapshot용 UI 테스트
- (void)testScreenshots {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
snapshot(@"01-LoginScreen");
[app.textFields[@"email"] tap];
[app.textFields[@"email"] typeText:@"user@company.com"];
[app.buttons[@"Login"] tap];
snapshot(@"02-HomeScreen");
}
Snapshot은 Snapfile에 지정된 각 언어에 대해 자동으로 시뮬레이터 언어를 전환합니다. 앱은 해당 현지화로 시작되고 UI 테스트는 해당 언어로 실행됩니다. 스크린샷 현지화는 ASO의 중요한 요소입니다. 75%의 경우 사용자는 App Store의 스크린샷을 포함하여 모국어로 된 콘텐츠가 있는 앱을 선호합니다.
각 기기에 대해 Snapshot은 해당 화면 크기로 별도의 시뮬레이터를 시작합니다. App Store에서 요구하는 모든 크기가 지원됩니다: iPhone 6.5인치(iPhone 15 Pro Max), 5.5인치(iPhone 8 Plus), 6.7인치(iPhone 15 Plus) 및 iPad 12.9인치. iOS 시뮬레이터는 물리적 기기 없이 앱을 테스트하기 위해 Xcode에 내장된 iOS 기기의 소프트웨어 에뮬레이션입니다.
# 모든 기기 및 언어의 스크린샷 생성
fastlane snapshot
# 지정된 기기만 생성
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# 스크린샷 생성 전 지우기
fastlane snapshot --reinstall_app --erase_simulator
Snapfile은 스크린샷 생성 매개변수(기기 목록, 언어, 타임아웃 및 시작 옵션)를 정의하는 Fastlane 구성 파일입니다. Snapfile은 fastlane 디렉토리에 저장되고 프로젝트와 함께 버전 관리되어 모든 팀 구성원에게 통일된 구성을 보장합니다.
# Snapfile — 스크린샷 구성
devices([
"iPhone 15 Pro Max",
"iPhone 15",
"iPad Pro (12.9-inch)"
])
languages([
"en-US",
"ru",
"de-DE"
])
scheme("MyAppUITests")
output_directory("./screenshots")
clear_previous_screenshots(true)
reinstall_app(true)
erase_simulator(true)
clear_previous_screenshots 매개변수는 생성 시작 전에 이전 스크린샷을 삭제합니다 — 이렇게 하면 출력 디렉토리에 오래된 스크린샷이 축적되는 것을 방지합니다. reinstall_app은 각 실행 전에 시뮬레이터에 앱을 다시 설치하여 새 생성에 이전 테스트의 영향이 없는 깨끗한 세션을 보장합니다.
erase_simulator 매개변수는 테스트 시작 전에 시뮬레이터 내용(캐시, 설정, 이전 세션 데이터 포함)을 지웁니다. 이는 온보딩 또는 앱 첫 실행을 확인하는 테스트에 특히 중요합니다. Snapshot은 시뮬레이터의 iOS 버전을 지정하는 ios_version 매개변수와 첫 번째 UI 테스트 오류에서 생성을 중지하는 stop_after_first_error도 지원합니다.
SwiftUI 프로젝트의 경우 시스템 지역을 변경하는 대신 시뮬레이터 설정을 통해 언어 전환을 제어하는 use_simulator_for_language 매개변수를 사용할 수 있습니다. Snapshot은 앱 시작 시 추가 인수를 전달하기 위한 launch_arguments도 지원합니다 — 다양한 백엔드 구성 또는 A/B 테스트에 유용합니다.
Snapshot 인터페이스에는 생성을 시작하기 위한 기본 명령과 프로세스를 정밀하게 제어하기 위한 확장 플래그가 포함됩니다. 기본 명령 fastlane snapshot은 Snapfile 구성을 기반으로 전체 스크린샷 생성 사이클을 실행합니다.
fastlane snapshot --devices "iPhone 15" 명령은 지정된 기기에 대해서만 스크린샷을 생성하고 Snapfile의 나머지는 무시합니다. --languages "en-US,ru"는 생성을 위한 언어를 필터링합니다. 이러한 플래그의 조합은 전체 생성 사이클 없이 하나의 기기와 언어로 스크린샷을 빠르게 확인하는 데 유용합니다. 전체 생성 사이클은 5개 기기와 10개 언어의 경우 최대 30분이 소요될 수 있습니다.
# 단일 기기 빠른 생성
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# 앱 재설치로 생성
fastlane snapshot --reinstall_app --erase_simulator
# HTML 보고서로 생성
fastlane snapshot --output_directory "./build/screenshots"
--output_directory 플래그는 결과 저장 디렉토리를 변경합니다. 기본적으로 Snapshot은 스크린샷을 fastlane/screenshots에 저장합니다. Deliver와 통합하려면 예상 Deliverfile 구조와 일치하는 디렉토리를 지정하세요 — 이렇게 하면 폴더 간에 수동 파일 복사 없이 스크린샷을 게시 프로세스에 직접 전달할 수 있습니다.
| Snapshot 매개변수 | 목적 | 예시 |
|---|---|---|
| devices | 생성 대상 기기 목록 | iPhone 15, iPad Pro |
| languages | 현지화 언어 목록 | en-US, ru, de-DE |
| reinstall_app | 테스트 전 앱 재설치 | true / false |
| erase_simulator | 시작 전 시뮬레이터 지우기 | true / false |
| clear_previous | 이전 스크린샷 삭제 | true / false |
CI/CD의 Snapshot은 각 릴리스 커밋 시 자동 스크린샷 생성입니다. Snapshot은 Deliver 단계 전에 실행되어 App Store의 스크린샷이 현재 앱 버전과 일치하고 이전 버전의 오래된 UI 요소가 포함되지 않도록 합니다.
CI에서 Snapshot이 작동하려면 iOS 시뮬레이터가 설치된 Xcode가 필요합니다. CI 환경에서 Snapshot은 러너에 사전 로드된 Xcode의 시뮬레이터를 사용합니다. GitHub Actions는 추가 설정 없이 UI 테스트를 실행하기 위해 Xcode와 iOS 시뮬레이터가 사전 설치된 이미지를 제공합니다.
# CI 환경에서 Snapshot 실행
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# 스크린샷을 CI 아티팩트로 저장
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
--skip_open_summary 매개변수는 생성 후 HTML 보고서 열기를 비활성화합니다 — CI 환경에서는 그래픽 인터페이스를 사용할 수 없습니다. 생성 결과는 CI 작업 아티팩트로 전달되는 디렉토리에 저장된 후 Deliver에서 릴리스와 함께 App Store에 업로드하는 데 사용됩니다.
CI 파이프라인을 가속화하려면 concurrent_simulators를 통한 병렬 스크린샷 생성을 사용하세요 — 여러 시뮬레이터를 동시에 시작하는 Snapfile 매개변수입니다. 4개의 병렬 스레드를 사용할 경우 5개 기기와 10개 언어에 대한 스크린샷 생성 시간이 40분에서 15분으로 단축됩니다.
Snapshot을 사용할 때 개발자는 주로 UI 테스트 불안정성, 시뮬레이터 문제 및 잘못된 기기 구성과 관련된 오류에 직면합니다. Snapshot의 오류 진단은 각 단계의 스크린샷과 실패한 테스트 정보가 포함된 HTML 보고서 분석으로 시작됩니다.
오류 "Failed to build scheme MyAppUITests"는 UI 테스트 구성표가 빌드용으로 구성되지 않은 경우 발생합니다. 해결 방법: Xcode에서 UI 테스트용 별도 Scheme이 생성되었고 명령줄 액세스를 위해 Shared 옵션이 활성화되어 있는지 확인하세요. Xcode Scheme은 각 작업에 대한 대상 및 매개변수 집합을 정의하는 앱의 빌드, 테스트 및 실행 구성입니다.
오류 "No simulators found matching..."은 지정된 기기 유형 또는 iOS 버전의 시뮬레이터가 없음을 나타냅니다. 해결 방법: xcrun simctl create를 실행하여 시뮬레이터를 만들거나 xcrun simctl list 목록에서 기존 기기를 지정하세요. xcrun simctl은 iOS 시뮬레이터(생성, 삭제, 시작, 진단)를 관리하기 위한 Xcode 명령줄 유틸리티입니다.
오류 "UI test failure"의 경우 UI 테스트가 언어 또는 기기 중 하나에서 실패합니다. 해결 방법: --stop_after_first_error 플래그를 사용하여 Snapshot을 실행하고 첫 번째 오류에서 중지하고 HTML 보고서에서 스크린샷을 분석한 후 테스트를 수정하세요. 일반적인 원인은 언어별 텍스트 길이 차이로 인해 UI 요소가 겹치거나 화면 경계를 벗어나는 것입니다.
자주 묻는 질문
Snapshot은 iPhone 15 Pro Max(6.7인치), iPhone 15(6.1인치), iPad Pro 12.9인치, iPad mini를 포함한 모든 iPhone 및 iPad 제품군 기기를 지원합니다. 각 기기에 대해 Snapshot은 Xcode에서 해당 시뮬레이터 스킨을 로드하여 정확한 화면 해상도를 보장합니다.
아니요, Snapshot은 Xcode의 iOS 시뮬레이터에서만 독점적으로 작동합니다. 실제 기기는 필요하지 않으며 지원되지 않습니다 — 모든 스크린샷은 시뮬레이터 환경에서 생성되며 App Store 요구 사항에 대해 동일한 해상도와 색 재현을 제공합니다.
Snapshot은 Snapfile의 각 언어에 대해 UI 테스트를 실행하기 전에 시뮬레이터 언어를 전환합니다. 앱은 시스템 현지화 설정을 통해 해당 언어로 표시됩니다. UI 테스트는 NSLocalizedString을 통해 현지화된 문자열을 사용하여 모든 스크린샷에서 올바른 텍스트를 보장합니다.
네, Snapshot은 Fastlane 버전 2.200부터 macOS 앱을 지원합니다. macOS의 경우 app_platform("macOS") 매개변수를 통해 Snapfile에서 플랫폼을 지정하세요. Snapshot은 macOS에서 UI 테스트를 실행하고 Mac App Store 요구 사항에 따라 스크린샷을 만듭니다.
수동 스크린샷은 각 화면을 수동으로 열고, 언어를 전환하고, 기기를 변경해야 합니다 — 전체 세트에 약 60개의 작업이 필요합니다. Snapshot은 전체 프로세스를 자동화합니다: 언어와 기기를 전환하고, UI 테스트를 실행하고, App Store용 올바른 이름으로 스크린샷을 15분 만에 저장합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.