· Workflow · 9 मिनट पढ़ने का समय

Expo App Store स्क्रीनशॉट: EAS Submit इन्हें क्यों नहीं संभालता और इन्हें जल्दी कैसे शिप करें (2026)

Expo App Store स्क्रीनशॉट: EAS Submit इन्हें क्यों नहीं संभालता और इन्हें जल्दी कैसे शिप करें (2026)
TL;DR. EAS Submit आपकी .ipa/.aab App Store Connect और Play Console पर अपलोड करता है — और आपकी लिस्टिंग के लिए बस यही करता है। यह स्टोर स्क्रीनशॉट जेनरेट, अपलोड या मैनेज नहीं करता। इसलिए Expo डेवलपर्स को एक अलग स्क्रीनशॉट पाइपलाइन चाहिए: dev/preview बिल्ड से रॉ फ्रेम कैप्चर करें (सिम्यूलेटर, एमुलेटर, या Maestro/Detox के ज़रिए), फिर उन्हें फ्रेम्ड, कैप्शन्ड, बहु-भाषा मार्केटिंग पैनल में कंपोज़ और लोकलाइज़ करें। यह पोस्ट कैप्चर कमांड ईमानदारी से कवर करती है, और बताती है कि कंपोज़िशन टूल कहाँ फिट होता है — यह आपके लिए कुछ कैप्चर नहीं करता।

अगर आप Expo ऐप शिप करते हैं, तो आपका रिलीज़ पाथ शायद एक लाइन पर खत्म होता है: eas submit। यह EAS द्वारा बनाया गया बिल्ड लेकर Apple या Google को सौंप देता है। साफ, सीधा, भरोसेमंद। फिर आप App Store Connect खोलते हैं बिल्ड को लाइव करने के लिए और — स्क्रीनशॉट के स्लॉट खाली हैं। हर बार।

यह बहुत लोगों को हैरान करता है क्योंकि EAS ऐसा लगता है जैसे यह सब कुछ करता है। यह बिल्ड करता है, साइन करता है, सबमिट करता है। क्या यह स्क्रीनशॉट भी संभालता है? नहीं, और डॉक्स में साफ लिखा है। यह कोई bug या छूटी हुई फ़ीचर नहीं जिसे flag किया जाए — यह बस EAS Submit के दायरे से बाहर है।

EAS Submit असल में क्या करता है (और क्या नहीं)

EAS Submit एक बाइनरी-डिलीवरी सर्विस है। यह एक ही चीज़ अपलोड करता है: आपका कंपाइल्ड ऐप आर्काइव — iOS के लिए .ipa, Android के लिए .aab — स्टोर की प्रोसेसिंग पाइपलाइन में। Expo डॉक्युमेंटेशन इस सीमा के बारे में स्पष्ट है:

"EAS Submit आपकी बाइनरी अपलोड करता है लेकिन स्टोर लिस्टिंग मेटाडेटा, स्क्रीनशॉट या रिलीज़ नोट्स मैनेज नहीं करता।"

इसका एक साथी टूल है, EAS Metadata, जो आपकी App Store लिस्टिंग के कुछ हिस्से ऑटोमेट कर सकता है — ऐप नाम, सबटाइटल, लोकलाइज़्ड डिस्क्रिप्शन, कीवर्ड, सपोर्ट URLs — एक config फ़ाइल से। यह सच में उपयोगी है और सेट करने लायक है। लेकिन इसका scope ध्यान से पढ़ें: स्क्रीनशॉट इसमें नहीं हैं। EAS Metadata टेक्स्ट पुश करता है, इमेज नहीं। आपके स्क्रीनशॉट, दोनों स्टोर पर, अभी भी आपको खुद बनाने और अपलोड करने होंगे।

तो Expo का स्क्रीनशॉट काम दो अलग-अलग हिस्सों में बँट जाता है, और इन्हें मन में अलग रखना फ़ायदेमंद है:

  1. कैप्चर — किसी बिल्ड से आपके ऐप की असली स्क्रीन के रॉ फ्रेम निकालना।
  2. कंपोज़ और लोकलाइज़ — उन रॉ फ्रेम को फ्रेम्ड, कैप्शन्ड, बहु-भाषा मार्केटिंग पैनल में बदलना जो स्टोर असल में दिखाते हैं।

