Screengrab, Fastlane इकोसिस्टम का एक उपकरण है जो Android और iOS पर मोबाइल एप्लिकेशनों के लिए स्क्रीनशॉट निर्माण को स्वचालित करता है। ड़ज़नों उपकरणों पर मैन्युअली स्क्रीन स्वाइप करने के बजाय, डेवलपर एक कमांड चलाता है और Screengrab स्वतंत्र रूप से सभी आवश्यक स्क्रीनों की तस्वीरें लेता है। Fastlane Docs, 2026 के अनुसार, यह उपकरण एक साथ 30 भाषाओं और कॉन्फ़िगरेशन में निर्दिष्ट कोई भी स्क्रीन रिजोल्यूशन का समर्थन करता है।
मुख्य बातें
Screengrab Fastlane इकोसिस्टम का एक घटक है जो मोबाइल एप्लिकेशनों के लिए स्वचालित स्क्रीनशॉट निर्माण के लिए डिजाइन किया गया है। यह उपकरण 2015 में एक समस्या के समाधान के रूप में आया: Google Play और App Store पर प्रकाशित करने के लिए प्रति भाषा 4 से 10 स्क्रीनशॉट की आवश्यकता होती है। 30 भाषाओं के समर्थन के साथ, यह 120–300 मैन्युअल तस्वीरों के बराबर है।
एक डेवलपर मैन्युअली सिमुलेटर या उपकरण पर एप्लिकेशन शुरू करता है, वांछित स्क्रीन पर जाता है, स्क्रीनशॉट लेता है, उसे कंप्यूटर पर स्थानांतरित करता है, क्रॉप करता है और सही फ़ोल्डर में सहेज करता है। यह प्रक्रिया प्रत्येक भाषा और प्रत्येक ओरिएंटेशन के लिए दोहराई जाती है। Google Play Console के अनुसार, औसत एप्लिकेशन हर दो सप्ताह में अपडेट होता है, जो स्क्रीनशॉट को एक नियमित दिनचर्या में बदल देता है।
Screengrab समस्या को मूल से हल करता है: डेवलपर UI फ्रेमवर्क (Android के लिए Espresso, iOS के लिए XCTest) का उपयोग करके परीक्षण परिदृश्य का वर्णन करता है, और Screengrab उन्हें सभी आवश्यक उपकरणों और भाषाओं पर स्वचालित रूप से चलाता है। Fastlane प्रक्रिया का समन्वय करता है: एप्लिकेशन बनाता है, परीक्षण चलाता है, स्क्रीनशॉट एकत्र करता है और उन्हें आवश्यक फ़ोल्डर संरचना में पैक करता है।
परिणाम — कई घंटे मैन्युअल कार्य के बजाय 10–15 मिनट में सौ स्क्रीनशॉट। Google प्रत्येक महत्वपूर्ण UI परिवर्तन के साथ स्क्रीनशॉट अपडेट करने की अनुशंसा करता है, और स्वचालन के बिना इस सलाह को अक्सर नज़रंदाज़ कर दिया जाता है।
Screengrab का आर्किटेक्चर दो मुख्य घटकों के चारों ओर बना है: उपकरण पर एक क्लाइंट (screengrab-lib) और एक रनर जो परीक्षण निष्पादन और परिणाम संग्रह का प्रबंधन करता है। Android पर, यह प्रयोगात्मक परीक्षण फ्रेमवर्क का उपयोग करता है; iOS पर — XCTest।
Fastlane, screengrab कार्रवाई को कॉल करता है, जो Screengrabfile कॉन्फ़िगरेशन फ़ाइल को पढ़ता है। रनर screengrab-lib लाइब्रेरी के साथ परीक्षण APK बनाता है, इसे कनेक्टड उपकरणों या एमुलेटरों पर स्थापित करता है, और स्क्रीनशॉट के लिए एनोटेशन के साथ चिह्नित UI परीक्षण चलाता है।
# Fastfile — स्क्रीनशॉट के लिए lane का विवरण
lane :screenshots do
capture_android_screenshots(
output_directory: "fastlane/metadata/android/screenshots",
locales: ["ru-RU", "en-US", "de-DE"],
devices: ["pixel_6", "pixel_tablet"],
use_tests_external_storage: true
)
end
Screengrab एक फ़ोल्डर पदानुक्रम बनाता है: भाषा → उपकरण → स्क्रीनशॉट। यह संरचना Google Play Console और App Store Connect की आवश्यकताओं से पूरी तरह मेल खाती है। App Store को प्रत्येक उपकरण प्रकार के लिए संयम रूप से परिभाषित आकारों की आवश्यकता होती है, और Screengrab बिल्कुल विनिर्देशों के अनुसार तस्वीरें बनाता है।
यह उपकरण सभी कनेक्टड उपकरणों और एमुलेटरों पर समानांतर रूप से परीक्षण चला सकता है। Android एमुलेटर यदि सक्रिय नहीं हैं तो वे स्वचालित रूप से शुरू हो जाते हैं। iOS के लिए, Screengrab Xcode सिमुलेटरों का उपयोग करता है।
Screengrab की स्थापना दो भागों में है: परियोजना में लाइब्रेरी जोड़ना और कॉन्फ़िगरेशन फ़ाइल कॉन्फ़िगर करना। Android पर, Espresso UI फ्रेमवर्क और Fastlane रिपॉजिटरी से screengrab-lib लाइब्रेरी की आवश्यकता होती है।
एप्लिकेशन मॉड्यूल के build.gradle में, screengrab-lib निर्भरता जोड़ी जाती है। लाइब्रेरी ScreenCapturer क्लास प्रदान करती है, जो कॉल के समय स्क्रीनशॉट लेता है।
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
एक UI परीक्षण को आवश्यक बिंदुओं पर Screengrab.screenshot() एनोटेशन के साथ चिह्नित किया जाता है। प्रत्येक कॉल वर्तमान स्क्रीन को कैप्चर करता है और उसे निर्दिष्ट नाम से सहेज करता है।
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
class ScreenshotTest {
@get:Rule
val localeTestRule = LocaleTestRule()
@Test
fun testTakeScreenshots() {
Screengrab.screenshot("main_screen")
// कार्रवाईएँ: लॉगिन बटन पर टैप करें
Screengrab.screenshot("login_screen")
}
}
Screengrabfile में लॉन्च पैरामीटर संग्रहीत होते हैं: उपकरण सूची, भाषाएँ, टाइमआउट और सहेज पथ। यह फ़ाइल आमतौर पर Fastfile के बगल में fastlane फ़ोल्डर में स्थित होता है।
स्थानीयकरण Screengrab की मुख्य विशेषता है, और मुख्य कारण कि इसे अक्सर चुना जाता है। यह उपकरण प्रत्येक परीक्षण रन से पहले स्वचालित रूप से एप्लिकेशन की भाषा बदलता है और सभी निर्दिष्ट भाषाओं में स्क्रीनशॉट लेता है।
भाषाएँ Screengrabfile में locales पैरामीटर का उपयोग करके निर्धारित की जाती हैं। प्रत्येक भाषा के लिए, Screengrab संबंधित संसाधनों के साथ एप्लिकेशन को पुनः स्थापित करता है और पूर्ण परीक्षण चक्र चलाता है। Android पर LocaleTestRule स्वचालित रूप से उपकरण की लोकल बदलता है।
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab योजना के अनुसार निर्देशिकाएँ बनाता है: screenshots/{locale}/{device_name}/{screenshot_name}.png। यह संरचना सीधे Google Play की आवश्यकताओं से मेल खाती है, जो Fastlane deliver के माध्यम से एक कमांड में स्क्रीनशॉट अपलोड करने की अनुमति देती है।
iOS के लिए, App Store Connect भाषा के अनुसार एक समतल संरचना में स्क्रीनशॉट की अपेक्षा करता है। Fastlane प्रकाशन के समय Screengrab पदानुक्रम को स्वचालित रूप से आवश्यक प्रारूप में बदल देता है।
CI/CD एकीकरण Screengrab के मुख्य लाभों में से एक है। यह उपकरण कमांड लाइन से चलता है और ग्राफिकल इंटरफ़ेस की आवश्यकता नहीं है, जो इसे सर्वर बिल्ड के लिए आदर्श बनाता है।
CI वातावरण में, आपको एक Android एमुलेटर या iOS सिमुलेटर शुरू करने की जरूरत है, फिर स्क्रीनशॉट के साथ lane को कॉल करें। GitHub Actions AVD कैशिंग का समर्थन करता है, जो बार-बार की गई रन को तेज़ करता है।
CI कॉन्फ़िगरेशन में, मेमोरी और समय की सीमाओं पर विचार करना महत्वपूर्ण है। Android एमुलेटरों को प्रति उपकरण कम से कम 2 GB RAM की आवश्यकता होती है, और 7 भाषाओं और 2 उपकरणों पर एक पूर्ण रन में 20–40 मिनट लगते हैं।
# Fastfile — टाइमआउट के साथ CI के लिए lane
lane :ci_screenshots do
capture_android_screenshots(
locales: ["en-US", "ru-RU"],
devices: ["pixel_6"],
clear_previous_screenshots: true,
tests_timeout: "600",
output_directory: "screenshots/ci"
)
end
Jenkins के लिए, bundle exec fastlane के कॉल के साथ sh चरण का उपयोग किया जाता है। डेवलपमेंट चक्र को धीमा न करने के लिए रात में या मुख्य शाखा में विलय के बाद ट्रिगर द्वारा स्क्रीनशॉट चलाने की अनुशंसा की जाती है।
Screengrab स्क्रीनशॉट ऑटोमेशन का एकमात्र उपकरण नहीं है। विभिन्न दृष्टिकोणों के साथ विकल्प मौजूद हैं: अंतर्निहित OS उपकरण, वाणिज्यिक प्लेटफ़ार्म, और कोड में स्क्रीनशॉट लाइब्रेरीं।
| उपकरण | प्लेटफ़ॉर्म | स्थानीयकरण | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | स्वचालित | मूल रूप से |
| ADB Shell | Android | मैन्युअल | स्क्रिप्ट के माध्यम से |
| XCTest | iOS | मैन्युअल | xcodebuild के माध्यम से |
| Firebase Test Lab | Android | सेटअप की आवश्यकता | हाँ |
| Appium | क्रॉस-प्लेटफ़ॉर्म | मैन्युअल | WebDriver के माध्यम से |
ADB Shell पूर्ण नियंत्रण देता है, लेकिन प्रत्येक परिदृश्य के लिए स्क्रिप्ट लिखने की आवश्यकता होती है। XCTest Xcode में निर्मित है, लेकिन स्वचालित रूप से स्थानीयकरण का प्रबंधन नहीं करता है। Firebase Test Lab क्लाउड में वास्तविक उपकरणों पर परीक्षण चलाता है, जो अधिकतम कवरेज देता है, लेकिन प्रति मिनट शुल्क लेता है।
Screengrab संयोजन के कारण जीतता है: Fastlane बिल्ड जीवनचक्र का प्रबंधन करता है — संकलन से लेकर प्रकाशन तक। Google Play Fastlane deliver के माध्यम से Screengrab फ़ोल्डर संरचना को सीधे स्वीकार करता है।
Screengrab के साथ काम करते समय, डेवलपरों को अक्सर कई बार-बार की जने वाली समस्याओं का सामना करना पड़ता है। सामान्य त्रुटियों का ज्ञान पहली रन पर डिबगिंग समय कम करता है।
समस्या तब होती है जब Screengrab स्क्रीन रेंडरिंग पूरी होने से पहले स्क्रीनशॉट लेता है। समाधान screenshot() को कॉल करने से पहले Thread.sleep() विलंब जोड़ना या असिंक्रोनस संचालनों की प्रतीक्षा के लिए Espresso के IdlingResource का उपयोग करना है।
screengrab-lib का संस्करण Fastlane संस्करण से मेल खाना चाहिए। Fastlane मासिक रूप से अपडेट होता है, और पुरानी लाइब्रेरी नए कॉन्फ़िगरेशन पैरामीटर्स का समर्थन नहीं कर सकती है। समाधान Gemfile और gradle.properties के माध्यम से संस्करणों को सिंक करना है।
5 उपकरणों पर 30 भाषाओं में रन को एक घंटे से अधिक समय लग सकता है। समाधान रन को विभाजित करना है: एक सभी भाषाओं में स्टोर के लिए, दूसरा दो भाषाओं में आंतरिक आवश्यकताओं के लिए। GitHub Actions समानांतर रन के लिए मैट्रिक्स रणनीतियों का उपयोग करने की अनुमति देता है।
Android एमुलेटर को हार्डवेयर वर्चुअलाइजेशन की आवश्यकता होती है, जो CI सर्वरों पर हमेशा उपलब्ध नहीं होता है। KVM सक्रिय होना चाहिए, अन्यथा एमुलेटर शुरू नहीं होगा। समाधान GPU त्वरण के बिना x86 इमेज या Firebase Test Lab का उपयोग करना है।
अक्सर पूछे जाने वाले प्रश्न
ADB वर्तमान में स्क्रीन पर जो कुछ भी प्रदर्शित है उसे कैप्चर करता है। Screengrab UI परीक्षणों के साथ एकीकृत होता है, स्वचालित रूप से भाषाएँ और उपकरण बदलता है, और मानव हस्तक्षेप के बिना एक परिदृश्य के अनुसार स्क्रीनशॉट की एक श्रृंखला लेता है।
नहीं, Screengrab Fastlane इकोसिस्टम का एक घटक है और बिल्डिंग, इंस्टॉलेशन और समन्वय के लिए इसके बुनियादी ढांचे का उपयोग करता है। screengrab-lib लाइब्रेरी अलग से नहीं चलाई जा सकती — ऑर्केस्ट्रेटर के रूप में Fastlane की आवश्यकता होती है।
एक उपकरण पर, 10 भाषाओं पर एक रन में 15–25 मिनट लगते हैं। प्रत्येक भाषा के लिए एप्लिकेशन को पुनः स्थापित करने और UI परीक्षण का पूरा चक्र चलाने की आवश्यकता होती है। एकाधिक उपकरणों पर समानांतर निष्पादन समय को आनुपातिक रूप से कम करता है।
हाँ, Screengrab XCTest और Xcode सिमुलेटरों के माध्यम से iOS का समर्थन करता है। कॉन्फ़िगरेशन Android के समान है: भाषाएँ और उपकरण जोड़े जाते हैं, और Swift में UI परीक्षण XCTest का उपयोग करके XCUIScreenshot के माध्यम से कैप्चर के साथ लिखे जाते हैं।
Screengrab इंक्रिमेंटल मोड का समर्थन नहीं करता — प्रत्येक रन स्क्रीनशॉट का पूरा सेट बनाता है। मुख्य रन से मौजूदा कैप्चर को ओवरराइट करने से बचने के लिए सीमित भाषा सूची के साथ CI के लिए एक अलग lane सेट करने की अनुशंसا की जاتी हوगا।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें