Skip to content
··13 phút đọc

Không Ai Nói Cho Bạn: Công Việc Thực Sự Bắt Đầu Sau Khi AI Nói 'Xong'

Tôi đang xây ứng dụng iOS đầu tiên mà không biết Swift. Claude Code scaffold toàn bộ trong một buổi tối. Rồi tôi mở Simulator, và công việc thực sự bắt đầu.

Tôi chưa bao giờ mở Xcode trong đời.

Tôi không biết Swift. Tôi không biết SwiftUI. Tôi không biết macro @Observable làm gì hay tại sao AVAudioSession cần category. Hai ngày trước, nếu hỏi tôi StoreKit là gì, tôi sẽ đoán đó là ứng dụng nội thất.

Và tôi đang xây ứng dụng iOS native — và phát hiện code do AI tạo đưa bạn khoảng 60% chặng đường. 40% cuối, phần biến codebase thành sản phẩm, hoàn toàn là công việc con người. Đó là điều không bài "tôi xây X với AI" nào đề cập.

Ứng dụng cho DIALØGUE — công cụ tạo podcast AI của tôi. Không phải web wrapper. Không phải React Native. Ứng dụng SwiftUI thật với Apple Sign-In, mua hàng trong ứng dụng, trình phát audio với điều khiển màn hình khóa, và bản địa hóa 7 ngôn ngữ.

Tại sao bây giờ?

Ngày 3 tháng 2, Apple công bố Xcode 26.3 sẽ hỗ trợ agentic coding — với Claude Agent SDK của Anthropic tích hợp sẵn. Không chỉ autocomplete. Không chỉ gợi ý từng bước. Agent tự chủ hoàn toàn có thể khám phá cấu trúc dự án, tìm kiếm tài liệu Apple, chụp Xcode Preview để xem chúng đang xây gì, và tự lặp qua build và sửa lỗi.

Claude Code giờ có thể nói chuyện với Xcode qua MCP. Nó có thể nhìn thấy Simulator. Nó có thể đọc cảnh báo build và thông báo lỗi. Nó có thể nhìn UI thực sự trông như thế nào và quyết định có cần thay đổi không.

Điều đó thay đổi phép tính cho tôi. Tôi đã nghĩ về ứng dụng iOS native nhiều tháng nhưng cứ trì hoãn vì không biết Swift. Với Claude Agent trong Xcode, câu hỏi chuyển từ "tôi có thể học Swift đủ nhanh không?" thành "tôi có thể mô tả những gì muốn đủ rõ ràng không?"

Nó chưa xong. Tôi vẫn ở giai đoạn polish cuối, vẫn tìm thấy thứ chạy chưa đúng, vẫn học Swift bằng cách đọc code Claude viết cho tôi. Nhưng câu chuyện cho đến giờ — giống như lần rebuild DIALØGUE 14 ngày — đã củng cố cùng một bài học khó chịu.


Claude Code thực sự xây gì trong một buổi tối?

Đây là git history của tôi trông như thế nào:

Giai đoạnChuyện gì xảy raCommit
Tài liệu thiết kế + kế hoạch triển khaiQuyết định kiến trúc, 12 nhiệm vụ2
Claude xây "toàn bộ app"Scaffold → auth → thư viện → chi tiết → studio → StoreKit → accessibility6
Con người mở SimulatorSửa, test, thiết kế lại, sửa, test, thiết kế lại12+ (và đang tiếp)

Giai đoạn đầu — Claude Code scaffold toàn bộ ứng dụng — thực sự ấn tượng. Trong một buổi tối, tôi từ dự án Xcode trống đến ứng dụng biên dịch được với:

  • Apple Sign-In, Google OAuth, email/password auth, và MFA
  • Wizard tạo podcast 5 bước
  • Thư viện podcast với tìm kiếm và kéo để refresh
  • Phát audio với AVPlayer
  • StoreKit 2 mua hàng trong ứng dụng với xác minh phía server
  • Studio (quản lý show định kỳ)
  • Bản địa hóa 7 ngôn ngữ
  • Blog webview và accessibility label