EAS दोनों में से कुछ नहीं करता। Expo की खुद की स्टोर-एसेट गाइडेंस कहती है कि फ्रेम खुद कैप्चर करें और Figma जैसे टूल में पैनल डिज़ाइन करें। दोनों काम ठोस कमांड के साथ देखते हैं।

काम 1: dev या preview बिल्ड से फ्रेम कैप्चर करना

असली ऐप के स्क्रीनशॉट चाहिए, इसलिए ऐप कहीं चलना चाहिए जहाँ आप उसे कैप्चर कर सकें। Expo के लिए इसका मतलब है dev client या preview बिल्ड — Expo Go नहीं, क्योंकि Expo Go में Expo का wrapper UI दिखता है और आपका native config अलग हो सकता है। स्टैंडर्ड Expo कमांड से लोकली बिल्ड करें और चलाएं:

  • npx expo run:ios — native iOS prebuild करता है, कंपाइल करता है, और iOS Simulator में आपका ऐप बूट करता है।
  • npx expo run:android — Android एमुलेटर (या कनेक्टेड डिवाइस) के लिए यही करता है।

iOS Simulator में स्क्रीन पर ऐप होने पर, अपने Mac टर्मिनल से कैप्चर एक कमांड से होता है:

xcrun simctl io booted screenshot home.png

booted अभी चल रहे सिम्यूलेटर को टारगेट करता है और आपकी working directory में pixel-exact PNG लिखता है। स्टोर के काम के लिए दो flags ज़रूरी हैं: --type=png (डिफ़ॉल्ट, और स्टोर यही चाहते हैं) और --mask=ignored बनाम --mask=black — mask यह तय करता है कि notch और गोल कोने इमेज में रेंडर हों या नहीं। App Store अपलोड के लिए आमतौर पर flat rectangular pixels चाहिए होते हैं, फिर कंपोज़िशन में डिवाइस फ़्रेम बाद में जोड़ते हैं, इसलिए unmasked कैप्चर आमतौर पर सही शुरुआती बिंदु है।

Android पर, एमुलेटर (या डिवाइस) से सीधे adb से कैप्चर करें:

adb exec-out screencap -p > home.png

exec-out उपयोग करें, shell screencap नहीं। सादे shell पाथ से PNG एक pseudo-terminal से होकर जाती है जो कुछ सेटअप पर बाइनरी को बिगाड़ देती है (आपको stray carriage returns वाली corrupt फ़ाइल मिलती है); exec-out bytes सीधे stream करता है और यह भरोसेमंद तरीका है। अगर कई एमुलेटर चल रहे हैं, तो adb devices से adb -s <serial> से किसी एक को टारगेट करें।

यही पूरा मैनुअल-कैप्चर toolkit है: दो कमांड, एक प्रति प्लेटफ़ॉर्म, Xcode और Android SDK के अलावा कोई dependency नहीं जो Expo native बिल्ड के लिए पहले से हैं।

काम 1, ऑटोमेटेड: Maestro या Detox

सही स्क्रीन तक हाथ से जाकर वे कमांड चलाना मुट्ठी भर शॉट के लिए ठीक है। जब आठ स्क्रीन दो डिवाइस क्लास में हों, या आप हर release पर स्क्रीनशॉट रीजेनरेट करना चाहते हों ताकि वे असली UI से कभी पीछे न पड़ें, तब end-to-end testing टूल से कैप्चर ऑटोमेट करते हैं जो ऐप चला भी सकता है और फ्रेम भी ले सकता है।

Maestro वही टूल है जिसे Expo खुद अपने EAS Workflows डॉक्युमेंटेड examples में उपयोग करता है। Flows सादे YAML में होते हैं, जिससे शुरुआत आसान है। एक flow जो किसी स्क्रीन तक ले जाकर कैप्चर करता है, कुछ ऐसा दिखता है:

appId: com.you.yourapp --- - launchApp - tapOn: "Get started" - assertVisible: "Your dashboard" - takeScreenshot: dashboard

इसे maestro test flows/home.yaml से चलाएं। takeScreenshot कमांड test output directory में PNG लिखता है (MAESTRO_TESTS_DIR जहाँ चाहें assets आना चाहते हों वहाँ point करें)। यही flows EAS Workflows पर CI में चलते हैं — Expo का डॉक्युमेंटेड example एक e2e-test build profile के साथ .apk बनाता है और फिर उस पर .maestro/ flow चलाता है — इसलिए स्क्रीनशॉट कैप्चर उसी job में जोड़ सकते हैं जो e2e suite चलाती है।

Detox दूसरा established विकल्प है, जिसका JavaScript API अधिक programmatic और tight है:

const path = await device.takeScreenshot('dashboard');

Detox के साथ Expo setup के बारे में खुद से ईमानदार रहें, हालाँकि। Detox आधिकारिक रूप से Expo support नहीं करता। व्यवहार में यह काम करता है अगर आप npx expo prebuild से native projects जेनरेट करें और release-style client बनाएं (dev client नहीं) ताकि JS bundle embedded हो — फिर Detox को उस binary पर point करें। यह Maestro के YAML से ज़्यादा जटिल है, और इसका फ़ायदा है Detox का सख्त synchronization और assertion API। अगर आप पहले से Detox चलाते हैं, तो इसे कैप्चर के लिए reuse करें; अगर ताज़ा चुन रहे हैं और लक्ष्य सिर्फ स्टोर स्क्रीनशॉट है, तो Maestro हल्का रास्ता है।

काम 1, मैनुअल: कम बार release के लिए सही तरीका

ऑटोमेशन तब सार्थक है जब आप बार-बार शिप करते हैं। अगर आप साल में एक से तीन release करते हैं — जो अधिकांश इंडी Expo ऐप का हाल है — तो स्क्रीनशॉट कैप्चर के लिए Maestro flows या Detox config सेट करना वह काम है जो एक बार करने पर बहुत कम वापसी देता है। उस cadence के लिए, बस:

  1. बिल्ड बूट करें npx expo run:ios / run:android से, realistic demo data के साथ।
  2. हर hero स्क्रीन पर हाथ से जाएं।
  3. हर एक कैप्चर करें ऊपर बताए simctl / adb कमांड से।

बीस मिनट क्लिक करना उस टेस्ट harness के आधे दिन से बेहतर है जिसे अगले release तक आप कैसे maintain करें यह भूल चुके होंगे। मैनुअल कैप्चर में कोई शर्म नहीं — स्टोर नहीं बता सकते कि PNG कैसे बनाई गई।

काम 2: कंपोज़िशन और 50 भाषाओं में लोकलाइज़ेशन

यहाँ वह हिस्सा है जिसे capture टूल जानबूझकर नहीं छूते, और यही वह हिस्सा है जिस पर स्टोर आपको परखते हैं। एक रॉ simctl PNG सफेद बैकग्राउंड पर आपके ऐप का UI है। जो सर्च में rank करता है और product page पर convert करता है वह मार्केटिंग पैनल है: डिवाइस फ़्रेम में स्क्रीनशॉट, ब्रांडेड बैकग्राउंड पर, एक-लाइन कैप्शन जो बताए कि यह स्क्रीन क्यों मायने रखती है — आमतौर पर बाएँ से दाएँ पढ़े जाने वाले मल्टी-पैनल कैरोसेल के रूप में। और App Store पर, स्क्रीनशॉट प्रति डिवाइस साइज़ और प्रति भाषा लोकलाइज़्ड होते हैं, इसलिए गंभीर लॉन्च में दर्जनों वेरिएंट होते हैं, सिर्फ पाँच नहीं।

यहीं Mokbi फिट होता है, और सीमा के बारे में सटीक रहना ज़रूरी है। Mokbi आपका ऐप कैप्चर नहीं करता — सोर्स फ्रेम अभी भी ऊपर बताए Expo कमांड से बनाने होंगे। यह उन फ्रेम को लेकर ब्राउज़र में यह करने देता है: उन्हें असली डिवाइस फ़्रेम में डालें, कैप्शन और gradient बैकग्राउंड जोड़ें, मल्टी-पैनल कैरोसेल बनाएं, एक क्लिक में 50 भाषाओं में कैप्शन ट्रांसलेट करें, और हर App Store और Play Store डाइमेंशन पर एक साथ बैच-एक्सपोर्ट करें। वॉटरमार्क्ड प्रीव्यू के साथ डिज़ाइन मुफ्त है; अनलिमिटेड एक्सपोर्ट सदस्यता के साथ मिलता है — Solo €29.99/mo (1 ऐप) या Studio €49.99/mo (5 ऐप तक), कोई एक बार का भुगतान नहीं। यह Figma-template चरण की जगह लेता है जिसे Expo की गाइड हल्के से mention करती है — न कम, न ज़्यादा।

व्यावहारिक संयुक्त वर्कफ़्लो

  1. dev/preview client बिल्ड करें। npx expo run:ios और npx expo run:android, अच्छे demo data के साथ।
  2. सोर्स फ्रेम कैप्चर करें। xcrun simctl io booted screenshot और adb exec-out screencap -p से मैनुअल, या Maestro takeScreenshot / Detox device.takeScreenshot से ऑटोमेटेड — आदर्श रूप से EAS Workflows पर ताकि हर release पर रीजेनरेट हों।
  3. मार्केटिंग पैनल कंपोज़ करें। उन रॉ फ्रेम से फ्रेम, कैप्शन और कैरोसेल बनाएं।
  4. लोकलाइज़ करें और बैच-एक्सपोर्ट करें। अपनी टारगेट भाषाओं में कैप्शन ट्रांसलेट करें, दोनों स्टोर के लिए हर ज़रूरी डाइमेंशन एक्सपोर्ट करें।
  5. लिस्टिंग assets अपलोड करें। App Store Connect और Play Console में स्क्रीनशॉट; अगर उपयोग करते हैं तो text fields के लिए EAS Metadata के साथ जोड़ें।
  6. बाइनरी सबमिट करें। eas submit — यही एक काम EAS का अपना है।
  7. अगले release पर: बदली हुई स्क्रीन दोबारा कैप्चर करें, सेव किया हुआ कंपोज़िशन प्रोजेक्ट फिर खोलें, फ्रेम बदलें, दोबारा एक्सपोर्ट करें। कैप्शन और ट्रांसलेशन यथावत रहते हैं।

ऑटोमेशन कब छोड़ सकते हैं

Maestro या Detox कैप्चर तब काम आता है जब स्क्रीनशॉट का पिछड़ना वाकई महँगा हो: आप साप्ताहिक शिप करते हैं, UI लगातार बदलता है, या आप कई ऐप maintain करते हैं और पुराने स्टोर इमेज afford नहीं कर सकते। उन cases में CI पर रीजेनरेट होने वाले फ्रेम खुद को साबित करते हैं और React Native स्क्रीनशॉट टूलिंग की कहानी (जो Expo को मिली है) निवेश के लायक है।

बाकी सबके लिए — जो तिमाही में एक बार शिप करते हैं — इसे छोड़ दें। दो टर्मिनल कमांड से मैनुअल कैप्चर, फिर ब्राउज़र-आधारित कंपोज़िशन और लोकलाइज़ेशन, किसी को भी दोपहर में polish किए हुए बहु-भाषा लिस्टिंग तक पहुँचाते हैं और releases के बीच maintain करने को कुछ नहीं होता। टूलिंग अपनी cadence के हिसाब से चुनें, न कि CI dashboard पर impressive दिखने के लिए।

किसी भी तरह, बाइनरी वाला हिस्सा हल है: eas submit संभाल लेता है। अपलोड करने से पहले अपने स्क्रीनशॉट मौजूदा स्टोर requirements से ज़रूर check करें — Apple एक pixel के फ़र्क पर लिस्टिंग reject कर देता है — और बाकी launch सिर्फ डिज़ाइन है।

आगे क्या पढ़ें

एडिटर खोलें →