Sinabi ng App Store na Oo
Dalawang linggo ang nakaraan, sumulat ako ng "Nagtatayo pa rin. Hindi pa tapos." Ngayon, live na ang DIALØGUE sa App Store. Ito ang hitsura ng huling 40%.
Dalawang linggo ang nakaraan, nagtapos ako ng blog post sa ganito: "Nagtatayo pa rin. Hindi pa tapos. Iniisip pa rin kung ano ang sasabihin sa anak ko."
Nangako ako na mag-follow up kapag naabot ng app ang App Store. O kapag na-reject. Sinabi ko pa na baka mas interesting ang rejection story.
DIALØGUE - AI Podcast Studio ay live na sa App Store — isang native SwiftUI iOS app na ginagawang fully produced podcast episode ang kahit anong topic o PDF, binuo gamit ang Claude Code ng isang taong hindi pa marunong ng Swift noon. I-download mo na ngayon.
Pero hindi sa unang try. Aaminin ko — tama ang hula ko na mas interesting ang rejection story kaysa sa approval story.
Ano ang Nangyari Nang I-reject ng Apple ang Unang Submission?
Na-reject ang unang submission ko. Guideline 2.1 — Performance: App Completeness. Sira ang in-app purchases.
Magalang ang review message ng Apple — napansin nila na first submission ko, binati nila ako sa pag-join ng developer program, at malinaw na ipinaliwanag ang issue. Error ang lumabas sa IAP products nang subukan ng reviewer nila na bumili.
Ito ang nakakatawa: perpekto ang pagtatrabaho ng purchase flow sa testing ko. Ang problema ay nasa sandbox environment ng Apple, na ibang-iba ang gawi kumpara sa development at production. Kailangan ng StoreKit configuration na exact sync sa App Store Connect — at hindi ito ang nangyari sa akin. Nag-test ako laban sa local StoreKit configuration file habang binibisita ng reviewer ang tunay na sandbox.
Inayos ko ito noong parehong araw, nag-resubmit, at pumasa. Nagpadala rin ako ng v1.0.1 bug fix update pagkatapos, at maayos din itong dumaan.
Tatlong submissions lahat. Isang rejection. Higit na natuto ako tungkol sa App Store process sa rejection kaysa sa dalawang approval combined. Ganyan talaga ang pattern, 'di ba? Ang mga failure ay palaging mas educational kaysa sa mga success.
Ano Ang Hitsura ng "Huling 40%" Sa Aktwal?
Sa original post, sinabi ko na ang AI ay nagdadala sa iyo ng 60% ng daan at ang natitirang 40% ay ganap na trabaho ng tao. Gusto ko maging mas specific ngayon, kasi mayroon akong git log para patunayan ito.
16 commits. 57 files ang nagbago. 4,886 linya ang nadagdag. Lumaki ang app mula sa 69 Swift files hanggang 88, mula 7,568 linya hanggang 11,459. Halos 4,000 linya ng "polish" iyon.
Ito ang nilalaman ng 16 commits na iyon — sa halos pagkakasunod-sunod ng nangyari:
Ang Test Suite na Dapat Nandoon Mula Pa sa Simula
Zero tests ang orihinal na scaffold. Zero. Nagbuo si Claude ng 69 files ng production code at wala ni isang test. Sa unang tunay na commit ko pagkatapos ng original post, nagdagdag ako ng 176 unit tests at 19 integration tests na tumatakbo laban sa local Supabase instance.
Agad na nakahuli ng totoong bugs ang pagsusulat ng mga tests: Show model decode failures mula sa mga non-existent database columns, AudioPlayer na hindi nire-reset sa katapusan ng track, isang library reload race condition, isang missing nil UUID guard sa creation wizard. Bawat isa sa mga ito ay naging crash sa production.
Sa tingin ko ito ay pattern na worth naming: Nag-generate ang AI ng code nang walang test infrastructure. Hindi dahil hindi nito masusulat ang tests — magaling si Claude sa pagsusulat ng tests kapag hinihingi mo — pero ang initial scaffold prompt ay laging "build the app," hindi "build the app na may comprehensive tests." Galing sa akin ang tests — mula sa desisyon kong hindi ako kumportable mag-ship nang wala sila.

Studio: Ang Feature na Halos Stub Lang Noon
Ang orihinal na "Studio" feature para sa recurring shows ay isang placeholder. Pagkatapos ng dalawang commits, naging tunay na produkto na ito: show creation na may template grids, episode management na may status badges at action buttons, edit/delete workflows, schedule configuration na may timezone pickers, at voice customization sheets.
Tapos dumating ang Studio Phase 2: show detail redesign, per-episode retry/delete, manual episode generation na may credit checks. Plus 8 bagong XCUITests para masiguro na gumagana ang lahat end-to-end.
Ito ang klase ng bagay na tinutukoy ko ng "nagbuo ang AI ng codebase, hindi produkto." Nag-compile ang Studio feature. Nag-render ito ng screen. Pero hindi ka talaga makakapag-manage ng recurring podcast show gamit ito.
Ang Audio Player na Inimagen Ulit
Nabanggit ko sa original post na binura ko ang mini-player. Pala mali pala ako — natapos akong gumawa ng mas magandang mini-player. Ang final design ay may persistent mini-player bar sa itaas ng tab bar na may progress, skip controls, at play/pause. I-tap mo ito at lalabas ang expanded "Now Playing" sheet na may seekable slider, speed selector (0.5x hanggang 2x), transport controls, at sound-rings artwork animation.
Ang nakakatuwang bahagi ay ang isSeeking state — kung wala ito, nagaaway ang position ng slider at ang audio observer, lumilikha ng jittery na gulo. Isang linya ng state iyon na isang oras ang inabot ko para i-diagnose.
Nagdagdag din ako ng offline downloads na may ambient UX: green icon sa mga na-download na episode sa library, completion toast, "Downloaded" label sa Now Playing, at swipe-to-remove-download. Ang DownloadManager ay nagkaroon ng temp file race condition sa URLSession delegate na nagdulot ng mga silent failure — ang fix ay isang synchronous file move sa loob ng callback. Hindi ito ang klase ng bug na lumalabas sa code review.
Security Hardening sa Bawat Layer
Sobering ito. Ang isang security audit ng full stack — hindi lang ng iOS app — ay nagsiwalat ng mga vulnerabilities sa maraming layer: over-permissioned database functions, authentication edge cases, token verification gaps, at input validation issues sa ilang backend services.
Wala sa mga ito sa iOS Swift code. Nasa backend na kinakausap ng iOS app. Pero ang pag-ship ng iOS app ay nangangahulugang nasa bulsa na ng mga user mo ang buong stack mo. Lumaki ang stakes sa lahat. Ang code na "gumagana nang maayos" para sa web app ay bigla na lang hindi acceptable nang dumaan ito sa review process ng Apple at napunta sa native app na dinadala ng mga tao sa lahat ng dako.
StoreKit: Ang Submission Killer
Ang StoreKit sandbox testing ay sarili nitong universe, at iyon mismo ang nagdulot ng rejection sa unang submission ko. Ibang-iba ang gawi ng sandbox environment kumpara sa production. Minsan ay nananatiling "pending" magpakailanman ang mga transactions. Kailangan ng manual sync ang Xcode StoreKit configuration file. Gumugol ako ng isang buong gabi na nagde-debug ng purchase flow na perpektong gumagana sa code pero tahimik na nagfe-fail sa sandbox — pala may trailing space ang product IDs sa App Store Connect. Isang space lang iyon.
Na-hit ng reviewer ng Apple ang sandbox error kasi out of sync ang StoreKit configuration ko sa App Store Connect. Gumagana nang maayos ang purchase flow sa local testing ko — pero ang reviewer ay bumibisita sa tunay na sandbox, hindi sa local StoreKit config file ko. Inayos ko ito noong parehong araw, pero perpektong halimbawa ito ng kung gaano kalaki ang agwat sa pagitan ng "gumagana sa machine ko" at "gumagana sa environment ng Apple."
Sariling project ang purchase verification chain: nagpapadala ang iOS app ng JWS (JSON Web Signature) representation ng transaction sa isang server-side function, na gumagawa ng full cryptographic chain verification ng signed receipt ng Apple. Hindi lang decoding — actual signature validation. Dalawang dedicated commits ang inabot para maaayos ito.
Privacy at App Store Compliance
Ang privacy at compliance ay mga form, desisyon, at checkboxes na may legal implications — at walang AI ang makakalagay ng sagot para sa iyo. App Tracking Transparency declarations, privacy nutrition labels, export compliance para sa encryption (oo, kasama ang HTTPS), content rights, Turnstile captcha integration. Marunong magsulat ng Swift si Claude Code, pero hindi nito masasabi sa iyo kung ang data collection practices mo ay nangangailangan ng "Data Used to Track You" label.
Full MFA at Localization
Ang orihinal na MFA implementation ay isang broken stub — empty factor IDs, verify-only flow. Sinulat ko ulit ito bilang kumpletong TOTP lifecycle: enroll, scan QR code (native CoreImage generation), verify, view status, disable. Iyon ay isang 394-line na MFAView.swift na hindi pa umiiral dati.
Localization sa 7 wika ay nangangahulugang 253 UI strings na isinalin sa English, Spanish, French, Japanese, Korean, Vietnamese, at Chinese. Ginawa ni Claude ang mga pagsasalin, at karamihan ay maganda. Pero ang "karamisan ay maganda" sa Japanese ay maaaring may button label na grammatically correct pero parang robot ang nagsulat. Nakahuli ako ng ilan sa mga iyon sa pamamagitan ng pagpapalit ng wika ng phone ko at aktwal na paggamit ng app. Iyon ang klase ng testing na hindi pa kaya ng AI para sa iyo — hindi pa.
Ano ang Magagawa Mo sa DIALØGUE iOS App?
Para sa sinumang hindi nakabasa ng original build story, ito ang ginagawa ng DIALØGUE:
Bibigyan mo ito ng topic — o mag-upload ng PDF — at mag-produce ito ng fully researched, scripted, voiced podcast episode. Dalawang AI hosts ang mag-uusap nang natural tungkol sa topic mo, backed ng tunay na research. Walang microphone na kailangan.
Kasama sa iOS app:
- 5-step creation wizard — topic, format, customization, outline review, script review
- 30 AI voices sa 7 wika — English, Spanish, French, Japanese, Korean, Vietnamese, Chinese
- 9 podcast formats — mula sa Tech News Analysis hanggang Investigative Comedy
- Audio playback na may lock screen controls — background playback na gumagana agad
- Apple Sign-In, Google OAuth, at email auth
- In-app purchases — credit-based, walang subscription: 4 credits para sa $4.99, 9 para sa $9.99, 18 para sa $19.99
- Studio — mag-set up ng recurring shows na awtomatikong nag-ge-generate ng mga bagong episode
- PDF upload — research papers, reports, aklat bilang source material
Tunay na native SwiftUI app ito. Hindi web wrapper. Hindi React Native. Ang nagsimula sa 69 Swift files ay 88 files na ngayon at 11,459 linya ng code, backed ng 195 tests. Proud na proud akong nai-ship ito.
Gaano Kalayo ang Pagkakamali Ko sa Original na "Polish Phase" Estimate?
Sinulat ko na ang app ay "nasa development pa rin, nasa final polish phase." Totoo iyon technically, pero hindi ko inasahan kung gaano karami sa "polish phase" ang bago talagang trabaho.
Tingnan mo ang git log ngayon — ang 16 commits ay hindi mukhang "polish." Mukhang second phase ng development. Ang test suite lang — 176 unit tests at 19 integration tests — ay isang buong project na iyon. Lumago ang Studio mula sa stub hanggang full feature. Na-reimagine ang audio player nang dalawang beses. Ang security hardening ay humawak sa 40+ backend functions. Na-rewrite ang MFA mula sa simula.
Sinabi ko rin na binura ko ang mini-player. Mali rin pala ako doon — natapos akong gumawa ng mas magandang bersyon, na may Now Playing sheet, speed controls, at download indicators. Tama ang orihinal na instinct na "burahin ito" — ang unang mini-player ay masama talaga. Pero ang konsepto ay tama. Kailangan lang itong buuin nang maayos.
Sa tingin ko ang tunay na split, ngayong nakita ko na ang buong larawan, ay: nagtatayo ang AI ng pundasyon (60%), nagtatayo ang mga tao ng produkto (30%), at itinuturo ng App Store submission process ang natitirang 10%.
Available ba ang DIALØGUE sa EU?
Available ang DIALØGUE sa buong mundo, pero pinoproseso pa ng Apple ang EU availability. Ang EU's Digital Markets Act ay nangangailangan ng karagdagang compliance steps — alternative payment disclosures, specific privacy documentation, business registration details. Naisumite ko na ang lahat, at nire-review ito ng Apple ngayon. Available na ito sa mga EU countries sa lalong madaling panahon.
Kung nasa EU ka at hindi makapaghintay, gumagana ang web app kahit saan at pareho ang mga features.
Gaano Kabilis ang AI-Assisted iOS Development?
Ang DIALØGUE iOS app ay tumagal ng halos dalawang linggo mula sa first commit hanggang App Store — isang gabi ng AI scaffolding at dalawang linggo ng human product work. Pinapanatili ko ang table na ito kasi lagi itong nagtuturo sa akin ng bagay:
| Proyekto | Complexity | Oras ng Pagbuo |
|---|---|---|
| DIALØGUE v1 | MVP podcast generator | ~6 na buwan |
| STRAŦUM | 10 AI agents, 11 frameworks, multi-tenant | 75 araw |
| Site redesign | WordPress frontend overhaul | 3 araw |
| DIALØGUE v2 | Buong web app rebuild | 14 na araw |
| Blog migration | WordPress → Next.js, 490 posts, Sydney RAG | 4 na araw |
| DIALØGUE iOS | Native iOS app, unang beses gumamit ng Swift | ~2 linggo (scaffold: isang gabi lang) |
Ang scaffold-to-ship gap para sa DIALØGUE iOS ay halos dalawang linggo. Ang scaffold mismo ay isang gabi lang. Ang ratio na iyon — isang gabi ng AI work, dalawang linggo ng human work — ay nagsasabi ng lahat tungkol sa kung nasaan tayo sa AI-assisted development ngayon.
Ang AI part ay patuloy na nagbibilis. Ang human part ay halos pareho pa rin. Sinulat ko iyon dalawang linggo ang nakaraan at totoo pa rin.
Anong mga Skills ang Mahalaga Kapag Nagtatayo ang AI ng Code?
Sa original post, naghahanap pa rin ako ng tamang payo. "Matutong maging ang taong nagbubukas ng Simulator" ang pinakamahusay na nakuha ko noon.
Ngayong talagang nai-ship ko na ang bagay, sa tingin ko kaya ko nang maging mas specific.
Umiiral ang app dahil sa tatlong bagay na hindi kaya ng AI:
-
Ginamit ko ang produkto. Hindi lang sinubukan. Ginamit. Gumawa ng mga podcast. Pinakinggan sa commute ko. Napansin na ang outline review screen ay kailangang magpakita ng research sources kasi gusto kong malaman kung saan galing ang mga facts.
-
Gumawa ako ng judgment calls na walang tamang sagot. Burahin ang mini-player o panatilihin? Magkano ang masyadong maraming customization sa creation wizard? Dapat tab o section ang Studio feature? Hindi engineering decisions iyon. Taste decisions iyon. At ang taste ay galing sa paggamit ng maraming produkto — ang magaganda at ang masasama — at pagbuo ng instinct para sa kung ano ang tama ang pakiramdam.
-
Nag-navigate ako sa sistema na idinisenyo para sa mga tao. App Store Connect, privacy declarations, export compliance, screenshot requirements — wala sa mga ito ang maaaring i-automate. Nangangailangan ito ng pagbabasa, pag-unawa ng context, at paggawa ng judgment calls tungkol sa legal at business implications. Ang skill na iyon — ang pag-navigate sa mga kumplikadong human systems — ay hindi mawawala.
Kaya siguro ang updated na payo ay: matutong gamitin ang mga bagay nang malalim, bumuo ng taste sa pamamagitan ng pag-aalaga sa kalidad, at masanay sa pag-navigate ng mga sistema na hindi idinisenyo para maging simple.
Mas concrete iyon kaysa "matutong mag-isip nang kritikal." Sa tingin ko mas malapit ito sa katotohanan. Hindi pa rin ako sigurado kung sapat iyon.
Paano I-download ang DIALØGUE?
Libre ang app na may in-app credit purchases. Walang subscription.
Available sa buong mundo — pinoproseso pa ng Apple ang EU availability at malapit na itong maging live. Available ang web app sa lahat ng dako.
Mga Madalas Itanong
Available na ba ang DIALØGUE sa App Store?
Oo! DIALØGUE - AI Podcast Studio ay live na sa App Store simula Marso 2026. Libre ang download na may in-app credit purchases (4 credits para sa $4.99, 9 para sa $9.99, 18 para sa $19.99). Available sa buong mundo — naisumite na ang EU availability at pinoproseso ito ng Apple.
Available ba ito sa EU?
Naisumite na at pinoproseso ng Apple. Ang EU's Digital Markets Act ay nangangailangan ng karagdagang compliance steps, at natapos ko na ang paperwork — naghihintay lang ngayon sa review ng Apple. Available na ito sa lalong madaling panahon. Sa ngayon, gumagana ang web app kahit saan kasama na ang EU.
Na-reject ba ito ng Apple?
Oo — na-reject ang unang submission para sa sirang in-app purchases (Guideline 2.1: App Completeness). Hindi naka-sync ang StoreKit sandbox configuration sa App Store Connect, kaya error ang lumabas sa mga purchase habang nire-review. Inayos ko ito noong parehong araw, nag-resubmit, at pumasa. Pumasa rin ang v1.0.1. Tatlong submissions lahat, isang rejection. Higit na natuto ako sa rejection kaysa sa dalawang approval.
Gaano katagal ang buong proseso?
Halos dalawang linggo mula sa original blog post hanggang App Store approval. In-scaffold ni Claude Code ang 69 Swift files sa isang gabi. Ang natitirang 16 commits ay nagdagdag ng 4,886 linya sa 57 files — tests, Studio features, audio player redesign, MFA rewrite, security hardening, StoreKit verification, localization, at ang App Store submission process. Nai-ship ang app sa 88 files at 11,459 linya na may 195 tests.
Ano ang pinakamahirap na bahagi ng huling 40%?
StoreKit sandbox testing. Napakalaki ng agwat sa pagitan ng "gumagana ito sa code" at "gumagana ito sa transaction system ng Apple." Ibang-iba ang gawi ng sandbox transactions kumpara sa production, kailangang exact match ang product IDs (pati na ang mga trailing spaces), at mabagal ang feedback loop — hindi ka basta makakapag-run ng unit test.
Maaari pa rin ba akong gumamit ng web app?
Syempre naman. Ang podcast.chandlernguyen.com ay may parehong features at gumagana sa kahit anong device. Nagdadagdag ang iOS app ng mga native convenience — Apple Sign-In, lock screen controls, offline downloads — pero ang core podcast generation experience ay magkapareho.
Iniisip pa rin kung ano ang sasabihin sa anak ko. Pero ngayon ay may nai-ship na akong app para ituro kapag sinabi kong "ang trabaho ng tao ang mahirap na bahagi."







