Skip to content
··13 मिनट पढ़ने का समय

App Store ने हाँ कह दिया

दो हफ्ते पहले मैंने लिखा था "अभी भी बना रहा हूँ। अभी भी पूरा नहीं हुआ।" आज DIALØGUE App Store पर live है। वो आखिरी 40% असल में कैसा दिखता था — वो यहाँ है।

दो हफ्ते पहले मैंने एक blog post का अंत इस लाइन से किया था: "अभी भी बना रहा हूँ। अभी भी पूरा नहीं हुआ। अभी भी यह सोच रहा हूँ कि अपनी बेटी को क्या बताऊँगा।"

मैंने promise किया था कि जैसे ही app App Store पर आएगी — या reject होगी — मैं follow-up लिखूँगा। मैंने कहा था कि rejection की कहानी शायद ज़्यादा दिलचस्प होगी।

DIALØGUE - AI Podcast Studio अब App Store पर live है — एक native SwiftUI iOS app जो किसी भी topic या PDF को पूरी तरह produce किया हुआ podcast episode बना देती है। Claude Code से build की गई, किसी ऐसे इंसान ने जिसने पहले कभी Swift नहीं लिखी थी। आप इसे अभी download कर सकते हैं।

लेकिन पहली बार में नहीं। मुझे मानना होगा — मैंने सोचा था कि rejection की कहानी approval से ज़्यादा interesting होगी। मैं सही था।


Apple ने पहली submission reject की तो क्या हुआ?

मेरी पहली submission reject हो गई। Guideline 2.1 — Performance: App Completeness। In-app purchases काम नहीं कर रही थीं।

Apple का review message बहुत polite था — उन्होंने notice किया कि यह मेरी पहली submission थी, developer program में join करने पर congratulate किया, और issue clearly explain किया। IAP products ने error throw की जब उनके reviewer ने purchase करने की कोशिश की।

असली बात यह है: purchase flow मेरी testing में perfectly काम कर रहा था। Issue Apple के sandbox environment में था, जो development और production दोनों से अलग behave करता है। StoreKit configuration को App Store Connect के साथ exactly sync होना था — और मेरी नहीं थी। मैं एक local StoreKit configuration file के खिलाफ test कर रहा था जबकि reviewer real sandbox hit कर रहा था।

मैंने उसी दिन fix किया, resubmit किया, और pass हो गया। फिर जल्दी ही एक v1.0.1 bug fix update भी ship की, जो भी आराम से निकल गई।

तीन submissions कुल। एक rejection। उस rejection ने मुझे App Store process के बारे में दोनों approvals से ज़्यादा सिखाया। यही pattern है ना? Failures हमेशा successes से ज़्यादा educational होती हैं।


"आखिरी 40%" असल में कैसा दिखता है?

उस original post में मैंने कहा था कि AI आपको 60% तक पहुँचाती है और बाकी 40% पूरी तरह human काम है। अब मैं थोड़ा और specific होना चाहता हूँ, क्योंकि मेरे पास git log है prove करने के लिए।

16 commits। 57 files changed। 4,886 lines add हुईं। App 69 Swift files से 88 तक पहुँची, 7,568 lines से 11,459 तक। यह करीब 4,000 lines का "polish" है।

यहाँ है वो जो इन 16 commits में था — roughly उसी order में जैसे हुआ:

वो test suite जो Day One से होनी चाहिए थी

Original scaffold में zero tests थे। एक भी नहीं। Claude ने 69 files का production code build किया और एक भी test नहीं। Original post के बाद मेरे पहले real commit ने 176 unit tests और 19 integration tests add किए जो local Supabase instance के खिलाफ run होते हैं।

वो tests लिखते ही real bugs पकड़ में आ गए: non-existent database columns से Show model decode failures, AudioPlayer track के end पर reset न होना, एक library reload race condition, creation wizard में missing nil UUID guard। इनमें से हर एक production में crash होता।

मुझे लगता है यह एक ऐसा pattern है जिसे नाम देना ज़रूरी है: AI zero test infrastructure के साथ code generate करती है। इसलिए नहीं कि वो tests नहीं लिख सकती — Claude tests लिखने में बहुत अच्छी है जब आप पूछें — बल्कि इसलिए कि initial scaffold prompt हमेशा "app build करो" होता है, "comprehensive tests के साथ app build करो" नहीं। Tests मेरी अपनी decision से आईं कि मैं बिना tests के ship करने में comfortable नहीं हूँ।

DIALØGUE iOS app outline review screen showing 6 podcast segments with Approve and Give Feedback buttons in dark mode
Outline review step — जहाँ आप AI की research approve या refine करते हैं, audio generate होने से पहले।

Studio: जो feature बमुश्किल एक stub था

Original "Studio" feature recurring shows के लिए एक placeholder था। दो commits बाद, यह एक real product बन गया: template grids के साथ show creation, status badges और action buttons के साथ episode management, edit/delete workflows, timezone pickers के साथ schedule configuration, और voice customization sheets।

फिर आया Studio Phase 2: show detail redesign, per-episode retry/delete, credit checks के साथ manual episode generation। Plus 8 नए XCUITests यह सुनिश्चित करने के लिए कि सब end-to-end काम करे।

यही मेरा मतलब था "AI ने एक codebase build किया, product नहीं।" Studio feature compile होता था। एक screen render करता था। लेकिन आप उससे actually एक recurring podcast show manage नहीं कर सकते थे।

DIALØGUE iOS app showing 9 podcast format templates including Tech News Analysis, Deep Dive, and Investigative Comedy in a dark-mode grid layout
नौ podcast formats — Tech News Analysis से Investigative Comedy तक।

Audio Player का नया रूप

Original post में मैंने बताया था कि मैंने mini-player delete कर दिया था। निकला कि मैं गलत था — मैंने आखिरकार एक बेहतर mini-player build किया। Final design में tab bar के ऊपर एक persistent mini-player bar है जिसमें progress, skip controls, और play/pause है। उसे tap करें और एक expanded "Now Playing" sheet खुलती है — seekable slider, speed selector (0.5x से 2x), transport controls, और एक sound-rings artwork animation।

Tricky हिस्सा था isSeeking state — इसके बिना slider की position और audio observer एक-दूसरे से लड़ते हैं, जिससे एक jittery mess बनती है। State की एक line जिसे diagnose करने में एक घंटा लगा।

मैंने offline downloads भी add किए ambient UX के साथ: library में downloaded episodes पर green icon, completion toast, Now Playing में "Downloaded" label, और swipe-to-remove-download। DownloadManager में URLSession delegate में एक temp file race condition थी जो silent failures cause कर रही थी — fix था callback के अंदर एक synchronous file move। यह वो किस्म का bug नहीं है जो code review में दिखे।

हर Layer पर Security Hardening

यह थोड़ा sobering था। पूरे stack का security audit — सिर्फ iOS app नहीं — multiple layers पर vulnerabilities दिखाता है: over-permissioned database functions, authentication edge cases, token verification gaps, और कई backend services में input validation issues।

इनमें से कोई भी iOS Swift code में नहीं था। वो उस backend में था जिससे iOS app बात करती है। लेकिन एक iOS app ship करने का मतलब है कि आपका पूरा stack अब आपके users की जेबों में है। इससे हर चीज़ पर stakes बढ़ गए। Code जो web app के लिए "ठीक काम करता था" वो suddenly unacceptable लगने लगा जब वो Apple के review process से गुज़र रहा था और एक native app में जा रहा था जिसे लोग साथ carry करते हैं।

StoreKit: The Submission Killer

StoreKit sandbox testing अपनी ही अलग दुनिया है, और यही वो चीज़ थी जिसने मेरी पहली submission reject करवाई। Sandbox environment production से अलग behave करता है। Transactions कभी-कभी हमेशा के लिए "pending" रहती हैं। Xcode StoreKit configuration file को manually sync करना पड़ता है। मैंने पूरी एक शाम एक purchase flow debug करने में बिताई जो code में perfectly काम करता था लेकिन sandbox में silently fail हो रहा था — निकला कि App Store Connect में product IDs में एक trailing space था। एक space।

Apple के reviewer को sandbox error मिली क्योंकि मेरी StoreKit configuration App Store Connect के साथ sync नहीं थी। Purchase flow मेरी local testing में ठीक काम करता था — लेकिन reviewer real sandbox hit कर रहा था, मेरी local StoreKit config file नहीं। मैंने उसी दिन fix किया, लेकिन यह एक perfect example है कि "मेरी machine पर काम करता है" और "Apple के environment में काम करता है" के बीच का gap कितना non-trivial है।

Purchase verification chain अपना एक project था: iOS app transaction का एक JWS (JSON Web Signature) representation एक server-side function को भेजती है, जो Apple के signed receipt का full cryptographic chain verification करती है। सिर्फ decode नहीं — actual signature validation। इसे ठीक करने में दो dedicated commits लगे।

Privacy और App Store Compliance

Privacy और compliance forms, decisions, और checkboxes हैं जिनके legal implications हैं — और कोई भी AI उन्हें आपके लिए fill नहीं कर सकती। App Tracking Transparency declarations, privacy nutrition labels, encryption के लिए export compliance (हाँ, HTTPS count होता है), content rights, Turnstile captcha integration। Claude Code Swift लिख सकती है, लेकिन वो यह नहीं बता सकती कि आपके data collection practices के लिए "Data Used to Track You" label ज़रूरी है या नहीं।

Full MFA और Localization

Original MFA implementation एक broken stub था — empty factor IDs, verify-only flow। मैंने इसे एक complete TOTP lifecycle के रूप में rewrite किया: enroll, QR code scan (native CoreImage generation), verify, status देखना, disable करना। वो है एक 394-line MFAView.swift जो पहले exist नहीं करती थी।

7 languages में localization का मतलब था 253 UI strings जो English, Spanish, French, Japanese, Korean, Vietnamese, और Chinese में translate हुईं। Claude ने translations किए, और ज़्यादातर अच्छे थे। लेकिन Japanese में "mostly good" का मतलब है कि आपके पास एक button label हो सकता है जो grammatically correct है लेकिन ऐसा लगता है जैसे किसी robot ने लिखा हो। मैंने ऐसे कई पकड़े — अपने phone की language switch करके और app actually use करके। यह वो testing है जो AI अभी आपके लिए नहीं कर सकती — अभी तो नहीं।


DIALØGUE iOS App से आप क्या कर सकते हैं?

जिन लोगों ने original build story नहीं पढ़ी, उनके लिए: DIALØGUE क्या करती है।

आप इसे एक topic दें — या एक PDF upload करें — और यह एक पूरी तरह researched, scripted, voiced podcast episode produce करती है। दो AI hosts आपके topic पर natural conversation करते हैं, real research के support के साथ। कोई microphone नहीं चाहिए।

iOS app में शामिल है:

  • 5-step creation wizard — topic, format, customization, outline review, script review
  • 7 languages में 30 AI voices — English, Spanish, French, Japanese, Korean, Vietnamese, Chinese
  • 9 podcast formats — Tech News Analysis से Investigative Comedy तक
  • Lock screen controls के साथ audio playback — background playback बस काम करता है
  • Apple Sign-In, Google OAuth, और email auth
  • In-app purchases — credit-based, कोई subscription नहीं: 4 credits के लिए $4.99, 9 के लिए $9.99, 18 के लिए $19.99
  • Studio — recurring shows set up करें जो automatically fresh episodes generate करें
  • PDF upload — research papers, reports, books source material के रूप में

यह एक real native SwiftUI app है। कोई web wrapper नहीं। कोई React Native नहीं। जो 69 Swift files से शुरू हुआ वो अब 88 files और 11,459 lines of code है, 195 tests के साथ। मुझे genuinely इसे ship करने पर गर्व है।

DIALØGUE iOS app library view showing podcast episodes with play buttons, duration, and dark mode UI
Library — आपके generated podcast episodes, play करने के लिए तैयार।

मेरा Original "Polish Phase" Estimate कितना गलत था?

मैंने लिखा था कि app "still in development, final polish phase में" थी। यह technically सच था, लेकिन मैंने underestimate किया कि "polish phase" का कितना हिस्सा actually नया काम था।

Git log देखूँ तो अब, 16 commits "polish" की तरह नहीं लगते। यह development का second phase लगता है। Test suite अकेले — 176 unit tests और 19 integration tests — अपना एक पूरा project था। Studio एक stub से full feature बन गया। Audio player दो बार reimagine हुआ। Security hardening ने 40+ backend functions को touch किया। MFA scratch से rewrite हुआ।

मैंने यह भी कहा था कि मैंने mini-player delete कर दिया। इसमें भी मैं गलत था — मैंने एक बेहतर बनाया, Now Playing sheet, speed controls, और download indicators के साथ। Original "delete it" instinct सही था — पहला mini-player बुरा था। लेकिन concept सही था। बस इसे properly build करना था।

मुझे लगता है कि honest split, अब जब मैं पूरी तस्वीर देख सकता हूँ, यह है: AI foundation build करती है (60%), humans product build करते हैं (30%), और App Store submission process बाकी 10% सिखाता है।


क्या DIALØGUE EU में Available है?

DIALØGUE worldwide available है, लेकिन EU availability अभी Apple process कर रही है। EU का Digital Markets Act additional compliance steps require करता है — alternative payment disclosures, specific privacy documentation, business registration details। मैंने सब कुछ submit कर दिया है, और Apple अभी review कर रही है। यह जल्द ही EU countries में available होनी चाहिए।

अगर आप EU में हैं और wait नहीं कर सकते, तो web app हर जगह काम करती है और उसमें same features हैं।


AI-Assisted iOS Development कितनी Fast है?

DIALØGUE iOS app को first commit से App Store तक लगभग दो हफ्ते लगे — AI scaffolding की एक शाम और दो हफ्ते का human product work। मैं यह table maintain करता रहता हूँ क्योंकि यह मुझे कुछ न कुछ सिखाती रहती है:

ProjectComplexityTime to Build
DIALØGUE v1MVP podcast generator~6 months
STRAŦUM10 AI agents, 11 frameworks, multi-tenant75 days
Site redesignWordPress frontend overhaul3 days
DIALØGUE v2Complete web app rebuild14 days
Blog migrationWordPress → Next.js, 490 posts, Sydney RAG4 days
DIALØGUE iOSNative iOS app, first time using Swift~2 weeks (scaffold: one evening)

DIALØGUE iOS के लिए scaffold-to-ship gap करीब दो हफ्ते था। Scaffold खुद एक शाम का था। यह ratio — AI का एक शाम का काम, human का दो हफ्ते का काम — आपको बता देता है कि हम अभी AI-assisted development के साथ कहाँ हैं।

AI वाला हिस्सा और fast होता जा रहा है। Human वाला हिस्सा roughly same रहता है। मैंने यह दो हफ्ते पहले लिखा था और अभी भी सच है।


जब AI Code Build करे, तो कौन सी Skills Matter करती हैं?

Original post में मैं अभी भी सही advice ढूँढ रहा था। "Simulator खोलने वाला इंसान बनना सीखो" — यही सबसे अच्छा था जो मेरे पास था।

अब जब मैंने actually चीज़ ship कर दी है, मुझे लगता है मैं थोड़ा और specific हो सकता हूँ।

App इसलिए exist करती है क्योंकि तीन चीज़ें थीं जो AI नहीं कर सकती थी:

  1. मैंने product use किया। Test नहीं किया। Use किया। Podcasts बनाए। उन्हें commute पर सुना। Notice किया कि outline review screen को research sources दिखाने की ज़रूरत है क्योंकि मैं जानना चाहता था कि facts कहाँ से आए।

  2. मैंने ऐसे judgment calls लिए जिनके कोई right answers नहीं हैं। Mini-player delete करूँ या रखूँ? Creation wizard में कितना customization बहुत ज़्यादा है? Studio feature एक tab हो या एक section? ये engineering decisions नहीं हैं। ये taste decisions हैं। और taste बहुत सारे products use करने से आती है — great ones और terrible ones — और एक instinct develop होती है कि क्या right लगता है।

  3. मैंने एक ऐसे system को navigate किया जो humans के लिए design किया गया था। App Store Connect, privacy declarations, export compliance, screenshot requirements — इनमें से कुछ भी automate नहीं हो सकता। इसके लिए पढ़ना, context समझना, और legal और business implications के बारे में judgment calls लेना ज़रूरी है। वो skill — complex human systems navigate करना — कहीं नहीं जा रही।

तो शायद updated advice यह है: चीज़ों को deeply use करना सीखो, quality की परवाह करके taste develop करो, और ऐसे systems navigate करने में comfortable हो जाओ जो simple बनाए नहीं गए।

यह "critically सोचना सीखो" से ज़्यादा concrete है। मुझे लगता है यह truth के करीब है। मैं अभी भी पूरी तरह sure नहीं हूँ।


DIALØGUE Download कैसे करें?

App free है in-app credit purchases के साथ। कोई subscription नहीं।

App Store पर Download करें

Worldwide available है — EU availability Apple process कर रही है और जल्द live होनी चाहिए। Web app हर जगह available है।


अक्सर पूछे जाने वाले सवाल

क्या DIALØGUE App Store पर available है?

हाँ! DIALØGUE - AI Podcast Studio March 2026 से App Store पर live है। यह free download है in-app credit purchases के साथ (4 credits के लिए $4.99, 9 के लिए $9.99, 18 के लिए $19.99)। Worldwide available है — EU availability submit हो चुकी है और Apple process कर रही है।

क्या यह EU में available है?

Submit हो चुकी है और Apple process कर रही है। EU का Digital Markets Act additional compliance steps require करता है, और मैंने paperwork complete कर ली है — बस Apple की review का wait है। जल्द available होनी चाहिए। तब तक, web app EU सहित हर जगह काम करती है।

क्या Apple ने reject किया था?

हाँ — पहली submission broken in-app purchases के लिए reject हुई (Guideline 2.1: App Completeness)। StoreKit sandbox configuration App Store Connect के साथ sync नहीं था, इसलिए review के दौरान purchases ने error throw की। मैंने उसी दिन fix किया, resubmit किया, और pass हो गया। फिर v1.0.1 भी pass हुई। कुल तीन submissions, एक rejection। उस rejection ने मुझे दोनों approvals से ज़्यादा सिखाया।

पूरा process कितने समय में हुआ?

Original blog post से App Store approval तक लगभग दो हफ्ते। Claude Code ने एक शाम में 69 Swift files scaffold किए। बाकी 16 commits ने 57 files में 4,886 lines add कीं — tests, Studio features, audio player redesign, MFA rewrite, security hardening, StoreKit verification, localization, और App Store submission process। App 88 files और 11,459 lines के साथ 195 tests के साथ ship हुई।

आखिरी 40% का सबसे कठिन हिस्सा क्या था?

StoreKit sandbox testing। "Code में काम करता है" और "Apple के transaction system में काम करता है" के बीच का gap enormous है। Sandbox transactions production से अलग behave करती हैं, product IDs exactly match होने चाहिए (trailing spaces तक), और feedback loop slow है — आप बस एक unit test run नहीं कर सकते।

क्या मैं अभी भी web app use कर सकता हूँ?

बिल्कुल। podcast.chandlernguyen.com में same features हैं और किसी भी device पर काम करती है। iOS app native conveniences add करती है — Apple Sign-In, lock screen controls, offline downloads — लेकिन core podcast generation experience identical है।


अभी भी सोच रहा हूँ कि अपनी बेटी को क्या बताऊँगा। लेकिन कम से कम अब मेरे पास एक shipped app है जिसे point कर सकता हूँ जब मैं कहूँ "human work ही असली मुश्किल है।"


शुभकामनाओं सहित, Chandler

पढ़ना जारी रखें

मेरा सफ़र
जुड़ें
भाषा
सेटिंग्स