69 file Swift. 7.568 dòng code. Tôi viết xấp xỉ không dòng nào.

Đây là nơi mọi bài blog AI kết thúc. Ảnh chụp chiến thắng. Khoảnh khắc "nhìn tôi xây." Số commit và số dòng và timeline không nên khả thi.

Nhưng tôi không có ứng dụng. Tôi có codebase biên dịch được.


Cái gì hỏng khi tôi thực sự dùng ứng dụng?

Tôi nhấn lung tung. Mọi thứ load. Một số màn hình trông ổn. Tôi nghĩ, "Có lẽ cái này thực sự sẽ chạy."

Rồi tôi thử tạo podcast.

Nút "Done" vứt bỏ công việc của bạn

Trình chỉnh sửa script cho phép sửa từng dòng đối thoại trước khi tạo audio. Có nút "Done." Tôi sửa một dòng, nhấn Done, và... chỉnh sửa biến mất.

Nút thoát chế độ sửa trước khi lưu. Trong code nó trông đúng — editMode = false — nhưng thứ tự sai. Lưu, rồi thoát.

Đây là loại bug khiến người dùng ném điện thoại. Và AI viết nó vì logic đúng về kỹ thuật — chỉ ngược thứ tự.

Dữ liệu thực làm app crash

Tôi điều hướng đến podcast được tạo bởi backend production. Crash. Field research_facts trả về mảng object ({fact, source, reference, confidence}), nhưng model Swift mong đợi mảng string. Cùng pattern khắp nơi — enum status phân biệt hoa thường (completed vs COMPLETE), nên mọi badge status đều hiện "Unknown."

Claude xây theo tài liệu thiết kế. Database production không đồng ý. Đây là loại thứ bạn chỉ phát hiện với dữ liệu thực, không phải dữ liệu test.

Realtime WebSocket đơn giản... không kết nối

Trên web, Supabase Realtime chạy tốt. Trên iOS, kết nối WebSocket âm thầm thất bại. Không lỗi, không crash. Chỉ... không có update.

Cách sửa là tiếp cận belt-and-suspenders: giữ subscription Realtime nhưng thêm polling fallback 5 giây chạy bất kể. Không thanh lịch, nhưng đáng tin. Mạng di động không đoán trước, và người dùng không quan tâm cách status cập nhật — chỉ cần nó cập nhật.

Toàn bộ app dùng màu hệ thống

Mọi màn hình đều iOS blue và gray mặc định. Light mode. Web app có thiết kế dark-mode cẩn thận — amber và vàng trên than, cái tôi gọi là "Studio Warmth." Claude đã chăm chỉ xây mọi màn hình, nhưng bằng màu hệ thống.

Tôi phải chạm tất cả 24 file view. Thay mọi Color.accentColor bằng Theme.brandPrimary. Bắt buộc .preferredColorScheme(.dark) ở root.

Đây không phải bug. AI làm đúng điều hợp lý. Nhưng "hợp lý" và "tốt" là hai thứ khác nhau.

Ứng dụng iOS DIALØGUE trang chi tiết podcast với theme Studio Warmth tối hiển thị header glow amber dạng radial và điều khiển audio tích hợp
Trang chi tiết podcast sau đợt Studio Warmth — glow amber, theme tối, playback tích hợp. Không gì trong số này tồn tại trong scaffold ban đầu của Claude.

Outline Review chỉ là nút "Approve"

Luồng tạo podcast có giai đoạn tương tác: AI tạo outline, và bạn review trước khi tiến hành. Trên web, đây là giao diện card mở rộng hiển thị mô tả từng segment, talking point, và nguồn nghiên cứu.

Trên iOS, Claude xây một nút ghi "Approve." Hết. Không nội dung outline. Không cách nhìn bạn đang duyệt gì. Tương tự cho script review — một nút, không phải trình chỉnh sửa.

Audio không phát

Trình phát audio trông đúng. Nút play, thanh tiến trình, điều khiển màn hình khóa. Nhưng nhấn play không làm gì. Chuỗi phân giải URL bị hỏng — URL download có chữ ký thất bại trong môi trường dev, và URL fallback dùng hostname Docker nội bộ mà Simulator không phân giải được.

Sau khi sửa audio và thiết kế lại trang chi tiết podcast với điều khiển play tích hợp, thanh mini player cố định ở dưới mọi tab trở nên thừa. Tôi xóa nó. Xóa code hoạt động nhưng không nên tồn tại — đó là quyết định hoàn toàn của con người.


Code AI so với sản phẩm thật trông thế nào?

Code do AI tạo có kiến trúc tốt nhưng trải nghiệm rỗng. Tôi không phàn nàn — những gì Claude Code làm rất ấn tượng. Từ "tôi không biết Swift" đến ứng dụng biên dịch với auth, IAP, phát audio, và bản địa hóa 7 ngôn ngữ trong một buổi tối? Đó sẽ mất nhiều tháng.

Nhưng có một narrative ngoài kia — trong blog, tweet, video demo — rằng AI viết app và bạn chỉ review. Ship. Xong.

Đó không phải những gì xảy ra. Đây là những gì thực sự xảy ra:

  1. Claude xây scaffold có kiến trúc tốt. Quyết định đi Supabase-direct (không có custom API layer) nghĩa là ứng dụng iOS nói chuyện với cùng backend như web app. Auth, database, realtime, storage — tất cả tái sử dụng. Tôi chỉ cần một component server-side mới (Edge Function verify-ios-purchase). Lựa chọn kiến trúc đó xuất sắc và tiết kiệm rất nhiều thời gian.

  2. Claude làm đúng các phần khó. Apple Sign-In với cryptographic nonce qua CryptoKit. Luồng mua StoreKit 2 với xác minh phía server. Cấu hình AVAudioSession cho phát nhạc nền. Những thứ này sẽ mất tôi nhiều ngày nếu tự tìm hiểu từ tài liệu.

  3. Claude làm sai các phần sản phẩm. Không sai theo nghĩa có bug — sai theo nghĩa "đây là codebase trông thế nào, không phải ứng dụng cảm thấy thế nào."

Claude xâyThực sự cần
Nút ghi "Approve"Trình review outline mở rộng với nguồn nghiên cứu
Màu hệ thống mọi màn hình24 file brand token, dark mode bắt buộc
JSON decoder cho schema tài liệuDecoder tùy chỉnh cho những gì database thực tế trả về
Subscription Realtime (pattern web)Realtime + polling fallback (pattern mobile)
Wizard tạo hoạt độngWizard tạo vừa trên màn hình điện thoại
Wizard tạo podcast iOS DIALØGUE hiển thị tùy chỉnh giọng nói với thanh trượt tốc độ và cao độ trong theme tối
Wizard tạo sau khi con người can thiệp — tùy chỉnh giọng nói với thanh trượt tốc độ/cao độ, section thu gọn được, tất cả vừa trên màn hình điện thoại.

Cột trái là code đúng. Cột phải là sản phẩm.


Nên nói gì với thế hệ tiếp theo về AI?

Tôi viết vài tuần trước về cô con gái tuổi teen và không biết nói gì với con về tương lai. Về cách các kỹ năng thực thi đang được tự động hóa và ngưỡng cho "tôi có thể tư duy phản biện" cứ tăng lên.

Xây ứng dụng iOS này làm nó rõ hơn — nhưng không theo hướng tôi ngờ.

Kỹ năng triển khai — cú pháp Swift, bố cục SwiftUI, API StoreKit — tôi không cần. Claude xử lý tất cả. Nếu "học lập trình" nghĩa là "học cú pháp và API của ngôn ngữ lập trình," lời khuyên đó có thời hạn sử dụng tính bằng tháng, không phải năm.

Nhưng đây là những gì tôi cần: thẩm mỹ sản phẩm, phán đoán thiết kế, và kỷ luật mở Simulator và thực sự dùng thứ đó thay vì tin code review.

Đây không chỉ là "thẩm mỹ." Chúng đòi hỏi tư duy phản biện — tư duy phản biện thật, không phải phiên bản buzzword. Loại mà bạn nhìn thứ gì đó biên dịch được, pass test, AI tự tin nói xong, và bạn nói: "Không. Cái này chưa đúng. Để tôi cho xem tại sao."

Đó là phần chúng ta không thể outsource. Chưa, có lẽ không bao giờ. AI cực kỳ giỏi tạo giải pháp. Nó tệ ở việc biết khi nào giải pháp sai theo cách không hiện trong log. Nó không dùng sản phẩm. Nó không cầm điện thoại. Nó không cảm thấy sự bực bội của nút Done nuốt công việc của bạn. Ai đó phải lái. Ai đó phải ở trong vòng lặp. Ai đó phải cung cấp kiểm tra trực giác nói "cái này chạy nhưng nó không tốt."

Có lẽ đó là điều tôi nên nói với con gái. Không phải "học lập trình" — cửa sổ đó đang đóng. Nhưng cũng không phải "chỉ học tư duy phản biện" vì quá mơ hồ. Cụ thể hơn:

Hãy học trở thành người mở Simulator.

Là người test thứ thật với dữ liệu thật và nhận ra gì sai trước khi người dùng nhận ra. Xây thẩm mỹ bằng cách dùng sản phẩm tuyệt vời và sản phẩm tệ và hiểu sự khác biệt. Phát triển sự tự tin đẩy lùi thứ gì đó đúng về kỹ thuật nhưng hỏng về trải nghiệm — ngay cả khi thứ đẩy lại bạn là AI nghe rất tự tin.

Con người trong vòng lặp không phải hình thức. Đó là toàn bộ sản phẩm.

Tôi vẫn chưa tự tin nó đủ. Nhưng đó là điều cụ thể nhất tôi có thể nói cho đến giờ.


Trạng thái hiện tại của ứng dụng iOS?

Ứng dụng vẫn đang phát triển. Tôi ở giai đoạn polish — giai đoạn mà các bài blog AI giả vờ không tồn tại. Test dữ liệu production thực với mọi view. Tìm edge case chỉ bề mặt khi bạn thực sự dùng thứ đó.

Git log của tôi hai ngày qua có nhiều commit fix: hơn commit feat:. Điều đó đúng. Tính năng là phần dễ. Sửa lỗi là sản phẩm.

Đây là trạng thái hiện tại:

Hoạt độngCòn lại
Auth (Apple, Google, email, MFA)PDF upload (document picker + Supabase Storage)
Wizard tạo 5 bước với tùy chỉnh đầy đủDownload MP3 offline
Chi tiết podcast với review outline/scriptPush notification (hoãn đến v1.1)
Phát audio với điều khiển màn hình khóaPhân phối TestFlight beta
StoreKit 2 mua hàng trong ứng dụngNộp App Store
Studio (show định kỳ)
Bản địa hóa 7 ngôn ngữ
Design system Studio Warmth

Tôi sẽ viết bài tiếp theo khi ứng dụng lên App Store. Hoặc khi bị từ chối. Biết Apple, câu chuyện bị từ chối có lẽ thú vị hơn.


Tốc độ phát triển AI đang tăng nhanh thế nào?

Cho tôi cập nhật bảng cứ ám ảnh tôi:

Dự ánĐộ phức tạpThời gian xây
DIALØGUE v1MVP tạo podcast~6 tháng
STRAŦUM10 AI agent, 11 framework, multi-tenant75 ngày
Thiết kế lại siteĐại tu frontend WordPress3 ngày
DIALØGUE v2Xây lại web app hoàn toàn14 ngày
Migration blogWordPress → Next.js, 490 bài, Sydney RAG4 ngày
DIALØGUE iOSỨng dụng iOS native, lần đầu dùng SwiftĐang tiến hành — scaffold mất một buổi tối

Tôi thêm cột mới trong đầu: "Thời gian cho Claude" vs "Thời gian cho tôi." Tỷ lệ tiếp tục dịch chuyển. Phần Claude ngày càng ngắn. Phần tôi giữ nguyên. (Tôi nhận thấy cùng pattern khi xây lại blog backend trong 4 ngày — migration nhanh, nhưng 8 ngày tinh chỉnh cộng dồn sau đó mới là lúc site thực sự thành hình.)

Và công cụ ngày càng tốt hơn. Khi Apple và Anthropic công bố tích hợp Xcode + Claude Agent SDK ngày 3 tháng 2, nó không chỉ là thông cáo báo chí. Nó thay đổi căn bản điều gì khả thi. Claude giờ có thể nhìn thấy Simulator, đọc lỗi build, chụp Preview, và lặp theo hình ảnh — vòng lặp chính xác khiến phát triển iOS khó cho con người đang trở thành native của AI.

Hai tuần sau công bố đó, tôi bắt đầu xây ứng dụng iOS mà không biết Swift. Đó không phải trùng hợp.

Người tiếp theo làm điều này sẽ không cần viết bài blog về nó. Nó sẽ chỉ là... bình thường. Đó là tăng tốc trông như thế nào từ bên trong — mỗi cột mốc cảm thấy ít đáng chú ý hơn cái trước, dù khoảng cách khách quan vẫn tăng.

Đó là điều không ai nói cho bạn. AI đang nhanh hơn. Công việc con người thì không. Chưa.


Câu hỏi thường gặp

Bạn có thể thực sự xây ứng dụng iOS với AI nếu không biết Swift không?

Có — Claude Code scaffold 69 file Swift và 7.568 dòng code trong một buổi tối, bao gồm Apple Sign-In, StoreKit 2 mua hàng trong ứng dụng, phát audio, và bản địa hóa 7 ngôn ngữ. Nhưng "xây" đang gánh nặng nghĩa trong câu đó. AI tạo codebase biên dịch; biến nó thành sản phẩm bạn thực sự ship đòi hỏi test con người rộng rãi, phán đoán thiết kế, và debug dữ liệu thực.

Xcode 26.3 với Claude Agent SDK thay đổi gì?

Công bố ngày 3 tháng 2, 2026, tích hợp Xcode + Claude Agent SDK cho phép AI agent khám phá cấu trúc dự án, tìm kiếm tài liệu Apple, chụp Xcode Preview, nhìn thấy Simulator, đọc lỗi build, và lặp tự chủ. Điều này thay đổi căn bản điều gì khả thi cho developer không biết Swift — câu hỏi chuyển từ "tôi có thể học ngôn ngữ không?" thành "tôi có thể mô tả những gì muốn không?"

Bao nhiêu phần trăm ứng dụng AI-built thực sự cần công việc con người?

Theo kinh nghiệm tôi, AI đưa bạn khoảng 60% — kiến trúc, boilerplate, tích hợp API khó. 40% còn lại là công việc sản phẩm: sửa bug chỉ xuất hiện với dữ liệu thực, thiết kế lại UI hoạt động nhưng cảm giác chưa đúng, và quyết định giữ gì xóa gì. 40% đó là nơi sản phẩm thực sự tồn tại.

Kỹ năng nào quan trọng nhất khi xây với AI coding agent?

Thẩm mỹ sản phẩm, phán đoán thiết kế, và tư duy phản biện. Kỹ năng triển khai (cú pháp, API, framework) ngày càng được AI xử lý. Điều không thể outsource là khả năng test thứ thật với dữ liệu thật, nhận ra gì sai, và đẩy lùi thứ đúng kỹ thuật nhưng hỏng trải nghiệm.

Ứng dụng iOS DIALØGUE có trên App Store chưa?

Chưa — vẫn đang phát triển, ở giai đoạn polish cuối. Tính năng hoạt động, nhưng tôi vẫn test với dữ liệu production và tìm edge case chỉ bề mặt khi bạn thực sự dùng ứng dụng. Tôi sẽ viết bài tiếp theo khi lên App Store (hoặc bị từ chối).


Vẫn đang xây. Vẫn chưa xong. Vẫn đang tìm ra nên nói gì với con gái.


Đọc tiếp

Hành trình
Kết nối
Ngôn ngữ
Tùy chọn