Snapshot (Fastlane), desteklenen tüm cihazlarda ve dillerde iOS uygulamalarının otomatik ekran görüntüsü oluşturma aracıdır. Simülatör aracılığıyla manuel ekran görüntüsü oluşturmanın aksine, Snapshot UI testlerini çalıştırır ve uygulamanın belirtilen noktalarında ekran görüntüsü alır. Resmi Fastlane belgelerine (2026) göre, Snapshot sürüm için ekran görüntüsü hazırlama süresini 4 saatten 15 dakikaya düşürür.
Ana noktalar
Snapshot (Fastlane), App Store için uygulama ekran görüntüsü oluşturmayı otomatikleştiren Fastlane ekosisteminin bir bileşenidir. iOS simülatörlerinde UI testlerini çalıştırır, belirtilen uygulama durumlarında ekran görüntüleri alır ve her dil ve cihaz için doğru adlarla yapılandırılmış bir dizine kaydeder.
Snapshot olmadan, geliştiriciler simülatörü manuel olarak başlatır, her ekranı açar, Cmd+S ile ekran görüntüsü alır, dili değiştirir ve tüm kombinasyonlar için işlemi tekrarlar. Ekran görüntüsü otomasyonu, ASO optimizasyonunun önemli bir unsurudur, çünkü App Store her yeni sürüm için güncel ekran görüntüleri gerektirir ve 60+ ekran görüntüsünü manuel olarak güncellemek saatler süren çalışma gerektirir.
App Store Connect Belgelerine (2025) göre, yerelleştirilmiş ekran görüntülerine sahip uygulamalar, hedef ülkelerde %25 daha fazla dönüşüm elde eder. Snapshot, ekiplerin tek bir çalıştırmada 32 dil için görsel içeriği güncellemesine olanak tanır; bu, uygulamanın yeni özelliklerine bağlı pazarlama kampanyaları için özellikle önemlidir.
App Store'da yayınlanan herhangi bir projede Snapshot'ı kullanın — sürüm sürecini otomatikleştirmek ve ASO'yu iyileştirmek isteyen ekipler için standart araçtır.
Snapshot'ta ekran görüntüsü oluşturma süreci birkaç aşamadan oluşur: UI testlerinin hazırlanması, Snapfile'ın yapılandırılması, simülatörlerin başlatılması ve sonuçların toplanması. Snapshot, belirtilen cihazlar ve diller için sırayla her simülatörü başlatır, UI testlerini çalıştırır ve snapshot() işlevinin çağrıldığı noktalarda ekran görüntüsü alır.
Tüm testler tamamlandıktan sonra Snapshot, App Store gereksinimlerini karşılayan adlarla screenshots/[Language]/ dizininde ekran görüntülerini toplar. Her ekran görüntüsü, hedef cihaza karşılık gelen çözünürlükte PNG formatında kaydedilir. Snapshot ayrıca oluşturulan tüm ekran görüntülerinin görsel doğrulaması için bir HTML raporu oluşturur.
Snapshot'ın çalışması için, uygulamanın XCTest UI test koduna snapshot() çağrıları eklemek gerekir. İşlev, çağrı anında mevcut ekran durumunun ekran görüntüsünü alır. Geliştirici, her önemli eylemden (ekran açma, veri girişi, sekmeler arasında gezinme veya sonuçları görüntüleme) sonra snapshot() yerleştirir.
UI test yapısı örneği: test uygulamaya giriş yapar, giriş ekranını yakalamak için snapshot("01-LoginScreen") çağrısı yapar, ardından ana ekrana gider ve ana ekranı yakalamak için snapshot("02-HomeScreen") çağrısı yapar. XCTest, iOS uygulamalarının birim ve UI testi için Apple'ın framework'üdür ve doğrudan Xcode'a entegre edilmiştir.
// Snapshot için UI testi
- (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'da belirtilen her dil için simülatör dilini otomatik olarak değiştirir. Uygulama ilgili yerelleştirme ile başlatılır ve UI testleri bu dilde çalışır. Ekran görüntüsü yerelleştirmesi, ASO için kritik bir faktördür: kullanıcıların %75'i, App Store'daki ekran görüntüleri de dahil olmak üzere ana dillerinde içeriğe sahip uygulamaları tercih eder.
Her cihaz için Snapshot, ilgili ekran boyutunda ayrı bir simülatör başlatır. App Store tarafından gereken tüm boyutlar desteklenir: iPhone 6.5 inç (iPhone 15 Pro Max), 5.5 inç (iPhone 8 Plus), 6.7 inç (iPhone 15 Plus) ve iPad 12.9 inç. iOS Simülatörü, fiziksel bir cihaz olmadan uygulamaları test etmek için Xcode'da yerleşik olarak bulunan bir iOS cihazının yazılım emülasyonudur.
# Tüm cihazlar ve diller için ekran görüntüleri oluştur
fastlane snapshot
# Yalnızca belirtilen cihazlar için oluştur
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# Ekran görüntüsü oluşturmadan önce temizle
fastlane snapshot --reinstall_app --erase_simulator
Snapfile, ekran görüntüsü oluşturma parametrelerini (cihaz listesi, diller, zaman aşımı ve başlatma seçenekleri) tanımlayan bir Fastlane yapılandırma dosyasıdır. Snapfile, fastlane dizininde saklanır ve projeyle birlikte sürümlenir, böylece tüm ekip üyeleri için birleşik bir yapılandırma sağlanır.
# Snapfile — ekran görüntüsü yapılandırması
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 parametresi, oluşturmaya başlamadan önce eski ekran görüntülerini siler — bu, çıktı dizininde güncelliğini yitirmiş ekran görüntülerinin birikmesini önler. reinstall_app, her çalıştırmadan önce uygulamayı simülatöre yeniden yükleyerek yeni oluşturma üzerinde önceki testlerin etkisi olmadan temiz bir oturum sağlar.
erase_simulator parametresi, testlere başlamadan önce simülatör içeriğini (önbellek, ayarlar ve önceki oturumların verileri dahil) temizler. Bu, özellikle uygulamanın ilk başlatılmasını veya karşılama akışını kontrol eden testler için önemlidir. Snapshot ayrıca simülatördeki iOS sürümünü belirtmek için ios_version parametresini ve ilk UI testi hatasında oluşturmayı durdurmak için stop_after_first_error'u destekler.
SwiftUI projeleri için, sistem bölgesini değiştirmek yerine simülatör ayarları aracılığıyla dil değiştirmeyi kontrol eden use_simulator_for_language parametresi mevcuttur. Snapshot ayrıca uygulama başlatılırken ek argümanlar iletmek için launch_arguments'u destekler — farklı arka uç yapılandırmaları veya A/B testleri için kullanışlıdır.
Snapshot arayüzü, oluşturmayı başlatmak için temel komutları ve süreç üzerinde hassas kontrol için genişletilmiş bayrakları içerir. Ana komut fastlane snapshot, Snapfile yapılandırmasına dayalı olarak tam ekran görüntüsü oluşturma döngüsünü çalıştırır.
fastlane snapshot --devices "iPhone 15" komutu, Snapfile'daki diğerlerini yok sayarak yalnızca belirtilen cihazlar için ekran görüntüleri oluşturur. --languages "en-US,ru" oluşturma için dilleri filtreler. Bu bayrakların kombinasyonu, 5 cihaz ve 10 dil için 30 dakikaya kadar sürebilen tam oluşturma döngüsü olmadan tek bir cihaz ve dilde ekran görüntülerini hızlıca kontrol etmek için kullanışlıdır.
# Tek cihaz için hızlı oluşturma
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# Uygulama yeniden yükleme ile oluştur
fastlane snapshot --reinstall_app --erase_simulator
# HTML raporu ile oluştur
fastlane snapshot --output_directory "./build/screenshots"
--output_directory bayrağı, sonuçların kaydedilme dizinini değiştirir. Varsayılan olarak Snapshot, ekran görüntülerini fastlane/screenshots dizinine kaydeder. Deliver ile entegrasyon için, beklenen Deliverfile yapısıyla eşleşen bir dizin belirtin — bu, ekran görüntülerinin klasörler arasında manuel dosya kopyalama olmadan doğrudan yayınlama sürecine iletilmesini sağlar.
| Snapshot Parametresi | Amaç | Örnek |
|---|---|---|
| devices | Oluşturma için cihaz listesi | iPhone 15, iPad Pro |
| languages | Yerelleştirme dilleri listesi | en-US, ru, de-DE |
| reinstall_app | Testlerden önce uygulamayı yeniden yükle | true / false |
| erase_simulator | Başlatmadan önce simülatörü temizle | true / false |
| clear_previous | Eski ekran görüntülerini sil | true / false |
CI/CD'de Snapshot, her sürüm commit'inde otomatik ekran görüntüsü oluşturmadır. Snapshot, Deliver aşamasından önce çalıştırılarak App Store'daki ekran görüntülerinin mevcut uygulama sürümüyle eşleşmesini ve önceki sürümlerden güncelliğini yitirmiş arayüz öğeleri içermemesini sağlar.
Snapshot'ın CI'da çalışması için, iOS simülatörleri yüklü Xcode gereklidir. CI ortamlarında Snapshot, çalıştırıcıya önceden yüklenmiş Xcode simülatörlerini kullanır. GitHub Actions, ek yapılandırma gerektirmeden UI testlerini çalıştırmak için önceden yüklenmiş Xcode ve iOS simülatörleriyle görüntüler sağlar.
# Snapshot'ı CI ortamında çalıştır
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# Ekran görüntülerini CI yapay ürünleri olarak kaydet
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
--skip_open_summary parametresi, oluşturma sonrasında HTML raporunun açılmasını devre dışı bırakır — CI ortamlarında grafik arayüz mevcut değildir. Oluşturma sonuçları, CI görev yapay ürünü olarak iletilen bir dizine kaydedilir ve ardından Deliver tarafından sürümle birlikte App Store'a yüklemek için kullanılır.
CI hattını hızlandırmak için, concurrent_simulators aracılığıyla paralel ekran görüntüsü oluşturma kullanın — aynı anda birden çok simülatörü başlatan bir Snapfile parametresidir. Bu, 4 paralel iş parçacığı kullanıldığında 5 cihaz ve 10 dil için ekran görüntüsü oluşturma süresini 40 dakikadan 15 dakikaya düşürür.
Snapshot kullanırken, geliştiriciler en sık UI testi dengesizliği, simülatör sorunları ve yanlış cihaz yapılandırmasıyla ilgili hatalarla karşılaşır. Snapshot'ta hata teşhisi, her adımın ekran görüntülerini ve başarısız testler hakkında bilgileri içeren HTML raporunun analiziyle başlar.
"Failed to build scheme MyAppUITests" hatası, UI test şeması derleme için yapılandırılmadığında oluşur. Çözüm: Xcode'da UI testleri için ayrı bir Scheme oluşturulduğundan ve komut satırı erişimi için Shared seçeneğinin etkinleştirildiğinden emin olun. Xcode Scheme, her eylem için hedefler ve parametreler kümesini tanımlayan uygulamanın derleme, test ve çalıştırma yapılandırmasıdır.
"No simulators found matching..." hatası, belirtilen cihaz türü veya iOS sürümüyle eşleşen simülatör olmadığını belirtir. Çözüm: simülatör oluşturmak için xcrun simctl create komutunu çalıştırın veya xcrun simctl list listesinden mevcut bir cihaz belirtin. xcrun simctl, iOS simülatörlerini yönetmek için Xcode komut satırı yardımcı programıdır: oluşturma, silme, başlatma ve teşhis.
"UI test failure" hatasında UI testi dillerden veya cihazlardan birinde başarısız olur. Çözüm: --stop_after_first_error bayrağıyla Snapshot'ı çalıştırın, ilk hatada durun, HTML raporundaki ekran görüntüsünü analiz edin ve testi düzeltin. Yaygın bir neden, farklı dillerde farklı metin uzunluğudur, bu da arayüz öğelerinin üst üste binmesine veya ekran sınırlarının dışına çıkmasına neden olur.
Sıkça sorulan sorular
Snapshot, iPhone 15 Pro Max (6.7 inç), iPhone 15 (6.1 inç), iPad Pro 12.9 inç ve iPad mini dahil olmak üzere tüm iPhone ve iPad ailesi cihazlarını destekler. Her cihaz için Snapshot, Xcode'dan ilgili simülatör görünümlerini yükleyerek doğru ekran çözünürlüğünü sağlar.
Hayır, Snapshot yalnızca Xcode'daki iOS simülatörleriyle çalışır. Gerçek cihazlar gerekli değildir ve desteklenmez — tüm ekran görüntüleri simülatör ortamında oluşturulur ve App Store gereksinimleri için aynı çözünürlük ve renk üretimini sağlar.
Snapshot, Snapfile'daki her dil için UI testlerini çalıştırmadan önce simülatör dilini değiştirir. Uygulama, sistem yerelleştirme ayarları aracılığıyla ilgili dilde görüntülenir. UI testleri, NSLocalizedString aracılığıyla yerelleştirilmiş dizeleri kullanarak tüm ekran görüntülerinde doğru metni sağlar.
Evet, Snapshot Fastlane sürüm 2.200'den itibaren macOS uygulamalarını destekler. macOS için, app_platform("macOS") parametresi aracılığıyla Snapfile'da platformu belirtin. Snapshot, macOS'ta UI testlerini çalıştırır ve Mac App Store gereksinimlerine göre ekran görüntüleri oluşturur.
Manuel ekran görüntüsü, her ekranı manuel olarak açmayı, dilleri değiştirmeyi, cihazları değiştirmeyi gerektirir — tam bir set için yaklaşık 60 işlem. Snapshot tüm süreci otomatikleştirir: dilleri ve cihazları değiştirir, UI testlerini çalıştırır ve App Store için doğru adlarla ekran görüntülerini 15 dakikada kaydeder.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun