Snapshot (Fastlane) là công cụ tự động tạo ảnh chụp màn hình cho ứng dụng iOS trên tất cả các thiết bị và ngôn ngữ được hỗ trợ. Không giống như tạo ảnh chụp màn hình thủ công qua trình mô phỏng, Snapshot chạy kiểm thử UI và chụp ảnh tại các điểm xác định trong ứng dụng. Theo tài liệu chính thức của Fastlane (2026), Snapshot giảm thời gian chuẩn bị ảnh chụp màn hình cho bản phát hành từ 4 giờ xuống còn 15 phút.
Những điểm chính
Snapshot (Fastlane) là một thành phần của hệ sinh thái Fastlane tự động hóa việc tạo ảnh chụp màn hình ứng dụng cho App Store. Nó chạy kiểm thử UI trên trình mô phỏng iOS, chụp ảnh ở các trạng thái ứng dụng xác định và lưu chúng vào thư mục có cấu trúc với tên chính xác cho từng ngôn ngữ và thiết bị.
Không có Snapshot, các nhà phát triển phải tự khởi chạy trình mô phỏng, mở từng màn hình, chụp ảnh bằng Cmd+S, chuyển đổi ngôn ngữ và lặp lại quy trình cho tất cả các tổ hợp. Tự động hóa ảnh chụp màn hình là yếu tố chính của tối ưu hóa ASO, vì App Store yêu cầu ảnh chụp cập nhật cho mỗi bản phát hành mới và việc cập nhật thủ công hơn 60 ảnh chụp mất hàng giờ làm việc.
Theo Tài liệu App Store Connect (2025), các ứng dụng có ảnh chụp được bản địa hóa nhận được nhiều hơn 25% chuyển đổi tại các quốc gia mục tiêu. Snapshot cho phép các nhóm cập nhật nội dung trực quan cho 32 ngôn ngữ trong một lần chạy, điều này đặc biệt quan trọng đối với các chiến dịch tiếp thị gắn liền với tính năng mới của ứng dụng.
Sử dụng Snapshot trong bất kỳ dự án nào phát hành trên App Store — đó là công cụ tiêu chuẩn cho các nhóm muốn tự động hóa quy trình phát hành và cải thiện ASO.
Quy trình tạo ảnh chụp màn hình trong Snapshot bao gồm nhiều giai đoạn: chuẩn bị kiểm thử UI, cấu hình Snapfile, khởi chạy trình mô phỏng và thu thập kết quả. Snapshot tuần tự khởi chạy từng trình mô phỏng cho các thiết bị và ngôn ngữ đã chỉ định, chạy kiểm thử UI và chụp ảnh tại các điểm nơi hàm snapshot() được gọi.
Sau khi tất cả kiểm thử hoàn tất, Snapshot thu thập ảnh chụp màn hình vào thư mục screenshots/[Language]/ với tên đáp ứng yêu cầu của App Store. Mỗi ảnh chụp được lưu ở định dạng PNG với độ phân giải tương ứng với thiết bị mục tiêu. Snapshot cũng tạo báo cáo HTML để kiểm tra trực quan tất cả ảnh chụp đã tạo.
Để Snapshot hoạt động, cần thêm lệnh gọi snapshot() vào mã kiểm thử XCTest UI của ứng dụng. Hàm này chụp ảnh trạng thái màn hình hiện tại tại thời điểm gọi. Nhà phát triển đặt snapshot() sau mỗi hành động chính: mở màn hình, nhập dữ liệu, điều hướng qua các tab hoặc hiển thị kết quả.
Ví dụ về cấu trúc kiểm thử UI: kiểm thử đăng nhập vào ứng dụng, gọi snapshot("01-LoginScreen") để chụp màn hình đăng nhập, sau đó điều hướng đến màn hình chính và gọi snapshot("02-HomeScreen") để chụp màn hình chính. XCTest là framework của Apple cho kiểm thử đơn vị và UI của ứng dụng iOS, được tích hợp trực tiếp vào Xcode.
// Kiểm thử UI cho Snapshot
- (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 tự động chuyển đổi ngôn ngữ trình mô phỏng cho mỗi ngôn ngữ được chỉ định trong Snapfile. Ứng dụng khởi chạy với bản địa hóa tương ứng và kiểm thử UI chạy bằng ngôn ngữ đó. Bản địa hóa ảnh chụp màn hình là yếu tố quan trọng của ASO: 75% người dùng thích ứng dụng có nội dung bằng ngôn ngữ mẹ đẻ của họ, bao gồm cả ảnh chụp trong App Store.
Đối với mỗi thiết bị, Snapshot khởi chạy một trình mô phỏng riêng với đường chéo màn hình tương ứng. Tất cả kích thước theo yêu cầu của App Store đều được hỗ trợ: iPhone 6.5 inch (iPhone 15 Pro Max), 5.5 inch (iPhone 8 Plus), 6.7 inch (iPhone 15 Plus) và iPad 12.9 inch. Trình mô phỏng iOS là mô phỏng phần mềm của thiết bị iOS được tích hợp trong Xcode để kiểm thử ứng dụng mà không cần thiết bị vật lý.
# Tạo ảnh chụp cho tất cả thiết bị và ngôn ngữ
fastlane snapshot
# Chỉ tạo cho thiết bị được chỉ định
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# Xóa trước khi tạo ảnh chụp
fastlane snapshot --reinstall_app --erase_simulator
Snapfile là tệp cấu hình Fastlane xác định các tham số tạo ảnh chụp màn hình: danh sách thiết bị, ngôn ngữ, thời gian chờ và tùy chọn khởi chạy. Snapfile được lưu trong thư mục fastlane và quản lý phiên bản cùng với dự án, đảm bảo cấu hình thống nhất cho tất cả thành viên trong nhóm.
# Snapfile — cấu hình ảnh chụp
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)
Tham số clear_previous_screenshots xóa ảnh chụp cũ trước khi bắt đầu tạo — điều này ngăn tích tụ ảnh chụp lỗi thời trong thư mục đầu ra. reinstall_app cài đặt lại ứng dụng trên trình mô phỏng trước mỗi lần chạy, đảm bảo phiên làm việc sạch sẽ không bị ảnh hưởng bởi các kiểm thử trước đó.
Tham số erase_simulator xóa nội dung trình mô phỏng trước khi bắt đầu kiểm thử — bao gồm bộ nhớ đệm, cài đặt và dữ liệu của các phiên trước. Điều này đặc biệt quan trọng đối với kiểm thử kiểm tra quá trình giới thiệu hoặc lần khởi chạy đầu tiên của ứng dụng. Snapshot cũng hỗ trợ tham số ios_version để chỉ định phiên bản iOS trên trình mô phỏng và stop_after_first_error để dừng tạo khi gặp lỗi kiểm thử UI đầu tiên.
Đối với dự án SwiftUI, có tham số use_simulator_for_language kiểm soát việc chuyển đổi ngôn ngữ qua cài đặt trình mô phỏng thay vì thay đổi vùng hệ thống. Snapshot cũng hỗ trợ launch_arguments để truyền đối số bổ sung khi khởi chạy ứng dụng — hữu ích cho kiểm thử với các cấu hình backend khác nhau hoặc kiểm thử A/B.
Giao diện Snapshot bao gồm các lệnh cơ bản để bắt đầu tạo và các cờ mở rộng để kiểm soát chính xác quy trình. Lệnh chính fastlane snapshot chạy chu trình tạo ảnh chụp màn hình đầy đủ dựa trên cấu hình Snapfile.
Lệnh fastlane snapshot --devices "iPhone 15" chỉ tạo ảnh chụp cho các thiết bị được chỉ định, bỏ qua phần còn lại từ Snapfile. --languages "en-US,ru" lọc ngôn ngữ để tạo. Sự kết hợp các cờ này hữu ích để kiểm tra nhanh ảnh chụp trên một thiết bị và ngôn ngữ mà không cần chu trình tạo đầy đủ, có thể mất đến 30 phút cho 5 thiết bị và 10 ngôn ngữ.
# Tạo nhanh cho một thiết bị
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# Tạo với cài đặt lại ứng dụng
fastlane snapshot --reinstall_app --erase_simulator
# Tạo với báo cáo HTML
fastlane snapshot --output_directory "./build/screenshots"
Cờ --output_directory thay đổi thư mục lưu kết quả. Theo mặc định, Snapshot lưu ảnh chụp trong fastlane/screenshots. Để tích hợp với Deliver, hãy chỉ định thư mục khớp với cấu trúc Deliverfile dự kiến — điều này cho phép chuyển ảnh chụp trực tiếp đến quy trình xuất bản mà không cần sao chép thủ công giữa các thư mục.
| Tham số Snapshot | Mục đích | Ví dụ |
|---|---|---|
| devices | Danh sách thiết bị để tạo | iPhone 15, iPad Pro |
| languages | Danh sách ngôn ngữ bản địa hóa | en-US, ru, de-DE |
| reinstall_app | Cài đặt lại ứng dụng trước kiểm thử | true / false |
| erase_simulator | Xóa trình mô phỏng trước khi khởi chạy | true / false |
| clear_previous | Xóa ảnh chụp cũ | true / false |
Snapshot trong CI/CD là tự động tạo ảnh chụp màn hình với mỗi commit phát hành. Snapshot chạy trước giai đoạn Deliver để đảm bảo ảnh chụp trong App Store khớp với phiên bản ứng dụng hiện tại và không chứa các yếu tố giao diện lỗi thời từ các phiên bản trước.
Để Snapshot hoạt động trong CI, cần có Xcode với trình mô phỏng iOS được cài đặt. Trong môi trường CI, Snapshot sử dụng trình mô phỏng từ Xcode, được tải sẵn trên runner. GitHub Actions cung cấp hình ảnh với Xcode và trình mô phỏng iOS được cài đặt sẵn để chạy kiểm thử UI mà không cần thiết lập thêm.
# Chạy Snapshot trong môi trường CI
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# Lưu ảnh chụp như tạo tác CI
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
Tham số --skip_open_summary vô hiệu hóa việc mở báo cáo HTML sau khi tạo — trong môi trường CI, giao diện đồ họa không khả dụng. Kết quả tạo được lưu trong thư mục được truyền như tạo tác của tác vụ CI và sau đó được Deliver sử dụng để tải lên App Store cùng với bản phát hành.
Để tăng tốc quy trình CI, hãy sử dụng tạo ảnh chụp song song qua concurrent_simulators — tham số Snapfile khởi chạy nhiều trình mô phỏng đồng thời. Điều này giảm thời gian tạo ảnh chụp cho 5 thiết bị và 10 ngôn ngữ từ 40 phút xuống còn 15 phút khi sử dụng 4 luồng song song.
Khi sử dụng Snapshot, nhà phát triển thường gặp lỗi liên quan đến sự không ổn định của kiểm thử UI, vấn đề với trình mô phỏng và cấu hình thiết bị không chính xác. Chẩn đoán lỗi của Snapshot bắt đầu bằng phân tích báo cáo HTML, chứa ảnh chụp từng bước và thông tin về các kiểm thử thất bại.
Lỗi "Failed to build scheme MyAppUITests" xảy ra khi lược đồ kiểm thử UI không được cấu hình để xây dựng. Giải pháp: đảm bảo Scheme riêng cho kiểm thử UI được tạo trong Xcode và tùy chọn Shared được bật để truy cập từ dòng lệnh. Xcode Scheme là cấu hình xây dựng, kiểm thử và chạy ứng dụng xác định tập hợp mục tiêu và tham số cho mỗi hành động.
Lỗi "No simulators found matching..." chỉ ra không có trình mô phỏng nào với loại thiết bị hoặc phiên bản iOS được chỉ định. Giải pháp: chạy xcrun simctl create để tạo trình mô phỏng hoặc chỉ định thiết bị hiện có từ danh sách xcrun simctl list. xcrun simctl là tiện ích dòng lệnh Xcode để quản lý trình mô phỏng iOS: tạo, xóa, khởi chạy và chẩn đoán.
Đối với lỗi "UI test failure" kiểm thử UI thất bại trên một trong các ngôn ngữ hoặc thiết bị. Giải pháp: chạy Snapshot với cờ --stop_after_first_error để dừng ở lỗi đầu tiên, phân tích ảnh chụp trong báo cáo HTML và sửa kiểm thử. Nguyên nhân phổ biến là độ dài văn bản khác nhau giữa các ngôn ngữ, khiến các yếu tố giao diện chồng lên nhau hoặc vượt ra ngoài ranh giới màn hình.
Câu hỏi thường gặp
Snapshot hỗ trợ tất cả thiết bị trong dòng iPhone và iPad, bao gồm iPhone 15 Pro Max (6.7 inch), iPhone 15 (6.1 inch), iPad Pro 12.9 inch và iPad mini. Đối với mỗi thiết bị, Snapshot tải skin trình mô phỏng tương ứng từ Xcode, đảm bảo độ phân giải màn hình chính xác.
Không, Snapshot chỉ hoạt động với trình mô phỏng iOS từ Xcode. Thiết bị thực không cần thiết và không được hỗ trợ — tất cả ảnh chụp được tạo trong môi trường trình mô phỏng, cung cấp độ phân giải và tái tạo màu sắc giống hệt cho các yêu cầu của App Store.
Snapshot chuyển đổi ngôn ngữ trình mô phỏng trước khi chạy kiểm thử UI cho mỗi ngôn ngữ từ Snapfile. Ứng dụng hiển thị bằng ngôn ngữ tương ứng qua cài đặt bản địa hóa hệ thống. Kiểm thử UI sử dụng chuỗi đã bản địa hóa qua NSLocalizedString, đảm bảo văn bản chính xác trên tất cả ảnh chụp.
Có, Snapshot hỗ trợ ứng dụng macOS từ phiên bản Fastlane 2.200. Đối với macOS, hãy chỉ định nền tảng trong Snapfile qua tham số app_platform("macOS"). Snapshot chạy kiểm thử UI trên macOS và tạo ảnh chụp theo yêu cầu của Mac App Store.
Chụp màn hình thủ công yêu cầu mở từng màn hình, chuyển đổi ngôn ngữ, thay đổi thiết bị — khoảng 60 thao tác cho một bộ đầy đủ. Snapshot tự động hóa toàn bộ quy trình: chuyển đổi ngôn ngữ, thiết bị, chạy kiểm thử UI và lưu ảnh chụp với tên chính xác cho App Store trong 15 phút.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm