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

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

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

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

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

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

लेकिन पहली बार में नहीं। I have to admit — मैंने सोचा था rejection story approval story से ज़्यादा interesting होगी। और मैं सही था।


पहली 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 try किया।

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

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

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


वो "आखिरी 40%" — असल में कैसा था?

उस original post में मैंने कहा था AI आपको 60% तक पहुँचाती है और बाकी 40% purely 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 थे। Zero. Claude ने 69 files का production code build किया और एक भी test नहीं लिखा। Original post के बाद मेरे पहले real commit ने 176 unit tests और 19 integration tests add किए जो local Supabase instance के against 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 — पूरा Reimagine

Original post में मैंने बताया था कि mini-player delete कर दिया। Turns out मैं गलत था — मैंने आखिर में एक बेहतर 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 part था isSeeking state — इसके बिना slider position और audio observer एक-दूसरे से fight करते हैं, 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 में नहीं दिखता।

Security Hardening — हर Layer पर

यह थोड़ा sobering था। Full 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 talk करती है। लेकिन iOS app ship करने का मतलब है आपका पूरा stack अब users की जेबों में है। Stakes बढ़ गए हर चीज़ पर। Code जो web app के लिए "ठीक-ठाक" था, वो suddenly unacceptable लगने लगा — जब वो Apple review से गुज़र रहा था और लोगों की pockets में जाने वाला था।

StoreKit: The Submission Killer

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

Apple के reviewer को sandbox error मिली क्योंकि मेरी StoreKit config App Store Connect के साथ sync नहीं थी। Purchase flow local testing में ठीक काम करता था — लेकिन reviewer real sandbox hit कर रहा था, मेरी local config नहीं। Same day fix किया, लेकिन perfect example है — "works on my machine" और "works in Apple's 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 चाहिए या नहीं।

MFA Rewrite और 7-Language 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 check, disable। Result: 394-line MFAView.swift जो पहले exist ही नहीं करती थी।

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


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

अगर आपने original build story नहीं पढ़ी — quick summary: DIALØGUE क्या करती है।

एक topic दो — या PDF upload करो — और यह fully researched, scripted, voiced podcast episode produce करती है। दो AI hosts आपके topic पर natural conversation करते हैं, real research backed। No microphone needed।

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 है। No web wrapper। No React Native। जो 69 Swift files से शुरू हुआ वो अब 88 files, 11,459 lines of code है, 195 tests के साथ। Genuinely proud हूँ इसे ship करके।

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

मेरा "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, अब जब पूरी picture दिख रही है: 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 माँगता है — 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 में कहाँ हैं right now।

AI part और fast होता जा रहा है। Human part 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 too much है? Studio tab हो या section? ये engineering decisions नहीं। ये taste decisions हैं। और taste आती है बहुत सारे products use करने से — great ones और terrible ones — और slowly एक instinct develop होती है कि क्या right feel करता है।

  3. एक ऐसा system navigate किया जो humans के लिए बना था। 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 की care करके taste develop करो, और ऐसे systems navigate करने में comfortable हो जाओ जो simple बनाए ही नहीं गए।

यह "learn to think critically" से ज़्यादा concrete है। मुझे लगता है truth के करीब है। लेकिन honestly — अभी भी पूरा sure नहीं हूँ।


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

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

App Store पर Download करें

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


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

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 माँगता है — paperwork complete कर ली है, बस Apple review का wait है। जल्द available होनी चाहिए। तब तक web app EU सहित हर जगह काम करती है।

Apple ने reject किया था?

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

पूरा process कितना लंबा?

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

आखिरी 40% का सबसे hard part?

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 कर सकता हूँ जब कहूँ "the human work is the hard part."


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

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

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