Tạo ứng dụng iOS bằng AI: cạm bẫy và cách kiểm tra
Bởi Mehdi Azizi
Cập nhật ngày , 9 phút
Claude, ChatGPT và Cursor viết code iOS rất nhanh. Ký ứng dụng, gói đăng ký, Apple duyệt, iPhone thật: những gì AI bỏ sót và cách kiểm tra tất cả.
Tạo ứng dụng iOS bằng AI: câu trả lời ngắn
Có, bạn hoàn toàn có thể tạo ứng dụng iOS bằng AI dù mới bắt đầu. Cách làm này có tên gọi riêng: vibe coding. Claude, ChatGPT hay Cursor viết rất tốt các màn hình, điều hướng, logic đơn giản và các lệnh gọi tới cơ sở dữ liệu. Thứ chúng làm kém là mọi thứ nằm ngoài code: ký ứng dụng, cấu hình App Store Connect, gói đăng ký, quy trình duyệt của Apple và những lần crash chỉ xuất hiện trên iPhone thật.
Nói cách khác, AI giúp bạn tiết kiệm hàng tuần ở phần dễ thấy nhất của công việc, rồi bỏ bạn một mình ở phần quyết định việc app của bạn có ra mắt được hay không. Bài này chỉ cho bạn ranh giới nằm ở đâu, cách dẫn dắt AI để nó vẫn hữu ích, và cách kiểm tra những gì nó tạo ra trước khi Apple hay người dùng làm thay bạn.
Mình tự code các app iOS của mình bằng Claude và Cursor, mỗi ngày. Solys, một app báo thức với mini-game, và TradaZen, một app mô phỏng giao dịch, đều đã lên App Store. Nolera và Clic từng bị Apple từ chối, rồi được sửa lại. Mọi thứ dưới đây đến từ công việc đó, không phải từ một bản demo. Nếu bạn còn phân vân chọn công cụ, mình có so sánh Claude Code, Cursor và ChatGPT cho app iPhone trong một bài riêng.
Những gì AI thực sự làm tốt
Màn hình và điều hướng
Mô tả một màn hình thật chính xác (nó hiển thị gì, mỗi nút làm gì, chuyện gì xảy ra khi danh sách trống) và AI trả lại cho bạn một component gọn gàng trong vài giây. Đây là chỗ bạn tiết kiệm được nhiều nhất, nhất là với React Native và Expo, vì AI đã thấy rất nhiều code kiểu này. Đó cũng là stack mình dùng cho tất cả app của mình, và mình giải thích lý do ở trang React Native và Expo cho app di động.
Logic nghiệp vụ đơn giản
Tính điểm, sắp xếp danh sách, định dạng ngày, kiểm tra form: AI làm nhanh và khá tốt, với điều kiện bạn đưa cho nó các trường hợp biên. Một danh sách trống, một trường nhập quá dài, một ngày ở múi giờ khác. Nếu bạn không nêu ra, không phải lúc nào nó cũng xử lý.
Giải thích những gì bạn chưa hiểu
Đây là cách dùng bị đánh giá thấp nhất. Dán một thông báo lỗi, một đoạn cấu hình hay một lần bị Apple từ chối, rồi hỏi "giải thích cho mình điều này nghĩa là gì, đừng sửa gì cả". Bạn học nhanh hơn đọc tutorial, vì lời giải thích nói về chính dự án của bạn.
Kết nối backend
Tạo bảng trong Supabase, viết một hàm đọc dữ liệu của người dùng đang đăng nhập, xử lý trạng thái đang tải: AI rất rành các công cụ này. Chỉ cần để mắt tới bảo mật, mình sẽ nói thêm ở dưới.
Những gì AI bỏ sót khi bạn tạo ứng dụng iOS
Đây là phần không ai cho bạn thấy trong các video "mình làm một app trong một cuối tuần". Mỗi điểm dưới đây có thể chặn việc phát hành của bạn nhiều ngày, chưa kể các kiểm tra tự động khi gửi lên, như ITMS-90338 với API không công khai.
Ký ứng dụng và chứng chỉ
Để chạy trên iPhone và lên App Store, app của bạn phải được ký bằng một chứng chỉ và một provisioning profile gắn với tài khoản Apple Developer của bạn. AI có thể giải thích nguyên lý, nhưng nó không biết tài khoản của bạn nếu không được cấp quyền truy cập. Đôi khi nó bịa ra những bước không còn tồn tại, hoặc trộn lẫn cách làm của Xcode với cách làm của Expo, và kết quả có thể là lỗi ITMS-90034 khi gửi lên. Với EAS Build, chính công cụ này tạo và lưu các file đó cho bạn, kể cả push key: hãy để nó làm thay vì làm theo một quy trình đoán mò.
Cấu hình App Store Connect
Trang thông tin app, bundle ID, các khai báo quyền riêng tư, câu hỏi về mã hóa, ảnh chụp màn hình, đường dẫn tới điều khoản sử dụng: những thông tin này phải khớp với phiên bản được gửi duyệt. Một số agent có thể thao tác trong trình duyệt đã đăng nhập, như Claude Code với Chrome. Quyền truy cập này phải được cho phép và kết quả phải được kiểm tra lại; một quy trình đọc thuộc lòng mà không nhìn giao diện hiện tại có thể đã lỗi thời.
Gói đăng ký
Đây là chỗ AI làm bạn mất nhiều thời gian nhất. Code một paywall thì dễ. Cái khó là sự khớp nhau giữa ba nơi: các sản phẩm tạo trong App Store Connect, cấu hình của chúng trong RevenueCat, và đoạn code hiển thị chúng. Một mã định danh lệch một ký tự, một sản phẩm chưa được gửi duyệt cùng phiên bản, và paywall của bạn hiện trống trơn trước mặt reviewer. AI có thể đọc các console này nếu bạn cấp quyền phù hợp; không có quyền đó, nó không thể kiểm tra chúng có khớp với code hay không. Toàn bộ công việc này được trình bày chi tiết ở trang gói đăng ký in-app iOS.
Quy trình duyệt của Apple
AI biết những nét chính của App Review Guidelines, nhưng nó không biết nhìn app của bạn bằng con mắt của một reviewer. Nó sẽ không tự nói với bạn rằng một màn hình bắt buộc bị cắt trên iPhone nhỏ, rằng yêu cầu đánh giá xuất hiện quá sớm, rằng thiếu tài khoản demo trong ghi chú cho reviewer, hay rằng app của bạn quá giống một trang web theo guideline 4.2. Hai lỗi đầu là những lần mình thực sự bị từ chối với Solys, kể trong bài vì sao Apple từ chối app.
Crash trên iPhone thật
Simulator và app development bỏ qua rất nhiều thứ. Một chiếc iPhone thật, ở môi trường production, thì không. Một native module bị thiếu trong build, một quyền truy cập không có dòng giải thích, một lần đọc dữ liệu quá sớm lúc khởi động: app mở ra rồi đóng ngay, không có thông báo nào. Một agent có thể chạy test hoặc phân tích ảnh chụp màn hình, nhưng chỉ khi hệ thống kiểm tra cho phép. Kết quả trên simulator tự nó không xác nhận được bản binary cài trên iPhone của bạn. Việc của bạn là cài app lên điện thoại trước mỗi lần gửi, và TestFlight sinh ra để làm việc đó.
AI viết code trông có vẻ đúng. Chỉ có test trên iPhone mới cho bạn biết nó có đúng thật không.
Cách dẫn dắt AI để nó vẫn hữu ích
Vấn đề gần như không bao giờ nằm ở độ thông minh của mô hình. Nó nằm ở những gì bạn đưa cho nó đọc.
Cho nó biết bối cảnh của bạn, một lần là xong
Viết một file ngắn ở thư mục gốc dự án, mô tả stack của bạn (Expo, phiên bản SDK, Supabase, RevenueCat), cấu trúc thư mục và các quy tắc của bạn. Claude Code đọc file CLAUDE.md, Cursor có các file rule riêng. Không có bối cảnh này, AI sẽ đoán, và nó thường đoán ra một stack khác với của bạn. Hướng dẫn tạo ứng dụng bằng Claude Code của mình có một ví dụ đầy đủ về file này.
Chia nhỏ công việc
"Tạo cho mình một app theo dõi thói quen có gói đăng ký" sẽ cho ra một dự án khổng lồ và mong manh. "Tạo màn hình liệt kê các thói quen trong ngày, có trạng thái trống và trạng thái đang tải" cho ra một màn hình bạn có thể đọc lại và test trong năm phút. Một việc, một kết quả kiểm tra được, rồi tới việc tiếp theo.
Yêu cầu kế hoạch trước khi code
Với mọi thứ động tới nhiều file, hãy bắt đầu bằng "đề xuất một kế hoạch, chưa code vội". Bạn đọc lại kế hoạch, sửa chỗ chưa ổn, rồi mới cho chạy. Nhờ vậy bạn tránh được những lần viết lại bất ngờ, khi AI viết lại nửa dự án chỉ để thêm một cái nút.
Cho nó đọc tài liệu mới nhất
Các công cụ thay đổi rất nhanh: Expo, RevenueCat và App Store Connect thay đổi thường xuyên. Khi một câu trả lời có vẻ đáng ngờ, hãy dán trang tài liệu chính thức vào cuộc trò chuyện, hoặc dùng một công cụ đưa tài liệu đó cho nó. Một AI đọc tài liệu của hôm nay sai ít hơn nhiều so với một AI nhớ tài liệu từ hai năm trước.
Giữ quyền quyết định
AI đề xuất, bạn quyết định. Chọn ý tưởng, chọn giá, chọn những gì app sẽ không làm: đó là việc của bạn. Nếu bạn để AI thêm mọi tính năng nó gợi ý, bạn sẽ có một app làm mười thứ ở mức tàm tạm thay vì làm thật tốt một thứ. Để định khung cho phiên bản đầu tiên, hãy đọc trang MVP ứng dụng iOS.
Cách kiểm tra những gì AI tạo ra
Đây là kỹ năng phân biệt người phát hành được app với người tích một đống dự án dở dang.
Đọc lại mọi thay đổi
Bạn không cần hiểu hết từng dòng. Nhưng bạn phải trả lời được ba câu hỏi: những file nào đã thay đổi, vì sao, và có đúng với điều mình yêu cầu không. Nếu AI động vào một file không liên quan tới yêu cầu, hãy hỏi nó vì sao trước khi chấp nhận.
Test trên iPhone, không chỉ trên máy tính
Cài app lên điện thoại của chính bạn càng sớm càng tốt, rồi ở mỗi bước quan trọng. Kiểm tra lần mở đầu tiên sau khi cài, chế độ máy bay, màn hình nhỏ và màn hình lớn, bàn phím mở trên các form. Đây là quy tắc mình áp dụng trước mỗi lần gửi cho Apple, với từng app của mình.
Thêm công cụ nhìn thấy những gì bạn không thấy
Trên các app của mình, Sentry báo crash kèm dòng code gây lỗi, còn PostHog cho thấy người dùng bỏ đi ở đâu. Không có chúng, một bug trên production sẽ vô hình cho tới khi một đánh giá xấu xuất hiện. AI có thể giúp bạn cài chúng; còn bạn thì phải xem chúng nói gì.
Để ý bảo mật dữ liệu
Khi AI tạo bảng trong Supabase, hãy kiểm tra các quy tắc truy cập (các chính sách RLS) đã thực sự bật: mỗi người dùng chỉ được đọc dữ liệu của chính mình. Kiểm tra luôn rằng không có khóa bí mật nào nằm trong code của app, vì code này có thể bị dịch ngược. Đây là hai lỗi AI rất dễ mắc nếu bạn không cấm nó.
Hỏi nó câu hỏi ngược lại
Khi code đã viết xong, hãy hỏi: "chỗ nào ở đây có thể hỏng?" hoặc "đọc lại code này như một reviewer của Apple". Chính mô hình đã viết code thường tìm ra những thiếu sót của nó khi bạn đổi góc đặt câu hỏi. Việc này không thay được test trên iPhone, nhưng giúp giảm số lần qua lại.
Lộ trình thực tế khi bạn mới bắt đầu
- Chọn một ý tưởng thật nhỏ: một tính năng chính, không phải mười.
- Dùng một stack mà AI rành: Expo, React Native, Supabase nếu bạn cần tài khoản người dùng.
- Xây từng màn hình một, mỗi yêu cầu là một việc nhỏ và test ở mỗi bước.
- Test trên iPhone với một development build, rồi với TestFlight.
- Kết nối phần kiếm tiền: sản phẩm trong App Store Connect, RevenueCat, paywall.
- Chuẩn bị hồ sơ App Store: trang thông tin, ảnh chụp màn hình, quyền riêng tư, ghi chú cho reviewer.
- Gửi cho Apple, đọc kỹ phản hồi, sửa đúng những gì được yêu cầu.
Bước nào cũng có cạm bẫy, và AI giúp bạn được khoảng một nửa trong số đó. Để có cái nhìn tổng thể, trang tạo ứng dụng iPhone trình bày chi tiết toàn bộ hành trình. Và nếu bạn tự hỏi có thể đi xa tới đâu mà không tự viết một dòng code nào, hãy đọc tạo ứng dụng không cần code.
Tạo ứng dụng iOS bằng AI, cho tới tận App Store
AI đã thay đổi ai là người có thể tạo app iOS. Nó không thay đổi những gì Apple yêu cầu để phát hành app, cũng như những gì cần có để app thu được những gói đăng ký đầu tiên. Đó chính là phần mình đã đưa vào iOS Kit: code khởi đầu của các app của mình, kể cả gói đăng ký, và các skill Claude Code cho từng bước. Lộ trình được trình bày chi tiết theo công cụ bạn dùng: khóa học Claude Code hoặc khóa học vibe coding. Trang chủ cho thấy cách tạo app di động theo cách này, từng bước một.
Bạn không biết mình đang bị chặn ở đâu, giữa code, AI và Apple? Bài chẩn đoán miễn phí sẽ cho bạn biết và gửi bạn checklist chống bị Apple từ chối của mình.
Mình không hứa với bạn về thu nhập hay việc app được phát hành: Apple quyết định việc duyệt, còn thị trường quyết định phần còn lại. Thứ mình đưa bạn là phương pháp mình tự áp dụng cho các app của mình.
Câu hỏi thường gặp
Người mới bắt đầu có tạo được ứng dụng iOS bằng AI không?
Có. AI viết rất tốt các màn hình, điều hướng, logic đơn giản và các lệnh gọi tới cơ sở dữ liệu. Nó làm kém mọi thứ nằm ngoài code. Đó là việc ký ứng dụng, App Store Connect, gói đăng ký, quy trình duyệt của Apple và những lần crash chỉ thấy được trên iPhone thật.
Nên dùng AI nào để tạo app iOS?
Claude, ChatGPT hay Cursor đều viết rất tốt màn hình, điều hướng và logic đơn giản. Vấn đề gần như không bao giờ nằm ở độ thông minh của mô hình, mà ở những gì bạn đưa cho nó đọc. Hãy cho nó biết stack, quy tắc của bạn và tài liệu mới nhất. Mình có so sánh Claude Code, Cursor và ChatGPT cho app iPhone trong một bài riêng.
ChatGPT có tạo được ứng dụng không?
Có, với phần dễ thấy: ChatGPT, cũng như Claude hay Cursor, viết rất tốt màn hình, điều hướng, logic đơn giản và các lệnh gọi tới cơ sở dữ liệu. Nhưng nó không biết tài khoản Apple của bạn nếu không được cấp quyền truy cập, và nó không nhìn app của bạn bằng con mắt của một reviewer. Chỉ có test trên iPhone mới cho bạn biết code có đúng không.
Làm sao tự tạo app của riêng mình bằng AI, từng bước một?
Chọn một ý tưởng thật nhỏ, chỉ với một tính năng chính. Dùng một stack mà AI rành: Expo, React Native, và Supabase nếu bạn cần tài khoản người dùng. Xây từng màn hình một, mỗi yêu cầu là một việc nhỏ và test ở mỗi bước. Test trên iPhone với một development build rồi TestFlight, trước khi kết nối phần kiếm tiền, chuẩn bị hồ sơ App Store và gửi cho Apple.
Làm sao kiểm soát code do AI viết?
Đọc lại mọi thay đổi: những file nào đã thay đổi, vì sao, và có đúng với yêu cầu của bạn không. Cài app lên iPhone của chính bạn càng sớm càng tốt, rồi ở mỗi bước quan trọng. Kiểm tra các quy tắc truy cập của Supabase, tức các chính sách RLS, đã được bật. Kiểm tra luôn rằng không có khóa bí mật nào nằm trong code của app, vì code này có thể bị dịch ngược.
Vì sao paywall do AI viết lại hiện trống trước mặt reviewer?
Code một paywall thì dễ. Cái khó nhất là sự khớp nhau giữa ba nơi: các sản phẩm trong App Store Connect, cấu hình của chúng trong RevenueCat và đoạn code hiển thị chúng. Một mã định danh lệch một ký tự, hoặc một sản phẩm chưa được gửi duyệt, là đủ làm paywall trống trơn. Không có quyền truy cập phù hợp vào các console này, AI không thể kiểm tra sự khớp nhau đó.