Chuyển tới nội dung
THứ SáU, THáNG 10 30, 2026TIN TỨC CÔNG NGHỆ ĐỘC LẬP, ĐÁNH GIÁ & HƯỚNG DẪN THỰC TẾ
GIỚI THIỆU
MỚI NHẤT /

MacBook Pro OLED đã ra mắt: lưu ảnh, cảm ứng, chiếc Apple Pencil vắng bóng và liệu PROLED XDR có đáng tiền (2026)

ĐỌC HƯỚNG DẪN
Phát triển phần mềm & ứng dụngGM / 803

Cách xây ứng dụng từ đầu với AI năm 2026: Figma, OpenCode v2, MiniMax M3.1 và câu chuyện Stash

How to build an app from scratch with AI: Figma, OpenCode v2, MiniMax M3.1 and the App Store, with two Stash iPhone screens
How to build an app from scratch with AI: a workflow from brief to Figma, Figma's MCP server, OpenCode v2 with MiniMax M3.1, then Git, build, TestFlight and the App Store
Mọi thứ trong bài này diễn ra trong bốn tháng rưỡi, và bảy trong chín mốc thời gian này rơi vào năm tuần cuối

Nhà nào cũng có một ngăn kéo nuốt đồ. Chìa khóa, củ sạc dự phòng, hộ chiếu bạn chỉ cần hai lần mỗi năm. Bạn cất thứ gì đó vào đó “cho an toàn”, rồi ba tháng sau bạn’ đang quỳ xuống đổ cả tủ ra sàn. Đây là hướng dẫn đầy đủ về cách xây dựng một ứng dụng từ đầu với AI trong năm 2026, kể qua ứng dụng tôi làm để sửa cái ngăn kéo đó.

Stash là câu trả lời của tôi cho cái ngăn kéo đó. Đó’ là một ứng dụng iPhone và iPad nhỏ gọn, nhẹ nhàng: bạn chụp ảnh nơi mình cất đồ, đặt tên và chọn phòng, rồi khi cần lại, bạn tìm kiếm. Thế’ là toàn bộ ý tưởng. Ứng dụng lên App Store ngày 23 tháng 9 năm 2026. Nó’ miễn phí và không có quảng cáo.

Tôi không xuất thân từ lập trình. Mọi thứ tôi xây, tôi xây bằng tác nhân AI, và trong một năm qua các công cụ để làm việc đó đã đi từ “demo đẹp” đến “bạn thật sự có thể phát hành được thứ này”. Vì vậy hướng dẫn này thực dụng trước hết: từng bước từ một thư mục trống đến một trang App Store đang hoạt động, với Stash làm ví dụ xuyên suốt.

Bộ công cụ này là thứ tôi’ sẽ đưa cho bất kỳ ai bắt đầu hôm nay. Figma để thiết kế. OpenCode v2 làm tác nhân viết mã. MiniMax M3.1 làm mô hình đảm nhận phần suy nghĩ (chính xác là M3.1-Flash-Preview, ra mắt ngày 27 tháng 9, và tôi’ sẽ giải thích vì sao sự phân biệt đó quan trọng). Rồi đến mọi thứ “linh tinh” không bao giờ xuất hiện trong các video hướng dẫn trên YouTube: phần backend, chính sách quyền riêng tư, App Store Connect, ảnh chụp màn hình, khâu xét duyệt, trang đích, các trang pháp lý, và tất cả những thứ đó tốn bao nhiêu.

Mọi thứ ở đây đã được đối chiếu với tài liệu chính thức, ghi chú phát hành và chính App Store vào ngày 5 tháng 10 năm 2026. Một số sẽ lỗi thời trong vài tuần. Mô hình mới của MiniMax’ còn là bản xem trước, OpenCode phát hành gần như hằng ngày, và Figma vẫn đang quyết định những tác nhân viết mã nào được kết nối với máy chủ MCP của họ. Tôi’ đã đánh dấu những phần dễ thay đổi ngay khi viết.

Tiết lộ: Stash là ứng dụng của tôi, do công ty tôi là Graham Miranda UG phát hành. Nó’ miễn phí, không quảng cáo và không mua trong ứng dụng. Bài viết này không chứa liên kết tiếp thị. MiniMax, nhóm OpenCode tại Anomaly, Figma, Apple, Google và Expo không tài trợ, xem xét hay phê duyệt bài viết.


TL;DR — Bản tóm tắt 60 giây

  • Bạn có thể xây một ứng dụng thật từ đầu với AI trong năm 2026, nhưng “từ đầu” giờ nghĩa là các quyết định, không phải gõ phím. Tác nhân viết mã. Bạn lo phần đề bài, thiết kế, mô hình dữ liệu, câu chuyện quyền riêng tư, kiểm thử và giấy tờ App Store.
  • Bộ công cụ: Figma (màn hình và biến thiết kế) → OpenCode v2 (tác nhân mã nguồn mở, giấy phép MIT) → MiniMax M3.1-Flash-Preview (ngữ cảnh 1M token, đọc được văn bản, hình ảnh và video, năm mức effort) → bản build Expo hoặc Xcode → TestFlight → App Store. Firebase nếu bạn cần tài khoản và đồng bộ.
  • “MiniMax M3.1” hôm nay có nghĩa là M3.1-Flash-Preview. Nó ra mắt ngày 27 tháng 9 năm 2026 và chỉ có qua gói đăng ký M Plan của MiniMax ($22, $55 hoặc $132 một tháng, giảm 50% cho tháng đầu khi thanh toán theo tháng đến 14 tháng 10) và ứng dụng MiniMax Code. Không’ có giá theo token, không có trọng số mở và chưa có benchmark nào được công bố. Không thể tắt chế độ suy nghĩ, và effort mặc định là tối đa.
  • Nó chạy trong OpenCode v2 mà không cần tệp cấu hình: /connect → “MiniMax Token Plan (minimax.io)” → dán khóa đăng ký của bạn → /models → MiniMax-M3.1-Flash-Preview.
  • Cái bẫy Figma mà không ai nhắc: Máy chủ MCP từ xa của Figma’ chưa chấp nhận OpenCode. Trong giai đoạn beta, nó chỉ dùng danh sách cho phép. Hãy dùng máy chủ MCP desktop của Figma tại 127.0.0.1:3845 thay vào đó (nó cần ứng dụng Figma trên máy tính và gói Dev hoặc Full trả phí, từ $12 một tháng), hoặc đưa cho tác nhân các frame đã xuất, mà M3.1 đọc được.
  • Đưa ứng dụng ra thị trường là một dự án riêng: $99 một năm cho Apple Developer Program (€99 ở Đức), bản build làm bằng Xcode 26 trở lên, chính sách quyền riêng tư, nhãn quyền riêng tư khớp với thực tế, xóa tài khoản ngay trong ứng dụng nếu bạn có tài khoản, và thông tin thương nhân EU. Apple nói 90% hồ sơ được xét duyệt trong vòng 24 giờ.
  • Stash qua các con số: hoạt động từ 23 tháng 9 năm 2026, phiên bản 1.0.1 với thiết kế mới vào 2 tháng 10, miễn phí, iOS và iPadOS 16.4 trở lên, khoảng 64 MB, không theo dõi, và chế độ khách giữ mọi thứ trên thiết bị.
  • Chi phí: về $363 cho năm đầu tiên với cấu hình tối giản (tư cách thành viên Apple cộng M Plan Go), khoảng $500 nếu có gói Figma Dev. Chi phí backend bắt đầu từ 0 với hạn mức miễn phí của Firebase’.
  • Quy tắc quan trọng nhất: “xong” là một lời tuyên bố, không phải sự thật. Hãy chạy ứng dụng trên điện thoại thật, ở chế độ máy bay, ở chế độ tối, bật VoiceOver. Rồi hãy tin.

Bộ công cụ trong một cái nhìn

LớpCông cụVai trò của nó trong quy trình làm việc nàyChi phí (tháng 10 năm 2026)
Thiết kếFigmaMàn hình, component, biến màu và biến kiểu chữ, prototype bấm đượcGói Starter miễn phí; gói Dev từ $12/tháng mở khóa máy chủ MCP desktop
Cầu nối từ thiết kế sang mãMáy chủ MCP Figma (desktop)Đưa frame, biến và ảnh chụp màn hình cho tác nhânĐã gồm trong gói
Tác nhân viết mãOpenCode v2Lập kế hoạch, sửa tệp, chạy lệnh và kiểm thử; terminal, ứng dụng desktop, hoặc trong Xcode 27Miễn phí, giấy phép MIT
Mô hìnhMiniMax M3.1-Flash-PreviewBộ não lập kế hoạch và viết mã; đọc ảnh chụp màn hình và bản ghi màn hìnhM Plan từ $22/tháng
Khung ứng dụngExpo SDK 56 (iPhone + Android) hoặc SwiftUI với Xcode 27 (chỉ Apple)Bản thân ứng dụngMiễn phí; gói miễn phí của Expo’ gồm 15 bản build đám mây iOS và 15 Android mỗi tháng
BackendFirebase (Auth, Firestore, Storage, Functions, Messaging)Tài khoản, đồng bộ, lưu trữ ảnh, thông báoHạn mức miễn phí; Storage và Functions cần gói Blaze trả theo mức dùng
Bản phân phốiApp Store Connect + TestFlightKiểm thử beta, xét duyệt, phát hành$99/năm Apple Developer Program
Ra mắtTrang đích tĩnh và các trang pháp lýGiải thích, giới thiệu, tuân thủTùy chi phí lưu trữ của bạn

Giá là giá niêm yết vào ngày 5 tháng 10 năm 2026, chưa gồm VAT. Điều khoản đăng ký thay đổi thường xuyên, nên hãy kiểm tra trước khi mua.


Mục lục


Phần 1 — Gặp Stash: ứng dụng mà hướng dẫn này xoay quanh

Trước công cụ, là ví dụ. Một hướng dẫn xây ứng dụng chỉ tốt bằng chính ứng dụng mà nó tạo ra, nên đây là chính xác Stash là gì, dựa trên trang App Store và chính sách quyền riêng tư của nó thay vì sự hào hứng của tôi.

Trang niêm yết mở đầu bằng một câu tóm gọn công việc: “Đừng bao giờ lục tung nhà để tìm đồ nữa.” Rồi nó giải thích toàn bộ sản phẩm trong ba câu: “Stash là cách nhanh nhất để nhớ bạn đã để đồ ở đâu. Chụp một bức ảnh, chọn phòng, lưu. Thế’ là toàn bộ ứng dụng.”

Câu cuối đó chính là bản đề bài thiết kế. Mọi thứ trong ứng dụng hoặc giúp lưu nhanh hơn, hoặc giúp tìm nhanh hơn. Thứ gì không’ làm được cả hai thì không thuộc về đây.

Stash làm được gì

Tính năngNó làm gìVì sao điều này quan trọng
Ảnh chụp vị tríBạn chụp ngăn kéo, kệ hoặc hộp, không phải món đồBạn nhớ địa điểm bằng hình ảnh; ảnh chụp nơi đó chính là ký ức
Tên, phòng, vị trí chính xác, ghi chú“Chìa khóa nhà · Hành lang · ngăn kéo trên · trong đĩa gốm bên trái”Bốn trường ngắn tốt hơn một bài văn tự do mà bạn’ sẽ chẳng bao giờ tìm tốt
Ghi chú thoại, được chuyển thành văn bảnGhi nhanh một đoạn; Stash biến nó thành văn bản tìm kiếm đượcNhanh hơn gõ khi tay bạn đang bận
Tìm kiếmTheo tên món đồ, phòng, ghi chú hoặc những từ bạn đã ghi âm, có bộ lọc cho món đồ có ảnhToàn bộ ý nghĩa của ứng dụng nằm ở khoảnh khắc bạn cần một thứ gì đó
PhòngDuyệt ngôi nhà của bạn từng phòng mộtDành cho khi bạn’ không nhớ tên, chỉ nhớ đại khái ở đâu
“Tìm thấy rồi”Một lần chạm khi bạn’ đã lấy lại đượcKhép vòng lặp
Nhắc nhởĐồ theo mùa hiện lại đúng lúc bạn cầnLốp mùa đông, đèn Giáng sinh, đồ cắm trại
WidgetWidget Màn hình chính và Màn hình khóaHai lần chạm từ “mình phải nhớ cái này” đến khi đã lưu
Ngoại tuyến, rồi đồng bộHoạt động khi không có sóng; đồng bộ giữa iPhone và iPad khi bạn có tài khoảnTầng hầm và ga-ra thường mất sóng
Giao diệnSáng, tối hoặc theo hệ thốngTrông vẫn dịu mắt lúc 11 giờ đêm
Xuất và xóaXuất các mục đã lưu; xóa tài khoản trong Cài đặtDữ liệu vẫn thuộc về bạn, và Apple bắt buộc điều thứ hai

Diện mạo

Hướng thị giác cố ý giữ sự tĩnh lặng: nền trắng ngà ấm, xanh rừng đậm, một điểm nhấn san hô, tiêu đề serif và sans-serif giản dị cho mọi thứ còn lại. Ảnh chụp màn hình trên App Store kể câu chuyện bằng sáu dòng tiêu đề: Mọi thứ đều có chỗ. Tìm thấy. Trong vài giây. Lưu vị trí. Ngôi nhà của bạn. Từng phòng một. Nhớ những chi tiết nhỏ. Rõ ràng. Trong mọi ánh sáng.

Hiện ảnh Stash trên iPhone: lưu vị trí, tìm trong vài giây, duyệt từng phòng. Sáng và tối, cùng một sự tĩnh lặng.

Four Stash iPhone screenshots: Home with recently saved house keys, search results for keys, the Add screen, and the rooms grid in dark mode
Stash trên iPhone: lưu vị trí, tìm trong vài giây, duyệt từng phòng. Sáng và tối, cùng một sự tĩnh lặng.

Cách ứng dụng xử lý dữ liệu của bạn

Điều này quan trọng hơn mọi tính năng, nên tôi sẽ trích chính sách quyền riêng tư thay vì diễn giải lại:

  • Chế độ khách: “Nếu bạn không tạo tài khoản, các phòng, món đồ, ảnh và ghi chú thoại của bạn ở lại trên thiết bị và không được tải lên.”
  • Khi có tài khoản: đồng bộ và sao lưu chạy trên Google Firebase (Authentication, Cloud Firestore, Cloud Storage, Cloud Functions và Cloud Messaging), với các quy tắc bảo mật giữ dữ liệu của mỗi người dùng’ tách biệt.
  • Không có mô hình kinh doanh dựa trên bạn: “Chúng tôi không hiển thị quảng cáo, không chạy quảng cáo hay theo dõi phân tích, không xây dựng hồ sơ người dùng và không bán dữ liệu của bạn.”
  • Ghi chú thoại: việc chuyển một bản ghi âm thành văn bản tìm kiếm được có thể dùng dịch vụ giọng nói tích hợp trong điện thoại (của Apple’, trên iOS).
  • Xóa dữ liệu: xóa tài khoản trong Cài đặt, hoặc qua biểu mẫu web; các bản sao được xóa khỏi bản sao lưu trong vòng 30 ngày.

Nếu bạn đã đọc bài viết của tôi về vì sao phần mềm local-first đang trở lại, bạn sẽ nhận ra triết lý đó. Ứng dụng phải hoạt động hoàn hảo mà không cần đám mây. Đám mây chỉ là tiện ích bạn chọn dùng.

Khung thông tin

Tên trên App StoreStash — Find It Fast
Phụ đềTìm mọi thứ bạn đã cất đi
Phát hành đầu tiên23 tháng 9 năm 2026 (phiên bản 1.0)
Phiên bản hiện tại1.0.1, phát hành ngày 2 tháng 10 năm 2026: “Thiết kế mới và sửa lỗi.”
GiáMiễn phí, không mua trong ứng dụng
Yêu cầuiOS hoặc iPadOS 16.4 trở lên; cũng chạy trên máy Mac Apple silicon và Apple Vision Pro dưới dạng ứng dụng iPad
Kích thướcKhoảng 64 MB
Danh mụcNăng suất (cũng có trong Tiện ích)
Xếp hạng độ tuổi4+
Nhà phát triểnGraham Miranda UG (haftungsbeschränkt), Blankenburg (Harz), Đức
Trang webstash.grahammiranda.network, bằng mười ngôn ngữ, kèm một bản demo trên trình duyệt
Tải xuốngStash trên App Store

Những gì ứng dụng chưa có (hiện tại)

Trang web có một mục tên là Khám phá thiết kế với ba ý tưởng: ghim đúng vị trí trên ảnh, Di chuyển nhanh cho khi chỗ cất đồ của một món đồ thay đổi, và hộp và nhãn để bạn thấy bên trong hộp có gì mà không cần mở. Trang web nói rõ rằng “những ý tưởng này nằm trong bản ý tưởng tương tác, không phải tính năng của bản phát hành trên App Store.”

Tôi thích cách tách bạch đó và sẽ khuyên bất kỳ ai làm ứng dụng đầu tiên áp dụng nó. Cứ thoải mái khám phá trong bản mẫu. Chỉ phát hành những gì hoạt động được. Trang App Store của bạn không bao giờ nên hứa những gì bản build không làm được. Người duyệt của Apple kiểm tra, và những người đánh giá một sao cũng vậy.

Vì sao đây là cấu trúc tốt cho ứng dụng đầu tiên

Nếu bạn đọc bài này vì muốn tự làm ứng dụng của mình, hãy học theo cấu trúc của Stash dù bạn không quan tâm đến chuyện mất chìa khóa:

  • Một vòng lặp cốt lõi. Lưu, rồi tìm. Mọi thứ khác đều phục vụ vòng lặp đó.
  • Dữ liệu bắt đầu trên thiết bị. Không cần máy chủ ngay từ đầu, nên bạn có thể phát hành trước khi xây backend.
  • Một vài tính năng nền tảng thực sự. Camera, micrô, thông báo và widget là lượng “native” vừa đủ để học mà không bị ngợp.
  • Đám mây tùy chọn. Tài khoản và đồng bộ có thể đến ở phiên bản hai mà không phải viết lại phiên bản một.
  • Không bảng tin, không chat, không thanh toán. Mỗi thứ đó là một dự án riêng với những kiểu lỗi riêng.

Một tác nhân AI có thể xây gần như mọi thứ bạn mô tả được. Phần khó là mô tả thứ đủ nhỏ để làm xong.


Phần 2 — Bộ công cụ 2026 để xây ứng dụng từ đầu với AI

Ba công cụ, ba việc riêng:

  1. Figma quyết định ứng dụng trông thế nào.
  2. OpenCode quyết định cách làm việc: đọc tệp nào, chạy lệnh nào, hỏi bạn điều gì trước khi làm việc gì rủi ro.
  3. MiniMax M3.1 đảm nhận phần suy nghĩ bên trong OpenCode: lập kế hoạch, viết code, đọc ảnh chụp màn hình, sửa những gì hỏng.

Tách riêng các công việc đó là quyết định kiến trúc quan trọng nhất trong toàn bộ hướng dẫn này, và nó không liên quan gì đến code. Khi tháng sau có model tốt hơn (chắc chắn sẽ có), bạn chỉ đổi một dòng trong tệp cấu hình. Khi có công cụ thiết kế tốt hơn, tác nhân của bạn không quan tâm. Không có gì bị hàn cứng vào nhau.

Vì sao OpenCode v2 là tác nhân

OpenCode là tác nhân coding AI mã nguồn mở theo giấy phép MIT. Bạn trỏ nó vào thư mục dự án, mô tả điều bạn muốn, và nó làm việc như một lập trình viên: đọc code, lập kế hoạch, sửa tệp, chạy lệnh, đọc lỗi, sửa lỗi rồi tiếp tục.

Phiên bản 2.0.0, một lần xây lại từ đầu, được gắn thẻ ngày 11 tháng 9 năm 2026, và đến 2 tháng 10 nhóm đã phát hành 2.0.22. Tôi đã viết kỹ về lần xây lại đó trong bài phân tích sâu về OpenCode v2, nên ở đây chỉ nói những gì cần cho việc xây ứng dụng:

  • Nó không phụ thuộc vào một model. Hơn 75 nhà cung cấp qua Models.dev, cộng thêm model chạy cục bộ. MiniMax được tích hợp sẵn.
  • Một máy chủ nền dùng chung. Giao diện terminal, ứng dụng desktop, giao diện trình duyệt và các tiện ích IDE đều thấy cùng các phiên.
  • Quyền hoạt động như một tường lửa. Một danh sách có thứ tự các quy tắc cho phép, hỏi và từ chối, quy tắc khớp cuối cùng thắng, nên “không bao giờ chạy git push” và “không bao giờ gửi lên App Store” mỗi cái chỉ một dòng.
  • Hoàn tác cho từng bước. Ảnh chụp trạng thái trước và sau mỗi bước của model, với /undo và /redo.
  • Tác nhân con có thể xem và dừng, và các skill tải từ .opencode, .claude và .agents thư mục.
  • Nó chạy bên trong Xcode 27. Xcode mới của Apple chấp nhận mọi tác nhân nói được Agent Client Protocol, và opencode acp làm đúng việc đó (cách thiết lập ở Phần 4).

Trang chủ hiện ghi 208.000 sao GitHub, 950 người đóng góp và 16 triệu lập trình viên mỗi tháng. Hai lưu ý thật thà từ tài liệu v2: chia sẻ phiên chưa trở lại trong v2, và plugin v1 không tải được.

Vì sao MiniMax M3.1 là model được chọn

Phần 3 đi sâu, nhưng bản ngắn gọn là ba đặc điểm tình cờ hợp với việc xây ứng dụng một cách lạ thường:

  • Cửa sổ ngữ cảnh 1.000.000 token. Một ứng dụng nhỏ, ghi chú thiết kế, tệp AGENTS.md và tài liệu liên quan vừa gọn trong một phiên làm việc, vẫn còn dư chỗ.
  • Nó đọc được ảnh và video, không chỉ văn bản. Bạn có thể đưa cho nó một frame Figma, ảnh chụp màn hình giả lập hoặc bản ghi màn hình một lỗi.
  • Năm mức nỗ lực, từ thấp để tối đa, để việc lập kế hoạch được suy nghĩ sâu còn việc máy móc thì nhanh.

Đánh đổi là nó là bản xem trước, chưa có benchmark công bố hay giá theo token, chỉ dùng được qua gói đăng ký của chính MiniMax. Tôi sẽ quay lại chuyện này, vì đây không phải lưu ý nhỏ.

Vì sao Figma là công cụ thiết kế

Figma vẫn là nơi diễn ra việc thiết kế ứng dụng. Gói Starter miễn phí đủ để thiết kế ứng dụng đầu tiên. Các biến trở thành design token của bạn: màu sắc, khoảng cách và cỡ chữ giữ mọi màn hình nhất quán. Và máy chủ MCP cho phép tác nhân coding đọc trực tiếp một frame được chọn, đây là thứ gần nhất với việc “làm cho nó trông như thế này” thực sự hoạt động.

Tại Config 2026 (23 đến 25 tháng 6 ở San Francisco), Figma cũng mở Figma Agent cho mọi gói trả phí dưới dạng beta công khai, thêm timeline chuyển động và giới thiệu “code layer” coi code là đối tượng hạng nhất trên canvas. Bạn không cần những thứ đó để làm ứng dụng đầu tiên. Biết hướng đi sắp tới thì vẫn hữu ích.

Và phần “linh tinh”

Những phần không ai đưa vào ảnh thu nhỏ:

Nội dungLựa chọnĐề cập ở
Khung ứng dụngExpo (React Native) cho iPhone và Android; SwiftUI với Xcode 27 chỉ cho Apple; FlutterPhần 7
BackendFirebase là lựa chọn mặc định dễ dàng cho tài khoản, đồng bộ và lưu trữ tệpPhần 7
Quản lý phiên bảnLuôn dùng Git. GitHub hoặc tương tự để sao lưuPhần 4 và 7
Build và kýXcode trên máy Mac, hoặc build đám mây bằng EAS của Expo mà không cần MacPhần 7 và 8
Kiểm thử và phát hànhTestFlight và App Store ConnectPhần 8
Ra mắtTrang đích, bản demo, trang pháp lý, tối ưu App StorePhần 9

Hiện ảnh Toàn bộ quy trình trên một trang. Bạn đứng bên trái (bản yêu cầu), ở giữa (xem từng diff) và bên phải (bấm “Submit for Review”).

“Từ đầu” giờ nghĩa là gì

Đây là sự thật khó chịu về việc xây ứng dụng bằng AI năm 2026: tác nhân làm phần từng khó, và để lại cho bạn phần vốn luôn khó.

Bạn sở hữuTác nhân sở hữu
Ứng dụng để làm gì và nó từ chối làm gìBiến điều đó thành tệp, component và hàm
Các màn hình và hệ thống thiết kếTriển khai chúng, từng màn hình một
Mô hình dữ liệu: lưu gì, ở đâu, trong bao lâuViết code lưu trữ, đồng bộ và migration
Câu chuyện quyền riêng tư, các trang pháp lý và câu trả lời cho App StoreKiểm tra code để câu trả lời của bạn chính xác
Kiểm thử trên thiết bị thật, với người thậtViết và chạy kiểm thử tự động
Bấm “Submit”Không bao giờ bấm “Submit”

Nếu bảng đó khiến bạn hơi lo, tốt. Chính nỗi lo đó phân biệt một ứng dụng được phát hành với một thư mục đầy code chạy nửa vời.


Phần 3 — MiniMax M3.1, giải thích thẳng thắn

Nếu bây giờ bạn tìm “MiniMax M3.1”, bạn sẽ thấy những bài viết đầy tự tin về một model mà nói chặt ra thì chưa được phát hành. Đây là những gì thực sự tồn tại, những gì bạn dùng được hôm nay và những gì chưa ai biết.

Những gì đã có, theo thứ tự

  • 1 tháng 6 năm 2026: MiniMax M3. Một model trọng số mở, đa phương thức từ gốc với cửa sổ ngữ cảnh 1M token, thiết kế mixture-of-experts khoảng 428 tỷ tham số tổng và khoảng 23 tỷ tham số hoạt động mỗi token, cùng cơ chế sparse attention của chính MiniMax. Tôi đã so sánh nó với GLM-5.3-Flash cho OpenCode vào tháng 8, trong GLM-5.3-Flash vs MiniMax M3.
  • Tháng 7: “M3.1” trở thành một cái tên. Các báo cáo từ Hội nghị Trí tuệ nhân tạo Thế giới ở Thượng Hải mô tả một M3.1 với ngữ cảnh một triệu token và khả năng đa phương thức mạnh hơn. Không có model, model ID hay giá nào theo sau.
  • 23 tháng 9: một model bí ẩn. Một model ẩn danh tên “Space Bunny Alpha” xuất hiện trên OpenRouter và trong OpenCode dưới dạng bản xem trước miễn phí, với ngữ cảnh 1M và khả năng suy luận điều chỉnh được. Việc nhận dạng tokenizer độc lập cho thấy dấu vết của MiniMax. MiniMax chưa xác nhận gì, và khớp tokenizer là bằng chứng về một họ model chứ không phải bằng chứng chắc chắn.
  • 27 tháng 9: MiniMax M3.1-Flash-Preview. Model mang thương hiệu M3.1 đầu tiên mà ai cũng dùng được, ra mắt trong ứng dụng coding của chính MiniMax là MiniMax Code và qua gói đăng ký coding của hãng. MiniMax mô tả nó là model cho “phát triển hằng ngày, nhanh, đáng tin cậy và sẵn sàng cho công việc thật, từ sửa lỗi nhanh đến tính năng đầy đủ.”
  • 30 tháng 9: gói M Plan. MiniMax Code 3.1.0 ra mắt cùng gói đăng ký mới tên M Plan, thay thế Token Plan cho khách hàng mới với giá tương đương.

Bản M3.1 đầy đủ của mùa hè vẫn chưa ra. Khi người ta nói “M3.1” vào tháng 10 năm 2026, họ muốn nói M3.1-Flash-Preview, và tôi cũng vậy trong phần còn lại của bài.

Hiện ảnh Toàn bộ bài viết này diễn ra trong bốn tháng rưỡi, và bảy trong chín mốc thời gian này rơi vào năm tuần gần nhất.

MiniMax M3 vs M3.1-Flash-Preview

MiniMax M3MiniMax M3.1-Flash-Preview
Phát hành1 tháng 6 năm 202627 tháng 9 năm 2026
Trạng tháiCó sẵn rộng rãiXem trước
ID modelMiniMax-M3MiniMax-M3.1-Flash-Preview
Cửa sổ ngữ cảnh1M token1.000.000 token
Đầu vàoVăn bản, hình ảnh, videoVăn bản, hình ảnh, video
Suy nghĩCó thể bật hoặc tắtLuôn bật. Năm mức nỗ lực: thấp, medium, cao, xhigh, tối đa (mặc định tối đa)
Trọng số mởCó, theo MiniMax Community LicenseKhông có trọng số, không có model card
Giá trả theo mức dùng$0.30 mỗi triệu token đầu vào, $1.20 đầu ra, $0.06 token đã cache; gấp đôi khi đầu vào trên 512KKhông công bố. Chỉ theo gói đăng ký
Nơi có thể dùngMiniMax API, OpenRouter, OpenCode Go, Ollama Cloud và nhiều dịch vụ khácChỉ gói M Plan và MiniMax Code
Benchmark công bốCó, từ MiniMax và các bảng độc lậpKhông có
Kiến trúc~428B tổng, ~23B hoạt động, MoE thưaKhông tiết lộ
Trong OpenCode v2Tích hợp sẵn, qua nhiều nhà cung cấpTích hợp sẵn, qua “MiniMax Token Plan (minimax.io)”

Ảnh chụp từ tài liệu của MiniMax và Models.dev ngày 5 tháng 10 năm 2026. Bản xem trước thay đổi không báo trước; hãy kiểm tra trước khi dựa vào bất kỳ dòng nào.

Một điểm đáng làm rõ: tài liệu nói không thể tắt suy nghĩ. Gửi thinking.type: "disabled" hoặc mức nỗ lực none, và API trả về lỗi 400 nói đại ý rằng model “cần suy nghĩ thích ứng.” Điều bạn kiểm soát được là nó suy nghĩ kỹ đến đâu.

Cách dùng: gói M Plan

Tài liệu của MiniMax nói thẳng về quyền truy cập: “MiniMax-M3.1-Flash-Preview hiện chỉ có qua M Plan và MiniMax Code.”

Gói M PlanGiáBao gồm
Go$22/thángM3.1-Flash-Preview, cùng các model hình ảnh và âm thanh của MiniMax
Explore$55/thángMọi thứ trong Go, cộng model video H3
Build$132/thángMọi thứ trong Explore, với hạn mức sử dụng lớn nhất

Vài chi tiết quan trọng hơn giá ghi trên tiêu đề:

  • Ưu đãi ra mắt: Giảm 50% tháng đầu khi thanh toán theo tháng, đến 14 tháng 10 năm 2026. Không áp dụng thanh toán theo năm. Sau tháng đầu, gói gia hạn theo giá đầy đủ trừ khi bạn tắt tự động gia hạn.
  • Tuần miễn phí: mọi người đăng ký đều được dùng M3.1-Flash-Preview không giới hạn từ 1 đến 7 tháng 10 (giờ Trung Quốc). Nếu bạn đọc bài này sau ngày 7, ưu đãi đó đã hết.
  • Đó là khóa đăng ký, không phải khóa API. Tài liệu MiniMax nói rõ khóa đăng ký và khóa API trả theo mức dùng không thay thế được cho nhau. Bạn sẽ dán khóa đăng ký vào OpenCode.
  • Hạn mức, không phải tính theo mức dùng. Mức sử dụng bị giới hạn theo cửa sổ trượt năm giờ và theo tuần, hạn mức chưa dùng không được cộng dồn. Với các gói Token Plan tương đương, hướng dẫn của chính MiniMax là khoảng ba đến bốn, bốn đến năm và sáu đến bảy tác nhân chạy cùng lúc.
  • Người đăng ký Token Plan hiện tại giữ gói của mình. Khách hàng mới mua gói M Plan.
  • Các công cụ được hỗ trợ trên trang M Plan của MiniMax gồm Claude Code, Codex, Cursor, OpenCode, Hermes Agent và OpenClaw.

MiniMax Code bản thân nó là một agent desktop cho macOS và Windows, có chế độ lập trình và chế độ “work” cho nghiên cứu và tài liệu, cùng một phiên bản dòng lệnh. Đây là cách hoàn toàn ổn để thử mô hình. Tôi dùng OpenCode vì nó không trói tôi vào bất kỳ nhà sản xuất mô hình nào, và đó chính là điểm mấu chốt của Phần 2.

Vì sao nó phù hợp để xây dựng ứng dụng

  • Cửa sổ ngữ cảnh thay đổi cách bạn làm việc. Một ứng dụng di động nhỏ chỉ vài nghìn dòng mã, có thể vài chục nghìn. Với một triệu token, agent có thể giữ toàn bộ cơ sở mã, tệp AGENTS.md của bạn, mô hình dữ liệu và một phần tài liệu nền tảng cùng lúc. Ít đi những khoảnh khắc “tôi quên mất chúng ta đã quyết định gì”. (Hướng dẫn OpenCode của chính MiniMax giới hạn cửa sổ ở 512K trong cấu hình mẫu của họ, tôi sẽ làm theo. Ngữ cảnh ngắn hơn nghĩa là trả lời nhanh hơn.)
  • Cho xem, đừng mô tả. Vì nó nhận được hình ảnh và video, bạn có thể thả vào một khung Figma đã xuất, ảnh chụp màn hình từ iOS Simulator, hoặc bản ghi màn hình lỗi mà bàn phím che mất nút Lưu. Chỉ riêng điều cuối cùng đó đã tiết kiệm được một lượng gõ chữ khổng lồ.
  • Mức nỗ lực là một núm vặn, không phải công tắc. tối đa để lập kế hoạch cho một tính năng hoặc gỡ rối một lỗi đồng bộ. thấp hoặc medium để đổi tên mọi thứ, viết kiểm thử và dịch chuỗi. Phần 4 chỉ cách đặt mức đó cho từng agent.
  • Chi phí cố định. Với một người xây dựng độc lập, hóa đơn hàng tháng dự đoán được tốt hơn việc nhìn đồng hồ tính token trong một buổi gỡ lỗi dài.

Một thử nghiệm độc lập ban đầu đo được khoảng 90 đến 110 token mỗi giây trong ngày đầu tiên. Đó chỉ là một phép đo, không phải benchmark, nhưng nó khớp với cái tên “Flash”.

Điều chưa ai biết

Đây là phần mà hầu hết bài viết về M3.1 bỏ qua:

  • Không có benchmark nào. Không từ MiniMax, không từ các bảng xếp hạng độc lập, vì một mô hình chỉ tiếp cận được qua gói đăng ký của một công ty thì khó kiểm thử độc lập. Bạn chính là benchmark. Giao cho nó một tác vụ thật từ dự án của bạn, giao tác vụ đó cho một mô hình bạn đã tin dùng, rồi so sánh các diff.
  • Không có giá theo từng token. Điều đó ổn trong một gói đăng ký. Đó là vấn đề nếu bạn muốn chạy mô hình trong CI hoặc trong một sản phẩm, nơi bạn cần biết một triệu token tốn bao nhiêu.
  • Đây là bản xem trước. Nó có thể thay đổi hành vi, bị đổi tên hoặc bị thay bằng M3.1 đầy đủ mà không báo trước. Hãy giữ ID mô hình trong một tệp cấu hình để việc hoán đổi chỉ là sửa một dòng.
  • Chế độ suy nghĩ luôn bật. Ngay cả những yêu cầu tầm thường cũng mang theo một ít chi phí suy luận. Hạ mức nỗ lực cho các việc nhỏ.
  • Chỉ có thể dùng qua MiniMax. Nó không có trên OpenRouter, Ollama Cloud hay OpenCode Go vào thời điểm viết bài. Prompt và mã của bạn đi tới máy chủ của MiniMax, nên với công việc khách hàng dưới các quy định dữ liệu nghiêm ngặt, hãy đọc điều khoản của MiniMax trước hoặc giữ dự án đó trên các mô hình cục bộ.

Đừng tải “MiniMax M3.1”

Trong vòng một ngày sau khi ra mắt, các kho GitHub không liên quan gì đến MiniMax xuất hiện, hứa hẹn một bản “tải miễn phí chính thức” M3.1-Flash dưới dạng tệp zip Windows để “giải nén và chạy”. Không có trọng số M3.1 nào để tải, và MiniMax Code đến từ trang web của chính MiniMax. Hãy coi mọi “bản tải M3.1” là malware cho đến khi chứng minh được điều ngược lại.

Khi nào nên dùng MiniMax M3 thay thế

Dùng M3 nếu bạn cần bất kỳ thứ gì bản xem trước không có: giá trả theo mức dùng, trọng số mở để bạn tự lưu trữ, hoặc truy cập qua OpenCode Go, Ollama Cloud hay OpenRouter. Đây cũng là lựa chọn an toàn hơn cho mọi thứ tự động, vì giá và hành vi của nó được ghi rõ. Nếu bạn muốn cái nhìn rộng hơn về các lựa chọn thay thế, bài MiniMax M3 vs Kimi K2.7 Code vs Nemotron 3 Ultra bài so sánh bao quát toàn bộ lĩnh vực này.


Phần 4 — Thiết lập OpenCode v2 với MiniMax M3.1, từng bước

Đây là cách thiết lập tôi sẽ đưa cho một người bạn. Mất khoảng mười lăm phút, phần lớn là chờ tải xuống.

Bước 0 — Những gì bạn cần trước tiên

  • Một chiếc Mac dùng chip Apple silicon, nếu bạn muốn build và chạy ứng dụng iPhone ngay trên máy. Xcode 27 (phát hành ngày 14 tháng 9 năm 2026) không còn hỗ trợ máy Mac Intel và cần macOS Tahoe 26.4 trở lên. Nếu bạn đi theo hướng Expo ở Phần 7, bạn có thể build ứng dụng iOS trên đám mây từ Windows hoặc Linux, nhưng vẫn nên có một chiếc iPhone thật để kiểm thử.
  • Git. Ảnh chụp trạng thái, nhánh và sự tỉnh táo của chính bạn đều phụ thuộc vào nó.
  • Node.js (LTS) nếu bạn sẽ dùng Expo.
  • Một gói đăng ký MiniMax M Plan (Phần 3).
  • Một terminal hiện đại. Terminal của macOS là đủ; Ghostty, WezTerm và Kitty thì đẹp hơn.

Bước 1 — Cài OpenCode v2

bash

curl -fsSL https://opencode.ai/v2/install | bash

opencode --version          # should print 2.0.x
opencode service status     # the shared background server should be running

Muốn cả ứng dụng desktop? Tải tại opencode.ai/download, hoặc trên Mac chạy brew install --cask opencode-desktop. Terminal và ứng dụng desktop dùng chung một máy chủ, nên phiên bạn bắt đầu ở một nơi sẽ hiện ra ở nơi kia.

Một điều cần lưu ý: hướng dẫn OpenCode của chính MiniMax vẫn hiển thị URL trình cài đặt v1 (opencode.ai/install). Hãy dùng /v2/install cái ở trên.

Bước 2 — Lấy khóa đăng ký M Plan

Đăng ký trên nền tảng của MiniMax và tạo một khóa đăng ký trong console. Không phải API key trả theo mức dùng: chúng là những sản phẩm khác nhau, và chỉ khóa đăng ký mới cho bạn M3.1-Flash-Preview.

Hãy đối xử với khóa như mật khẩu. Đừng bao giờ dán nó vào chat, ảnh chụp màn hình hay kho Git.

Bước 3 — Kết nối MiniMax trong OpenCode

bash

cd ~/code/my-app
opencode

Sau đó, trong OpenCode:

  1. Loại /connect và tìm MiniMax Token Plan (minimax.io). Nhà cung cấp vẫn giữ tên cũ; nó nhận khóa M Plan.
  2. Dán khóa đăng ký của bạn.
  3. Loại /models và chọn MiniMax-M3.1-Flash-Preview.

Vậy là xong. Danh mục mô hình của OpenCode (Models.dev) đã liệt kê mô hình với cửa sổ ngữ cảnh 1.000.000 token, đầu vào hình ảnh và video, cùng năm mức nỗ lực, nên bạn không cần tệp cấu hình để bắt đầu. Nếu nó không hiện trong /models, hãy cập nhật OpenCode trước; cấu hình ở Bước 4 cũng thêm nó bằng tay.

Hai lựa chọn khác: opencode auth login làm điều tương tự từ terminal, và trình hướng dẫn cài đặt của MiniMax (npx -y mmx-cli@latest agent setup) cài và cấu hình OpenCode cho bạn, với M3 làm mặc định. Sau đó chuyển sang M3.1 bằng /models. Tài khoản trên nền tảng Trung Quốc của MiniMax dùng phiên bản “(minimax.cn)” của nhà cung cấp.

Bước 4 — Thêm cấu hình dự án

Các mặc định vẫn chạy được, nhưng một dự án ứng dụng xứng đáng có tệp cấu hình làm ba việc: định tuyến từng agent tới đúng mức nỗ lực, đặt quyền để giữ agent tránh xa mọi thứ không thể đảo ngược, và kết nối các máy chủ MCP của bạn. Lưu tệp này dưới tên opencode.jsonc trong thư mục gốc dự án của bạn:

jsonc

{
  "$schema": "https://opencode.ai/config.json",

  // Default model for new sessions
  "model": "minimax-coding-plan/MiniMax-M3.1-Flash-Preview",

  "providers": {
    "minimax-coding-plan": {
      "models": {
        "MiniMax-M3.1-Flash-Preview": {
          // MiniMax's own OpenCode example caps the window at 512K
          "limit": { "context": 524288 },

          // Thinking is always on and defaults to "max".
          // These variants send MiniMax's documented output_config.effort field.
          "variants": [
            { "id": "quick", "body": { "output_config": { "effort": "low" } } },
            { "id": "steady", "body": { "output_config": { "effort": "medium" } } },
            { "id": "careful", "body": { "output_config": { "effort": "high" } } }
          ]
        }
      }
    }
  },

  "agents": {
    // Planning gets the full default effort: a bad plan costs the most later
    "plan":    { "model": "minimax-coding-plan/MiniMax-M3.1-Flash-Preview" },
    // Building: thorough, but faster than max
    "build":   { "model": "minimax-coding-plan/MiniMax-M3.1-Flash-Preview#careful" },
    // Read-only searching through the codebase: speed matters more than depth
    "explore": { "model": "minimax-coding-plan/MiniMax-M3.1-Flash-Preview#quick" }
  },

  "permissions": [
    { "action": "shell", "resource": "*",                  "effect": "ask"   },
    { "action": "shell", "resource": "git status *",       "effect": "allow" },
    { "action": "shell", "resource": "git diff *",         "effect": "allow" },
    { "action": "shell", "resource": "git log *",          "effect": "allow" },
    { "action": "shell", "resource": "npm test *",         "effect": "allow" },
    { "action": "shell", "resource": "npx tsc *",          "effect": "allow" },
    { "action": "shell", "resource": "npx expo lint *",    "effect": "allow" },
    { "action": "shell", "resource": "git push *",         "effect": "deny"  },
    { "action": "shell", "resource": "eas submit *",       "effect": "deny"  },
    { "action": "shell", "resource": "firebase deploy *",  "effect": "deny"  }
  ],

  "mcp": {
    "servers": {
      // Figma's desktop MCP server (Part 6). Local, so no OAuth.
      "figma-desktop": {
        "type": "remote",
        "url": "http://127.0.0.1:3845/mcp",
        "oauth": false
      },
      // Firebase's official MCP server. It asks before changing your project.
      "firebase": {
        "type": "local",
        "command": ["npx", "-y", "firebase-tools@latest", "mcp"]
      }
    }
  }
}

Vài ghi chú để bạn biết mình đang dán gì:

  • Các quy tắc quyền được đọc từ trên xuống, và kết quả khớp cuối cùng sẽ thắng. Mọi lệnh shell đều hỏi trước, các lệnh Git và kiểm thử vô hại được chạy tự do, và ba thứ bị từ chối thẳng: đẩy mã, nộp lên App Store, và triển khai backend. Bạn tự làm những việc đó, có chủ đích.
  • Đổi các lệnh được phép cho phù hợp với bộ công cụ của bạn. Nếu bạn build native bằng Xcode thay vì Expo, hãy thay các npx dòng bằng lệnh kiểm thử và lint của bạn.
  • Nếu một biến thể có vẻ không làm gì, chạy /models để xác nhận tên biến thể, và kiểm tra yêu cầu trong log của OpenCode. MiniMax dùng tối đa khi không gửi mức nỗ lực, nên trường hợp xấu nhất là câu trả lời chậm hơn, chứ không phải hỏng.
  • Các ví dụ kiểu v1 cũ vẫn chạy được. Hướng dẫn của MiniMax dùng provider key; OpenCode v2 đọc các cài đặt v1 được hỗ trợ mà không ghi lại tệp của bạn.

Bước 5 — Viết AGENTS.md trước khi viết một dòng mã nào

OpenCode đọc AGENTS.md vào đầu mỗi phiên. Đây là thói quen hiệu quả nhất trong phát triển có AI hỗ trợ, và hướng dẫn vibe coding đi sâu vào toàn bộ hệ thống. Với một ứng dụng, nó nên chứa các quy tắc của sản phẩm cũng như các lệnh build. Đây là dạng mẫu cho một ứng dụng như Stash:

markdown

# Ghi chú cho agent lập trình (ví dụ cho ứng dụng kiểu Stash)

## Ứng dụng này là gì
Stash ghi nhớ mọi thứ ở đâu. Ảnh chụp vị trí + tên + phòng = tìm thấy trong vài giây.
Nếu một thay đổi không làm việc lưu hay tìm nhanh hơn, nó không thuộc về đây.

## Những điều không thể thương lượng
- Offline trước. Mọi tính năng hoạt động khi không có mạng. Đồng bộ chỉ là phần thêm.
- Chế độ khách không bao giờ tải lên bất cứ thứ gì.
- Không SDK phân tích, quảng cáo hay theo dõi. Hỏi trước khi thêm BẤT KỲ phụ thuộc nào.
- Không bí mật trong gói ứng dụng. Công việc đặc quyền diễn ra trong Cloud Functions.
- Khả năng truy cập: Dynamic Type, nhãn VoiceOver, vùng chạm 44 x 44 pt.
- Chế độ sáng và tối cho mọi màn hình.

## Thiết kế
- Token nằm trong src/theme/tokens.ts. Không bao giờ hard-code màu hay cỡ chữ.
- Khi triển khai một khung Figma: get_design_context, rồi get_variable_defs,
  rồi get_screenshot để so sánh kết quả.

## Lệnh
- Cài đặt: npm install
- Chạy: npx expo start
- Kiểm thử: npm test
- Kiểu: npx tsc --noEmit
- Lint: npx expo lint

## Định nghĩa hoàn thành
- Kiểm thử, kiểu và lint đều qua
- Chạy được ở chế độ máy bay
- Chạy được ở chế độ sáng và tối, với cỡ chữ lớn nhất
- Không có cảnh báo mới trong console

Bước 6 (tùy chọn) — Chạy OpenCode bên trong Xcode, và cấp cho nó công cụ của Xcode

Xcode giờ đã có lập trình agent tích hợp, và nó chấp nhận agent bên ngoài theo hai cách khác nhau. Cả hai đều đáng biết nếu bạn build native.

OpenCode như một agent bên trong Xcode (ACP). Xcode có thể chạy bất kỳ agent nào nói được Agent Client Protocol, và OpenCode thì có, thông qua opencode acp.

  1. Đăng nhập từ terminal trước: opencode auth login.
  2. Chạy which opencode và sao chép đường dẫn tuyệt đối. Xcode không mở rộng ~ hay đọc PATH của shell bạn.
  3. Trong Xcode, chọn Xcode → Settings → Intelligence, rồi trong Agents nhấp Add an Agent.
  4. Dán đường dẫn làm lệnh và thêm acp làm đối số.
  5. Bắt đầu cuộc trò chuyện mới trong thanh bên Intelligence của Xcode và chọn OpenCode.

Bạn không thể đổi mô hình từ giao diện Xcode, nên hãy đặt mô hình mặc định trong opencode.jsonc trước.

Công cụ của Xcode bên trong OpenCode (MCP). Chiều ngược lại thường hữu ích hơn: OpenCode vẫn ở trong terminal của bạn, nhưng nó có thể build dự án, chạy kiểm thử và render bản xem trước SwiftUI thông qua Xcode.

  1. Trong Xcode → Settings → Intelligence, trong Model Context Protocol, bật Allow external agents to use Xcode tools.
  2. Thêm cầu nối của Xcode vào OpenCode: opencode mcp add xcode -- xcrun mcpbridge
  3. Mở dự án trong Xcode trước khi bạn prompt. Cầu nối nói chuyện với Xcode đang chạy, và Xcode cho bạn biết khi một agent bên ngoài kết nối.

Mức nỗ lực nào cho việc nào

Tác vụAgentMức nỗ lực
Lập kế hoạch cho một tính năng, mô hình dữ liệu hoặc logic đồng bộplantối đa (mặc định)
Triển khai một màn hình từ khung Figmabuildcao
Sửa một lỗi có cách tái hiện rõ ràngbuildcao; tối đa nếu là lỗi đồng bộ hoặc điều kiện tranh chấp
Viết kiểm thử, đổi tên, tái cấu trúc nhỏbuildmedium
Tìm kiếm trong cơ sở mã, đọc tài liệuexplorethấp
Thay đổi nội dung và dịch chuỗibuildthấp hoặc medium

Mức nỗ lực cao hơn nghĩa là nhiều token suy nghĩ hơn và chờ lâu hơn, theo chính lời MiniMax. Phần lớn thời gian trong vòng lặp agent là chờ đợi, nên hãy khớp mức nỗ lực với rủi ro.


Phần 5 — Thiết kế ứng dụng trong Figma khi bạn’ không phải nhà thiết kế

Bạn không cần là nhà thiết kế để thiết kế một ứng dụng đầu tiên tốt. Bạn cần một số ít quyết định, đưa ra một lần, ghi lại nơi agent có thể đọc.

Bắt đầu bằng chữ, không phải hình chữ nhật

Trước khi mở Figma, hãy viết ba thứ vào một tệp văn bản thuần:

  1. Lời hứa, trong một câu. Với Stash: cách nhanh nhất để nhớ bạn đã đặt đồ ở đâu.
  2. Ba câu chuyện người dùng. “Tôi đặt hộ chiếu trong ngăn bàn và muốn tìm nó vào tháng Ba.” “Tôi đang ở gara, không có sóng, và muốn ghi lại chỗ để máy khoan.” “Tôi muốn đèn Giáng sinh nhắc tôi rằng chúng tồn tại vào tháng Mười Một.”
  3. Danh sách màn hình. Stash có bốn tab (Trang chủ, Tìm kiếm, Phòng và Cài đặt) cộng một màn hình Thêm và một màn hình chi tiết món đồ. Sáu màn hình. Đó là cả một ứng dụng.

Sau đó đưa tệp đó cho plan agent và yêu cầu nó phản biện với bạn: “Đọc bản tóm tắt này. Liệt kê các luồng người dùng, các trường hợp biên tôi chưa nghĩ tới, và những màn hình tôi còn thiếu. Rồi cho tôi biết tôi nên cắt gì.” Đây chính là kiểu công việc nhàm chán, kỹ lưỡng mà mức nỗ lực tối đa dành cho: kiểu câu hỏi “điều gì xảy ra khi người dùng từ chối quyền truy cập camera?”. Mười phút như vậy có thể cứu bạn khỏi một lần thiết kế lại.

Thiết lập biến trước khi vẽ bất cứ thứ gì

Figma biến là các giá trị có tên: màu, khoảng cách, bán kính góc, kích thước. Hãy thiết lập chúng trước, với chế độ sáng và tối cho màu, và ứng dụng của bạn sẽ nhất quán theo mặc định.

Chúng quan trọng gấp đôi khi có agent AI. Khi agent triển khai một màn hình, máy chủ MCP của Figma có thể đưa cho nó các biến chính xác dùng trong khung đó (công cụ get_variable_defs ), nên nó viết colors.green thay vì đoán mã hex từ ảnh chụp màn hình.

Đây là bảng màu từ concept thiết kế công khai của Stash:

TokenGiá trịDùng choĐộ tương phản trên Paper
Paper#F6F4EENền ứng dụng—
Surface#FFFCF7Thẻ và trường nhập—
Ink#172E2AChữ chính13.1 : 1
Green#23594CNút, trạng thái được chọn, thương hiệu7.3 : 1
Green soft#E1EBE4Điểm nhấn nhẹ—
Coral#D46F4FChấm nhấn, một từ trong tiêu đề3.1 : 1
Coral soft#F8E8DEĐiểm nhấn ấm—
Muted#6E7D76Chữ phụ3.9 : 1
Line#DEDFD7Đường phân cách và viền—

Tiêu đề dùng serif; mọi thứ khác dùng sans-serif của hệ thống. Đó là toàn bộ hệ thống chữ.

Cột độ tương phản là phần cần sao chép. Ink và green vượt qua mức 4.5 : 1 mà WCAG yêu cầu cho chữ thường với biên độ rộng. Coral, khoảng 3 : 1, chỉ đạt cho chữ lớn, nên nó thuộc về các từ tiêu đề lớn và chấm nhấn nhỏ, đúng nơi Stash dùng nó. Màu xám muted ở mức 3.9 : 1, nên nó thuộc về chú thích lớn hơn là chữ nhỏ. Hãy kiểm tra điều này trong Figma trước khi agent sao chép một token vào năm mươi chỗ.

Hiện ảnh Chín màu, hai kiểu chữ, một nắm thành phần. Một hệ thống thiết kế không cần lớn để hữu ích; nó cần được viết ra.

Xây năm thành phần, không phải năm mươi

Với ứng dụng đầu tiên, bạn cần khoảng năm thành phần tái sử dụng: một nút (chính và nhẹ), một trường văn bản, một thẻ, một hàng danh sách hoặc ô (ô phòng của Stash) và thanh tab. Tạo chúng thành component Figma với các biến thể cho từng trạng thái: mặc định, đang nhấn, vô hiệu, lỗi.

Apple công bố bộ tài nguyên thiết kế iOS chính thức cho Figma. Hãy dùng chúng làm tham chiếu cho các thành phần hệ thống như sheet, alert và bàn phím thay vì vẽ lại. Dù sao tác nhân của bạn cũng sẽ dùng component hệ thống thật.

Thiết kế những màn hình mà tác nhân sẽ quên

Tác nhân AI rất giỏi ở luồng thuận lợi và lặng lẽ tệ với mọi thứ xung quanh nó. Hãy thiết kế những thứ này một cách có chủ đích:

  • Trạng thái trống. Lần khởi chạy đầu tiên, một căn phòng không có gì (lưới phòng của Stash hiển thị “Chưa có mục nào”), một lần tìm kiếm không có kết quả.
  • Chữ cỡ lớn. Đặt điện thoại ở cỡ Dynamic Type lớn nhất và xem bố cục của bạn. Tên mục dài sẽ xuống dòng. Nút sẽ to ra.
  • Chế độ tối, cho mọi màn hình, không chỉ những màn hình đẹp.
  • Không có ảnh. Thẻ mục trông thế nào khi không có ảnh?
  • Bị từ chối quyền. Người dùng đã từ chối quyền camera. Giờ thì sao?
  • Ngoại tuyến. “đã lưu, sẽ đồng bộ sau” trông thế nào?

Để AI hỗ trợ bên trong Figma, nhưng nguồn sự thật vẫn là của bạn

AI của chính Figma đã lớn nhanh trong năm nay. Figma Agent đã vào bản beta mở cho mọi gói trả phí tại Config 2026, và miễn phí trong thời gian beta cho ghế Full. Nó có thể tạo và phối lại thiết kế ngay trong tệp của bạn. Figma Make biến prompt thành nguyên mẫu có thể nhấp. Weave các công cụ giờ chạy được những việc về ảnh như đổi nền mà không cần rời khỏi tệp thiết kế.

Chúng rất tuyệt để khám phá. Tạo mười biến thể của một màn hình chính, lấy ý tưởng hay duy nhất, rồi dựng lại bằng component và biến của chính bạn. Nếu các lớp do AI tạo thành nguồn sự thật của bạn, hệ thống thiết kế sẽ trôi dạt, và tác nhân viết mã thừa hưởng sự trôi dạt đó.

Stash làm một việc tôi khuyên mọi người: các ý tưởng thử nghiệm của nó nằm trong một concept tương tác riêng, được ghi nhãn rõ ràng trên website, không phải trong ứng dụng. Bạn được khám phá công khai mà không hứa hẹn những tính năng không tồn tại.

Tạo nguyên mẫu, rồi xem ba người dùng thử

Nối các màn hình thành một nguyên mẫu có thể nhấp, đưa điện thoại cho ba người, và nhờ từng người lưu một thứ gì đó rồi tìm lại. Đừng giải thích gì. Hãy xem họ ngập ngừng ở đâu. Ba người sẽ tìm ra phần lớn vấn đề quan trọng, và sửa một frame trong Figma mất vài phút, trong khi sửa sau khi tác nhân đã dựng xong mất cả một phiên.


Phần 6 — Kết nối Figma với OpenCode: cái bẫy MCP

Đây là phần của quy trình làm việc có cảm giác như tương lai khi nó chạy được: chọn một frame trong Figma, bảo tác nhân dựng nó, và nó đọc bố cục thật, các biến thật và component thật thay vì nheo mắt nhìn ảnh chụp màn hình.

Đây cũng là phần mà hầu hết hướng dẫn bỏ qua một chi tiết sẽ khiến bạn mất một buổi tối.

Máy chủ MCP của Figma cung cấp gì cho tác nhân

MCP, Model Context Protocol, là cách chuẩn để tác nhân AI dùng công cụ bên ngoài. Máy chủ MCP của Figma mở ra một bộ công cụ; đây là những công cụ quan trọng khi dựng ứng dụng:

Công cụNó trả về gì
get_design_contextNgữ cảnh thiết kế cho lớp hoặc frame đã chọn. Figma gọi nó là điểm khởi đầu mặc định
get_variable_defsCác biến và kiểu dùng trong vùng chọn: màu, khoảng cách, kiểu chữ của bạn
get_screenshotMột hình ảnh của vùng chọn, để tác nhân so sánh kết quả của nó
get_metadataMột dàn ý XML thưa thớt về cấu trúc lớp
get_code_connect_mapÁnh xạ giữa component Figma và component mã thật của bạn
create_design_system_rulesMột prompt tạo tệp quy tắc mô tả hệ thống thiết kế của bạn cho tác nhân

Ngoài ra còn có ghi công cụ (use_figma để tạo và chỉnh nội dung Figma gốc, generate_figma_design để biến một giao diện web đang chạy thành các lớp Figma, và hơn thế nữa), nhưng gần như tất cả chỉ có trên máy chủ từ xa. Hãy nhớ điều đó.

Máy chủ từ xa và máy chủ trên máy tính

Figma chạy hai phiên bản máy chủ:

  • Máy chủ từ xa tại https://mcp.figma.com/mcp. Figma khuyến nghị dùng nó, nó không cần ứng dụng trên máy tính, hoạt động trên mọi ghế và mọi gói, và có đầy đủ bộ công cụ kể cả ghi lên canvas.
  • Máy chủ trên máy tính tại http://127.0.0.1:3845/mcp, chạy bên trong ứng dụng Figma trên máy tính. Nó yêu cầu ghế Dev hoặc Full trên gói trả phí, và phần lớn chỉ đọc.

Điểm vướng: OpenCode chưa được phép trên máy chủ từ xa

Máy chủ từ xa chỉ chấp nhận các ứng dụng khách đã được duyệt trong thời gian beta. Danh sách của Figma có Claude Code, Codex, Cursor, VS Code, Gemini CLI, Kiro, Warp và Xcode, cùng nhiều ứng dụng khác. OpenCode không có trong danh sách. Thử kết nối, bước đăng ký sẽ thất bại với HTTP 403.

Đây không phải lỗi phía OpenCode. Hồi tháng 5, một nhân viên Figma giải thích trên diễn đàn Figma rằng phạm vi kết nối được “cố ý giới hạn cho các ứng dụng khách được hỗ trợ trong thời gian beta”, và hướng mọi người sang máy chủ trên máy tính, thứ “bỏ qua hoàn toàn vấn đề OAuth và danh sách cho phép.” Nhóm OpenCode có một pull request đang mở để thêm ứng dụng khách Figma đã đăng ký, vẫn chờ Figma duyệt tại thời điểm viết bài.

Bạn sẽ thấy các bài viết gợi ý mượn client ID OAuth của ứng dụng khác để lách danh sách cho phép. Đừng làm vậy. Hãy dùng máy chủ trên máy tính và chờ hỗ trợ chính thức.

Hiện ảnh Ba con đường từ Figma đến OpenCode. Chỉ một trong số đó là ngõ cụt, và đó lại chính là con đường Figma khuyến nghị cho mọi người khác.

Thiết lập máy chủ trên máy tính với OpenCode

  1. Cài ứng dụng Figma trên máy tính và đăng nhập bằng tài khoản có ghế Dev hoặc Full trên gói trả phí. Trên gói Professional, ghế Dev giá $12 một tháng và ghế Full $16.
  2. Mở tệp thiết kế và chuyển sang Dev Mode với Shift + D.
  3. Trong bảng inspect, tìm phần máy chủ MCP và nhấp Enable desktop MCP server.
  4. Thêm nó vào OpenCode. Hoặc dùng khối figma-desktop trong cấu hình ở Phần 4, hoặc chạy:

bash

   opencode mcp add figma-desktop --url http://127.0.0.1:3845/mcp

Nếu OpenCode cố khởi động đăng nhập OAuth cho nó, hãy đặt "oauth": false trên máy chủ trong opencode.jsonc. Máy chủ trên máy tính là cục bộ và không cần OAuth. 5. Kiểm tra kết nối bằng opencode mcp list.

Giữ ứng dụng Figma trên máy tính luôn mở trong khi làm việc. Nếu Figma bị đóng, các công cụ Figma của tác nhân chỉ đơn giản là biến mất.

Lưu ý giới hạn tần suất

Trên gói Professional, ghế Dev và Full được tối đa 200 lệnh gọi công cụ MCP mỗi ngày và 10 mỗi phút. Ghế Organization được 15 mỗi phút; Enterprise được 600 mỗi ngày và 20 mỗi phút. Ghế View và Collab bị giới hạn ở vài lệnh mỗi tháng. Hai trăm nghe có vẻ nhiều cho đến khi một tác nhân hăng hái gọi get_screenshot sau mỗi chỉnh sửa nhỏ, nên hãy bảo nó, trong AGENTS.md, so sánh với ảnh chụp màn hình mỗi màn hình một lần thay vì mỗi thay đổi một lần.

Mẫu prompt hiệu quả

Chọn một frame trong Figma, rồi trong OpenCode:

Triển khai frame Figma đã chọn thành màn hình Add Item. Trước tiên gọi get_design_context và get_variable_defs. Chỉ dùng token từ src/theme/tokens.ts; nếu thiếu một giá trị, hãy thêm token thay vì hard-code. Tái sử dụng các component Button, TextField và Card hiện có. Khi xong, gọi get_screenshot và liệt kê mọi khác biệt nhìn thấy giữa frame và thứ bạn đã dựng. Rồi sửa chúng.

Hai thói quen khiến việc này đáng tin hơn nhiều:

  • Chạy create_design_system_rules một lần khi bắt đầu dự án và lưu kết quả thành một mục trong AGENTS.md hoặc thành một skill trong .opencode/skills/. Từ đó, mọi phiên đều biết quy tắc thiết kế của bạn mà không cần phải nói.
  • Mỗi yêu cầu một frame. “Dựng toàn bộ ứng dụng từ tệp này” tạo ra một ứng dụng sai một chút ở mọi chỗ. Mỗi lần một màn hình tạo ra những màn hình đúng.

Không có ghế trả phí? Cách miễn phí

Bạn có thể làm tất cả mà không cần MCP. M3.1 đọc được ảnh, nên xuất từng frame thành PNG ở 2x, đính vào prompt, và dán các giá trị màu và khoảng cách vào tệp tokens trong kho mã. Bạn mất dữ liệu lớp chính xác và việc tra biến, nên hãy chờ trao đổi thêm về khoảng cách. Với ứng dụng đầu tiên có sáu màn hình, nó hoàn toàn khả thi, và không tốn gì.


Phần 7 — Cách xây ứng dụng từ đầu, từng giai đoạn

Đây là phần “từ con số không”. Bảy giai đoạn, theo thứ tự tôi sẽ làm, kèm prompt và cạm bẫy.

Giai đoạn 0 — Chọn framework

Năm 2026 bạn có ba lựa chọn hợp lý, và lựa chọn đúng phụ thuộc vào nơi ứng dụng cần chạy.

SwiftUI + Xcode 27Expo SDK 56 (React Native)Flutter
Chạy trêniPhone, iPad, Mac, Apple Watch, Vision ProiPhone, iPad, Android, webiPhone, iPad, Android, web, desktop
Ngôn ngữSwift 6.4TypeScriptDart
Cần Mac không?CóKhông cần để build hoặc nộp: dịch vụ EAS của Expo build ứng dụng iOS trên đám mâyCó, để build iOS, trừ khi bạn dùng cloud CI
WidgetNative WidgetKitỔn định cho iOS từ SDK 56Qua plugin cộng mã WidgetKit gốc
Mức độ thân thiện với tác nhânRất tốt, đặc biệt với các công cụ MCP của chính Xcode; trình biên dịch Swift bắt được nhiều lỗiRất tốt: kiểu TypeScript, tải lại nhanh và rất nhiều mã ví dụ công khaiTốt
Phù hợp nhấtỨng dụng chỉ cho Apple muốn mọi tính năng gốcMột codebase cho iPhone và Android, do một người dựngGiao diện trông giống nhau trên mọi nền tảng

Quy tắc nhanh của tôi:

  • Chỉ Apple, và bạn muốn những thứ mới nhất của nền tảng (các framework AI trên thiết bị của Apple, Live Activities, tích hợp hệ thống sâu): SwiftUI, với OpenCode chạy bên trong Xcode hoặc dùng công cụ của Xcode (Phần 4).
  • iPhone và Android từ một codebase, và bạn là một người: Expo. SDK 56 phát hành ngày 21 tháng 5 năm 2026 với React Native 0.85, nâng mức tối thiểu lên iOS 16.4, đưa lớp giao diện SwiftUI và Jetpack Compose lên mức sẵn sàng cho sản xuất, và đưa widget iOS lên mức ổn định. Dịch vụ EAS của nó build và nộp ứng dụng iOS từ Windows hoặc Linux, và gói miễn phí gồm 15 bản build iOS và 15 bản Android mỗi tháng.
  • Flutter nếu bạn hoặc nhóm của bạn đã biết nó.

Trang App Store của Stash yêu cầu iOS 16.4, và chính sách quyền riêng tư của nó đã tính đến bản Android, nên rõ ràng nó được định để đi xa hơn iPhone.

Giai đoạn 1 — Khởi tạo, commit, viết brief

Tạo dự án trống và đảm bảo nó chạy trước khi tác nhân chạm vào.

Expo:

bash

npx create-expo-app@latest my-app
cd my-app
npx expo start        # open it on your phone with Expo Go, or in the iOS Simulator

SwiftUI: trong Xcode, chọn File → New → Project → iOS → App, chọn SwiftUI, và chạy nó một lần trong Simulator.

Sau đó thêm các tệp từ Phần 4 (AGENTS.md và opencode.jsonc), cộng thêm hai tệp nữa:

  • ROADMAP.md: danh sách các lát cắt dọc bên dưới, có ô đánh dấu. Tác nhân đọc nó, đánh dấu hoàn thành, và bạn luôn biết mình đang ở đâu.
  • src/theme/tokens.ts (hoặc tương đương Swift): các biến Figma của bạn dưới dạng mã. Chép tay vào, hoặc để tác nhân lấy chúng bằng get_variable_defs.

Commit. Nếu Git chưa được thiết lập, git init trước. Từ giờ, mỗi bước hoàn thành đều kết thúc bằng một commit.

Giai đoạn 2 — Lập kế hoạch mô hình dữ liệu trước mọi màn hình

Mô hình dữ liệu là quyết định tốn kém nhất nếu thay đổi sau này, vì khi người dùng thật đã có dữ liệu thật, mọi thay đổi đều cần migration. Dùng plan tác nhân ở mức nỗ lực tối đa:

Bạn đang lập kế hoạch cho một ứng dụng kiểu “tôi để nó ở đâu rồi?”. Đọc AGENTS.md, ROADMAP.md và brief. Đề xuất mô hình dữ liệu, cách lưu trữ cục bộ và cấu trúc thư mục. Ứng dụng phải hoạt động hoàn toàn offline, không cần tài khoản; tài khoản và đồng bộ đến sau và không được buộc phải viết lại lớp cục bộ. Liệt kê các đánh đổi, các migration chúng ta sẽ cần nếu thêm đồng bộ sau này, và bất cứ điểm nào trong brief còn mơ hồ. Chưa viết mã.

Với một ứng dụng có hình dạng như Stash, bạn sẽ có đại khái như sau (chỉ là minh hoạ, không phải schema thật của Stash):

ts

type Room = {
  id: string;
  name: string;            // "Hallway"
  createdAt: number;
  updatedAt: number;
};

type Item = {
  id: string;
  name: string;            // "House keys"
  roomId: string;
  spot?: string;           // "Top drawer"
  note?: string;           // "In the ceramic dish on the left"
  photoPath?: string;      // local file first; cloud copy only with an account
  voiceNotePath?: string;
  transcript?: string;     // what makes voice notes searchable
  remindAt?: number;       // seasonal reminder
  createdAt: number;
  updatedAt: number;       // used to resolve sync conflicts
  deletedAt?: number;      // soft delete, so deletions can sync too
};

Đọc kỹ kế hoạch. Tranh luận với nó. Đây là thời điểm rẻ nhất trong toàn dự án để đổi ý.

Giai đoạn 3 — Dựng theo lát cắt dọc

Lát cắt dọc là một tính năng hoạt động từ đầu đến cuối, từ màn hình đến lưu trữ và ngược lại, trước khi bạn bắt đầu lát tiếp theo. Đây là thứ tự tôi sẽ dựng một ứng dụng giống Stash:

  1. Thêm một mục: tên, phòng, vị trí và ghi chú, lưu cục bộ.
  2. Ảnh: camera và thư viện ảnh, lưu thành tệp cục bộ.
  3. Trang chủ: các mục vừa lưu và hàng phòng.
  4. Tìm kiếm: theo tên, phòng và ghi chú, kèm bộ lọc “có ảnh”.
  5. Chi tiết mục và “Tìm thấy rồi”.
  6. Phòng: lưới phòng, cộng việc thêm, đổi tên và xoá phòng.
  7. Ghi chú thoại: ghi âm, phiên âm, làm cho bản phiên âm tìm kiếm được.
  8. Nhắc nhở: thông báo cục bộ cho các mục theo mùa.
  9. Widget cho Màn hình chính và Màn hình khoá.
  10. Cài đặt: giao diện, xuất dữ liệu và, khi đã có tài khoản, xoá tài khoản.
  11. Tài khoản và đồng bộ: chất liệu cho phiên bản hai, nếu bạn đủ tỉnh táo.

Mỗi lát cắt đi theo cùng một vòng:

  1. Lập kế hoạch: các plan viết một kế hoạch ngắn cho lát cắt. Bạn sửa lại.
  2. Thiết kế: chọn frame Figma, rồi dùng mẫu prompt ở Phần 6.
  3. Dựng: các build tác nhân triển khai, chạy kiểm thử và sửa những gì hỏng.
  4. Tự chạy thử, trên thiết bị, và cố làm nó hỏng.
  5. Đọc diff. Từng dòng sắp được phát hành.
  6. Commit, đánh dấu ô trong ROADMAP.md, mở phiên mới cho lát cắt tiếp theo.

Phiên mới đó quan trọng hơn vẻ ngoài của nó. Kể cả với một triệu token ngữ cảnh, một phiên dài vẫn tích tụ những giả định cũ. Một khởi đầu sạch đọc lại AGENTS.md và ROADMAP.md thường thông minh hơn một phiên dài.

Giai đoạn 4 — Offline trước, rồi đồng bộ

Chính sách quyền riêng tư của Stash mô tả một mẫu mà tôi sẽ chép cho gần như mọi ứng dụng cá nhân: không có tài khoản thì mọi thứ ở lại trên thiết bị; có tài khoản thì dữ liệu đồng bộ qua backend. Nó làm phiên bản đầu đơn giản hơn, App Review dễ hơn và niềm tin của người dùng mạnh hơn.

Thứ tự thực hiện:

  1. Hoàn thiện lớp cục bộ trước. SQLite qua thư viện của Expo, hoặc SwiftData trong ứng dụng gốc. Ảnh và bản ghi âm sống dưới dạng tệp trên thiết bị.
  2. Thêm tài khoản với Firebase Authentication. Đăng nhập bằng email là đủ để bắt đầu. Nếu bạn thêm Google hoặc một đăng nhập bên thứ ba khác làm cách chính để đăng nhập, nguyên tắc 4.8 của Apple yêu cầu một lựa chọn tương đương chú trọng quyền riêng tư như Sign in with Apple.
  3. Đồng bộ bản ghi mục lên Cloud Firestore, còn ảnh và ghi chú thoại lên Cloud Storage, mỗi thứ nằm dưới đường dẫn của chính người dùng.
  4. Thực hiện các tác vụ đặc quyền trên máy chủ. Mọi thứ cần quyền quản trị, chẳng hạn như xoá toàn bộ tệp khi một tài khoản bị xoá, đều thuộc về Cloud Functions, không bao giờ nằm trong gói ứng dụng.
  5. Khoá chặt bằng quy tắc bảo mật để mỗi người dùng chỉ có thể đọc và ghi dữ liệu của chính mình:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid}/{document=**} {
      allow read, write: if request.auth != null && request.auth.uid == uid;
    }
  }
}

Viết quy tắc tương đương cho Cloud Storage, và yêu cầu tác nhân viết các bài kiểm thử cố đọc dữ liệu của người dùng khác và phải thất bại. Máy chủ MCP chính thức của Firebase (nó nằm trong cấu hình ở Phần 4) cho phép tác nhân hiểu và kiểm tra quy tắc của bạn, và hỏi ý kiến bạn trước khi thay đổi bất cứ thứ gì trong dự án. Việc triển khai vẫn là việc của bạn, đó là lý do firebase deploy bị từ chối trong phần quyền.

Hai lưu ý về chi phí. Gói Spark miễn phí của Firebase bao gồm Authentication (50.000 người dùng mỗi tháng) và hạn mức miễn phí của Firestore (1 GiB lưu trữ, 50.000 lượt đọc và 20.000 lượt ghi mỗi ngày), nhưng Cloud Storage và Cloud Functions cần gói Blaze trả theo mức dùng. Blaze vẫn giữ hạn mức miễn phí hào phóng, gồm 5 GB lưu trữ và 2 triệu lượt gọi hàm mỗi tháng, nên một ứng dụng nhỏ vẫn có thể tốn 0 đồng. Dù vậy, hãy đặt cảnh báo ngân sách ngay từ ngày đầu.

Nếu bạn muốn hiểu sâu hơn “lý do” đằng sau thiết kế local-first, tôi đã viết về nó trong vì sao phần mềm local-first đang trở lại.

Giai đoạn 5 — Những phần riêng của iPhone

Đây là những chi tiết phân biệt “nó chạy trên điện thoại của tôi” với “nó qua được vòng duyệt”:

  • Lời nhắc cấp quyền cần lý do trung thực. Camera, thư viện ảnh, micro và, nếu bạn dùng framework nhận dạng giọng nói của Apple, nhận dạng giọng nói — mỗi thứ đều cần một chuỗi mục đích nói rõ lý do. “Để chụp ảnh nơi bạn cất đồ” là ổn. “Ứng dụng này cần quyền truy cập” là lý do bị từ chối kinh điển.
  • Hỏi đúng thời điểm. Hãy xin quyền thông báo khi người ta đặt lời nhắc đầu tiên, không phải lần mở đầu tiên. Người ta sẽ đồng ý khi lý do rõ ràng.
  • Ưu tiên nhận dạng giọng nói trên thiết bị khi điện thoại hỗ trợ, và nói rõ trong chính sách quyền riêng tư rằng dịch vụ giọng nói của nền tảng có thể xử lý âm thanh. Chính sách của Stash làm đúng như vậy.
  • Widget là một ứng dụng nhỏ riêng. Chúng có vòng đời riêng, giới hạn bộ nhớ riêng và cách đọc dữ liệu của bạn riêng. Hãy dành hẳn một phần việc cho chúng.
  • Manifest quyền riêng tư. Từ tháng 5 năm 2024, ứng dụng (kể cả các SDK bên trong) phải khai báo lý do được chấp thuận cho một số API hệ thống. Các SDK của Firebase có manifest riêng; hãy chắc là ứng dụng của bạn cũng có.
  • Chế độ tối, Dynamic Type, VoiceOver. Kiểm tra cả ba trên mọi màn hình. Tác nhân đáng tin hơn nhiều về nhãn trợ năng khi AGENTS.md yêu cầu, nên hãy yêu cầu điều đó.

Giai đoạn 6 — Kiểm thử như một người hoài nghi

Tác nhân sẽ nói với bạn là xong rồi. Nó thường sai ở những chỗ nhỏ, và đôi khi sai rất lớn. Tác nhân của Xcode 27 giờ có thể tự chạy kiểm thử và kiểm tra bản xem trước SwiftUI, điều đó cũng giúp, nhưng không gì thay thế được một người cầm điện thoại.

Tự động: kiểm thử đơn vị cho tìm kiếm, mô hình dữ liệu, và đặc biệt là logic hợp nhất khi đồng bộ. Đó là những lỗi làm mất dữ liệu của người dùng.

Thủ công, trước mỗi lần phát hành:

  • Thiết bị thật, không chỉ Simulator
  • Chế độ máy bay: lưu, tìm, sửa, rồi kết nối lại và kiểm tra xem có đồng bộ không
  • Chế độ tối và cỡ chữ lớn nhất trên mọi màn hình
  • VoiceOver: bạn có thể lưu và tìm một mục mà nhắm mắt không?
  • Từ chối từng quyền một
  • Cài mới hoàn toàn, và nâng cấp đè lên phiên bản trước (dữ liệu phải còn nguyên)
  • Xoá tài khoản: mọi thứ đã thực sự biến mất chưa?

Khi có gì đó hỏng, hãy ghi lại. Dùng tính năng ghi màn hình của iPhone, đính kèm video và hỏi M3.1 xem có gì sai. Nó nhận đầu vào video, và “xem cái này” hiệu quả hơn ba đoạn mô tả.

Mẫu prompt cho kiểu ứng dụng này

Hãy điều chỉnh chúng thay vì sao chép mù quáng.

Một phần việc:

Triển khai phần 4 trong ROADMAP.md (tìm kiếm). Đọc AGENTS.md trước. Tìm kiếm phải khớp tên mục, tên phòng, ghi chú và bản ghi âm giọng nói, không phân biệt hoa thường, ngay khi người dùng gõ. Thêm bộ lọc “Có ảnh”. Viết kiểm thử đơn vị trước, rồi mới triển khai. Chạy kiểm thử và trình kiểm tra kiểu. Cho tôi xem diff và danh sách mọi giả định bạn đã đưa ra.

Một lỗi:

Đính kèm là một đoạn ghi màn hình. Trên iPhone để cỡ chữ lớn nhất, bàn phím che mất nút Lưu ở màn hình Thêm. Tìm nguyên nhân, giải thích trong hai câu, sửa nó, và kiểm tra các biểu mẫu khác trong ứng dụng xem có vấn đề tương tự không.

Một buổi đánh giá:

Đánh giá mọi thay đổi kể từ lần commit cuối với tư cách một chuyên gia iOS cấp cao khó tính. Tìm lỗi crash, mất dữ liệu, rò rỉ quyền riêng tư, thiếu nhãn trợ năng, màu hard-code và bất cứ thứ gì làm hỏng việc dùng ngoại tuyến. Chưa sửa gì cả; đưa tôi danh sách đánh số, nghiêm trọng nhất trước.

Prompt cuối đó đáng để chạy trước mỗi lần commit. Nó tốn một phút và bắt được những vấn đề tốn cả cuối tuần.


Phần 8 — Cách phát hành ứng dụng trên App Store năm 2026

Xây ứng dụng là phần vui. Phát hành nó là giấy tờ, và giấy tờ là chỗ những nhà phát triển lần đầu mất cả tuần. Đây là tất cả trong một chỗ.

Những gì Apple yêu cầu tính đến tháng 10 năm 2026

Yêu cầuChi tiếtCó hiệu lực từ
Apple Developer Program$99 một năm (€99 ở Đức). Công ty đăng ký với tư cách tổ chức, cần số D-U-N-S—
Công cụ buildBản tải lên phải được build bằng Xcode 26 trở lên dùng SDK iOS 2628 tháng 4 năm 2026
Mục tiêu tối thiểuỨng dụng phải nhắm tới iOS 13 trở lên9 tháng 9 năm 2026
Xếp hạng độ tuổiTrả lời bộ câu hỏi xếp hạng độ tuổi cập nhật của Apple31 tháng 1 năm 2026
Manifest quyền riêng tưLý do được chấp thuận cho các API “cần lý do”, kể cả trong SDK của bên thứ ba1 tháng 5 năm 2024
Chính sách quyền riêng tưLiên kết trong App Store Connect và truy cập được bên trong ứng dụng (hướng dẫn 5.1.1(i))—
Xoá tài khoản“Nếu ứng dụng của bạn hỗ trợ tạo tài khoản, bạn cũng phải cho phép xoá tài khoản ngay trong ứng dụng” (5.1.1(v))—
Trạng thái thương nhân EUMọi nhà phát triển đều phải khai báo. Địa chỉ, số điện thoại và email của thương nhân được hiển thị trên trang sản phẩm ở cả 27 nước EU—

Phiên bản hiện tại của Apple là Xcode 27 và iOS 27, cả hai phát hành ngày 14 tháng 9 năm 2026. Bạn chưa buộc phải build bằng Xcode 27, nhưng không thể tải lên bất cứ thứ gì build bằng Xcode 16 hoặc cũ hơn (Apple nhảy thẳng từ Xcode 16 lên 26 khi chuyển sang cách đánh số theo năm).

Lưu ý cho nhà phát triển Đức và EU: nếu bạn phát hành với tư cách doanh nghiệp, bạn là thương nhân theo Đạo luật Dịch vụ số của EU, và Apple xác minh thông tin liên hệ của bạn trước khi hiển thị trên trang sản phẩm. Tháng 2 năm 2025, Apple đã gỡ hàng nghìn ứng dụng khỏi gian hàng EU vì thiếu thông tin này. Đừng nằm trong số đó.

App Store Connect, từng trường một

Tạo bản ghi ứng dụng trong App Store Connect, rồi điền:

  • Bundle ID. Một định danh tên miền đảo ngược không bao giờ đổi, ví dụ của Stash là network.grahammiranda.stash. Hãy chọn cẩn thận.
  • Tên (30 ký tự) và phụ đề (30). Stash dùng Stash — Find It Fast và Tìm mọi thứ bạn đã cất đi: thương hiệu cộng lợi ích, rồi lợi ích bằng lời lẽ đơn giản.
  • Từ khoá (100 ký tự), phân tách bằng dấu phẩy không có dấu cách. Đừng lặp lại từ đã có trong tên hoặc phụ đề; chúng vẫn được tính.
  • Văn bản quảng bá (170 ký tự), có thể đổi mà không cần duyệt lại, và mô tả (4,000).
  • Ảnh chụp màn hình. Một đến mười ảnh cho mỗi cỡ thiết bị, PNG hoặc JPEG, không có nền trong suốt. Với iPhone, cỡ 6,9 inch (1320 × 2868) hoặc cỡ 6,5 inch (1284 × 2778); với iPad, cỡ 13 inch (2064 × 2752). Bộ của Stash dùng cỡ 6,5 inch và 13 inch.
  • Danh mục. Một danh mục chính và một danh mục phụ tuỳ chọn. Stash là Productivity, với Utilities đứng thứ hai.
  • URL. Hỗ trợ, tiếp thị và chính sách quyền riêng tư. Mọi thứ phải hoạt động.
  • Quyền riêng tư ứng dụng, “nhãn dinh dưỡng”. Nói thêm bên dưới, vì đây là chỗ người trung thực vẫn làm sai.
  • Xếp hạng độ tuổi bảng câu hỏi.
  • Thông tin App Review: thông tin liên hệ, ghi chú cho người duyệt và, nếu ứng dụng cần đăng nhập, một tài khoản demo. Một chế độ khách như của Stash giúp người duyệt dễ thở hơn.
  • Tuân thủ xuất khẩu. Nếu ứng dụng của bạn chỉ dùng mã hoá sẵn có trong hệ điều hành, như HTTPS, thì thường được miễn trừ. Kiểm tra hướng dẫn của Apple, rồi đặt ITSAppUsesNonExemptEncryption trong Info.plist để không bị hỏi mỗi lần tải lên.

Các trường văn bản cũng là việc tốt cho tác nhân: “Soạn phụ đề, từ khoá, văn bản quảng bá và mô tả cho App Store. Chỉ dùng các tính năng có trong mã; liệt kê tệp nơi mỗi tính năng nằm.” Chỉ dẫn cuối đó giữ cho nó không bịa ra tính năng.

TestFlight trước tiên

Tải một bản build lên (từ Organizer của Xcode, hoặc bằng eas build --platform ios --auto-submit trên Expo) và kiểm tra qua TestFlight trước:

  • Người thử nội bộ: tối đa 100 người trong nhóm của bạn, không cần duyệt.
  • Người thử bên ngoài: tối đa 10.000 người, mời qua email hoặc bằng liên kết công khai. Bản build bên ngoài đầu tiên phải qua một vòng Beta App Review ngắn.
  • Bản build có thể kiểm thử trong 90 ngày.

Đưa nó cho năm người bạn dùng điện thoại khác nhau trong một tuần. Họ sẽ tìm ra lỗi crash mà bạn không thấy.

Điều thực sự khiến ứng dụng bị từ chối

Apple nói rằng “trung bình 90% hồ sơ được duyệt trong chưa đầy 24 giờ”, và rằng “hơn 40% vấn đề chưa giải quyết liên quan đến hướng dẫn 2.1: Tính hoàn chỉnh của ứng dụng”: crash, nội dung giữ chỗ, thông tin thiếu và liên kết hỏng. Những nghi phạm quen thuộc với ứng dụng đầu tiên:

Hướng dẫnÝ nghĩa thực tế
2.1 Tính hoàn chỉnh của ứng dụngKhông crash, không “Lorem ipsum”, không liên kết chết, có thông tin tài khoản demo nếu cần đăng nhập
4.2 Chức năng tối thiểu“Ứng dụng của bạn phải có tính năng, nội dung và giao diện nâng nó vượt khỏi một trang web đóng gói lại”
4.8 Dịch vụ đăng nhậpNếu đăng nhập bên thứ ba là cách đăng nhập chính, bạn cũng phải cung cấp một lựa chọn chú trọng quyền riêng tư như Sign in with Apple
5.1.1(i) Chính sách quyền riêng tưLiên kết trong App Store Connect và bên trong ứng dụng; nói rõ bạn thu thập gì, ai xử lý, và việc xoá diễn ra thế nào
5.1.1(v) Xoá tài khoảnNếu người ta có thể tạo tài khoản, họ có thể xoá nó trong ứng dụng
Siêu dữ liệu chính xácẢnh chụp màn hình và mô tả cho thấy bản binary thực sự làm gì, không phải lộ trình

Stash giữ các thử nghiệm thiết kế trên trang web, có ghi nhãn rõ ràng, và không đưa lên trang App Store — đó là phía đúng của dòng cuối cùng kia.

Nhãn quyền riêng tư: làm cho đúng, không chỉ nghe hợp lý

Định nghĩa của Apple rất chính xác: “‘Thu thập’ nghĩa là truyền dữ liệu ra khỏi thiết bị theo cách cho phép bạn và/hoặc đối tác bên thứ ba truy cập trong khoảng thời gian dài hơn mức cần thiết để phục vụ yêu cầu được truyền theo thời gian thực.” Dữ liệu chỉ được xử lý trên thiết bị thì không bị coi là thu thập.

Trên thực tế, với một ứng dụng kiểu Stash:

  • Chỉ dùng chế độ khách (không có gì rời khỏi điện thoại): dữ liệu không bị thu thập.
  • Tài khoản có đồng bộ: địa chỉ email, ảnh, bản ghi âm giọng nói và ghi chú lưu trên backend của bạn được thu thập, vì chúng rời khỏi thiết bị và nằm trên máy chủ, dù chỉ người dùng mới thấy được. Chúng vào nhãn với tư cách dữ liệu liên kết với người dùng, dùng cho chức năng của ứng dụng, và không dùng để theo dõi.

Tác nhân là một kiểm toán viên tuyệt vời ở đây, vì nó đọc được mọi lệnh gọi mạng trong mã nguồn:

Kiểm toán mã nguồn này để tìm mọi dữ liệu rời khỏi thiết bị: đó là gì, đi đâu (SDK hay endpoint nào), có được lưu không, lưu bao lâu, và có liên kết với người dùng không. Gồm cả dữ liệu do SDK bên thứ ba gửi. Xuất ra một bảng để tôi dùng điền các câu hỏi App Privacy của Apple và biểu mẫu Data safety của Google Play.

Rồi đảm bảo ba tài liệu kể cùng một câu chuyện: chính sách quyền riêng tư, nhãn quyền riêng tư trên App Store và, nếu bạn phát hành trên Android, biểu mẫu Data safety của Google Play. Chính sách quyền riêng tư của Stash nói rằng bảng dữ liệu của nó được viết để khớp với cả hai khai báo gian hàng, và đó là chuẩn đúng để bạn tự đặt ra.

Hiện ảnh In nó ra, dán cạnh màn hình, đánh dấu trước mỗi lần gửi đầu tiên.

Stash đã ra mắt thế nào

Stash 1.0 lên sóng ngày 23 tháng 9 năm 2026. Phiên bản 1.0.1, với “Thiết kế mới và sửa lỗi”, tiếp theo vào ngày 2 tháng 10, chín ngày sau đó. Hãy phát hành phiên bản chạy được, rồi cải thiện nó công khai: đó là nhịp lành mạnh nhất tôi biết cho một ứng dụng đầu tiên.


Phần 9 — “Và những thứ linh tinh”: bộ công cụ ra mắt quanh ứng dụng

Một ứng dụng trên App Store mà không có gì xung quanh thì như cửa hàng không biển hiệu. Đây là phần còn lại của bộ đồ nghề, vẫn lấy Stash làm ví dụ.

Trang đích có bản demo để người ta chạm vào

Trang web của Stash làm vài việc mà tôi sẽ bắt chước cho bất kỳ ứng dụng đầu tiên nào:

  • Một lời hứa ngay phần đầu trang. “Cất đi. Biết ngay ở đâu.” Rồi một câu và hai nút: tải ứng dụng, hoặc thử trên trình duyệt.
  • Bản xem trước trực tiếp ở phần đầu trang. Chiếc điện thoại bên phải không phải ảnh. Bạn có thể chạm và khám phá trong đó.
  • Bản demo thật trên trình duyệt. A ngôi nhà mẫu nơi bạn có thể tìm chìa khoá, xem các phòng và thêm một mục thử. Bản demo “chạy trong tab trình duyệt của bạn”, không chạm vào dữ liệu của ứng dụng, và quên hết khi bạn tải lại. Nó cho người ta thử ý tưởng trước khi quyết định cài đặt.
  • Ba bước, bốn tính năng, không thuật ngữ. Chụp ảnh chỗ cất. Đặt tên và chọn phòng. Tìm lại khi cần.
  • Các thử nghiệm thiết kế, được ghi nhãn rõ ràng là ý tưởng chứ không phải tính năng.
  • Mười ngôn ngữ (tiếng Anh, tiếng Đức, tiếng Pháp, tiếng Tây Ban Nha, tiếng Ý, tiếng Hà Lan, tiếng Bồ Đào Nha Brazil, tiếng Ba Lan, tiếng Thuỵ Điển và tiếng Đan Mạch), mỗi ngôn ngữ có hreflang đúng chuẩn để công cụ tìm kiếm hiển thị bản phù hợp, cùng nút chuyển giao diện sáng và tối.
  • Dữ liệu có cấu trúc mô tả ứng dụng như một MobileApplication, kèm giá, nền tảng và liên kết App Store, để công cụ tìm kiếm hiểu trang nói về một ứng dụng.
  • Không có gì đáng ngại. Mã của trang không có analytics, không pixel quảng cáo, không nhúng mạng xã hội, không font ngoài, không đăng nhập và không biểu mẫu liên hệ. Nó chỉ lưu ngôn ngữ và giao diện bạn chọn trong trình duyệt.

Hiện ảnh Trang đích của Stash. Chiếc điện thoại bên phải là bản demo hoạt động, không phải ảnh chụp.

Một trang tĩnh như thế này cũng là dự án đầu tiên hoàn hảo cho cùng bộ OpenCode và M3.1: HTML, CSS thuần và một chút JavaScript, không cần framework, và bạn thấy mọi thay đổi trong trình duyệt ngay lập tức.

Đây là thông tin chung từ người đã trải qua, không phải tư vấn pháp lý. Khi còn nghi ngờ, hãy hỏi luật sư.

Phát hành từ Đức nghĩa là thêm vài trang so với những gì một hướng dẫn kiểu Mỹ nói với bạn:

  • Một trang Impressum (thông tin pháp lý) theo § 5 của Digitale-Dienste-Gesetz (DDG), luật Đức thay thế Telemediengesetz cũ từ năm 2024: tên công ty, địa chỉ, giám đốc, đăng ký kinh doanh, thông tin liên hệ và, nếu có, mã số VAT.
  • Hai văn bản quyền riêng tư riêng biệt. Một cho trang web và một cho ứng dụng, vì chúng xử lý dữ liệu khác nhau. Stash có cả hai, và mỗi bản nói rõ bạn đang đọc bản nào.
  • Chính sách quyền riêng tư ứng dụng có nội dung thực chất. Bản của Stash gồm bên kiểm soát dữ liệu, bảng nói rõ thu thập gì và vì sao, cơ sở pháp lý cho từng mục đích theo Điều 6 GDPR, các bên xử lý liên quan (Firebase, của Google), cách bao phủ chuyển dữ liệu quốc tế (Khung quyền riêng tư dữ liệu EU-Hoa Kỳ và các điều khoản hợp đồng chuẩn), thời gian lưu và xoá, quyền của người dùng, cơ quan giám sát có thẩm quyền, trẻ em, bảo mật và cách thông báo thay đổi.
  • Cách xoá tài khoản bên ngoài ứng dụng. Stash cung cấp một biểu mẫu web bên cạnh lựa chọn trong ứng dụng. Google Play yêu cầu liên kết web để xoá tài khoản nếu ứng dụng cho phép tạo tài khoản, nên bạn cũng sẽ cần một cái vào ngày phát hành trên Android.
  • Điều khoản xử lý dữ liệu với nhà cung cấp backend của bạn, được chấp nhận trong bảng điều khiển trước khi dữ liệu người dùng thật đến.

Cookie là cơn đau đầu kinh điển còn lại. Trang web của Stash né được phần lớn chuyện đó vì không có gì để xin đồng ý: không công cụ phân tích, không pixel quảng cáo, không theo dõi, chỉ có ngôn ngữ và giao diện được ghi nhớ. Banner đồng ý rẻ nhất là banner bạn không bao giờ cần.

First-year cost to build an app with AI in 2026: $363 lean, $532 comfortable and $1,204 power budget, split into Apple, MiniMax, Figma, Expo and Google Play
Đăng ký model là khoản lớn nhất trong mọi ngân sách. Phí Apple là khoản duy nhất bạn không thể tránh.

Tối ưu App Store không cần chiêu trò

Tìm kiếm trên App Store dựa vào tên, phụ đề và từ khóa của bạn, còn người ta quyết định trong vài giây dựa trên biểu tượng và những ảnh chụp màn hình đầu tiên. Vài quy tắc vẫn đứng vững:

  • Tên: thương hiệu cộng lợi ích. “Stash — Find It Fast” cho người lạ biết ứng dụng dùng để làm gì.
  • Ảnh chụp màn hình kể một câu chuyện, theo đúng thứ tự. Sáu ảnh của Stash đọc như một mẩu quảng cáo ngắn: Mọi thứ đều có chỗ. Tìm thấy. Trong vài giây. Lưu vị trí. Ngôi nhà của bạn. Từng phòng một. Nhớ những chi tiết nhỏ. Rõ ràng. Trong mọi ánh sáng. Nhiều người không bao giờ cuộn qua hai hoặc ba ảnh đầu, nên hãy đặt vòng lặp cốt lõi ở đó.
  • Bản địa hóa trang giới thiệu bằng mọi ngôn ngữ mà ứng dụng của bạn thực sự hỗ trợ.
  • Hãy xin đánh giá vào lúc người dùng đang hài lòng. Lời nhắc đánh giá của Apple chỉ được hiện tối đa ba lần một năm với mỗi người dùng, nên đừng phí nó vào lần mở đầu tiên. Với ứng dụng như Stash, thời điểm rõ ràng nhất là ngay sau khi người dùng nhấn “Tìm thấy rồi”.
  • Dùng văn bản khuyến mại cho từng mùa. Dọn nhà mùa xuân, chuyển nhà, cất đồ mùa đông. Nó thay đổi mà không cần duyệt lại.

Android, khi bạn sẵn sàng

Nếu bạn xây bằng Expo hoặc Flutter, Android gần như chỉ cách một bản build. Giấy tờ nhẹ hơn nhưng khác:

  • Google Play thu $25 một lần để mở tài khoản nhà phát triển.
  • Tài khoản cá nhân mới (tạo sau ngày 13 tháng 11 năm 2023) phải chạy thử nghiệm kín với ít nhất 12 người thử, đăng ký liên tục 14 ngày, trước khi có thể phát hành. Tài khoản tổ chức được miễn, thêm một lý do để phát hành qua công ty nếu bạn có.
  • Biểu mẫu An toàn dữ liệu là phiên bản nhãn quyền riêng tư của Google. Hãy giữ nó nhất quán với chính sách quyền riêng tư và các câu trả lời trên App Store của bạn.

Phần 10 — Chi phí xây ứng dụng với AI năm 2026

Phần mềm trong bộ công cụ này hầu hết là miễn phí. Thứ bạn trả tiền là model, tư cách thành viên Apple và, nếu muốn, một ghế Figma tốt hơn.

Hạng mụcGiá niêm yếtKhi nào cần
Apple Developer Program$99 một năm (€99 ở Đức)Để phát hành trên App Store
OpenCode v2Miễn phí, giấy phép MITLuôn
MiniMax M PlanGo $22, Explore $55, Build $132 mỗi tháng (giảm 50% tháng đầu khi thanh toán theo tháng đến 14 tháng 10)Để dùng M3.1-Flash-Preview
FigmaStarter miễn phí; ghế Professional Dev $12 một tháng, ghế Full $16Ghế trả phí chỉ để dùng MCP server trên máy tính
XcodeMiễn phíBuild native, trên Mac chip Apple silicon
Expo EASGói miễn phí với 15 bản build iOS và 15 bản Android mỗi tháng; Starter $19 một thángNếu bạn build bằng Expo
FirebaseGói Spark miễn phí; Blaze là trả theo mức dùng với hạn mức miễn phíTài khoản và đồng bộ; Storage và Functions cần Blaze
Google Play$25, một lầnChỉ khi bạn phát hành trên Android
Trang đíchTùy chi phí hosting và tên miền của bạnRất nên có

Ba ngân sách năm đầu thực tế

Ngân sáchBao gồm những gìNăm đầu
Tiết kiệmThành viên Apple + M Plan Go; Figma Starter với frame xuất ra; Expo, Firebase và OpenCode ở gói miễn phí$363
Thoải máiTiết kiệm + một ghế Figma Dev cho MCP server trên máy tính + Google Play$532
Hiệu năngApple + M Plan Explore + ghế Figma Full + Expo Starter + Google Play$1,204

Hiện ảnh Đăng ký model là khoản lớn nhất trong mọi ngân sách. Phí Apple là khoản duy nhất bạn không thể tránh.

Giá niêm yết bằng đô la Mỹ ngày 5 tháng 10 năm 2026, chưa gồm VAT, theo mức giá tháng đầy đủ (không giảm giá ra mắt). Hóa đơn backend phụ thuộc vào số người dùng; ở quy mô nhỏ, hạn mức miễn phí của Firebase thường đủ. Dù vậy hãy đặt cảnh báo ngân sách.

Ngân sách tiết kiệm rơi vào khoảng $30 một tháng. Nhưng chi phí thật của dự án không nằm trong bảng: đó là những buổi tối của bạn. AI rút ngắn phần gõ, không rút ngắn phần suy nghĩ, mà suy nghĩ là phần lớn nhất.


Phần 11 — Mười sai lầm cần tránh khi xây ứng dụng đầu tiên với AI

  1. Bắt đầu bằng code thay vì bản yêu cầu. Tác nhân sẽ vui vẻ dựng một ứng dụng sai rất nhanh.
  2. Xây tất cả cùng một lúc. “Làm cả ứng dụng” cho bạn một ứng dụng hỏng nhẹ ở mọi chỗ. Hãy xây theo lát cắt dọc.
  3. Bỏ qua AGENTS.md. Không có nó, mỗi phiên đều bắt đầu từ số không, và tác nhân quyết lại những thứ bạn đã quyết.
  4. Để tác nhân tự do thêm phụ thuộc. Mỗi gói là code bạn chưa đọc, là dung lượng ứng dụng tăng thêm và một bản cập nhật phải quản sau này. Hãy bắt nó hỏi.
  5. Mã hóa cứng màu sắc và kích thước. Khi đó đổi thiết kế nghĩa là sửa 140 tệp. Luôn dùng token.
  6. Tin vào “xong”. Tác nhân báo thành công một cách lạc quan. Hãy chạy thử trên điện thoại thật, ở chế độ máy bay, chế độ tối, với cỡ chữ lớn nhất.
  7. Đặt bí mật trong ứng dụng. Bất cứ thứ gì trong gói ứng dụng đều có thể bị trích xuất. API key tốn tiền hoặc cấp quyền quản trị phải nằm trên máy chủ.
  8. Nhãn quyền riêng tư nghe hợp lý nhưng không chính xác. Nếu dữ liệu rời khỏi thiết bị và nằm trên máy chủ, nó là dữ liệu được thu thập, kể cả khi chỉ người dùng thấy.
  9. Quên xóa tài khoản. Apple yêu cầu có trong ứng dụng nếu bạn cho phép đăng ký; Google Play còn yêu cầu thêm một liên kết web.
  10. Hứa hẹn về lộ trình phát triển. Ảnh chụp màn hình và mô tả cho thấy ứng dụng làm được gì hôm nay. Ý tưởng khái niệm thuộc về trang web của bạn, ghi rõ là khái niệm.

Và thêm một điều nữa cho chắc: không đọc diff. Vibe coding nghĩa là không viết từng dòng. Không có nghĩa là không đọc những dòng được phát hành. Những con số bảo mật trong Hiện trạng AI 2026 bài tổng hợp của tôi chính là lý do.


Phần 12 — Bạn có nên dùng đúng bộ công cụ này? Sáu tình huống

1. “Tôi chưa từng viết một dòng code nào.”

Expo, ứng dụng OpenCode trên máy tính, M3.1 ở gói Go của M Plan, và gói miễn phí của Figma với frame xuất ra. Giữ ứng dụng đầu tiên của bạn ở một vòng lặp cốt lõi, như lưu-và-tìm của Stash. Để lệnh shell ở hỏi, commit sau mỗi bước chạy được, và dùng /undo mà không cần áy náy.

2. “Tôi chỉ quan tâm iPhone, và tôi muốn nó thuần native.”

SwiftUI trong Xcode 27, với OpenCode chạy bên trong Xcode qua ACP hoặc trong terminal với các công cụ MCP của Xcode. M3.1 để lập kế hoạch và xây dựng. Bạn sẽ được tiếp cận sớm nhất các framework mới nhất của Apple và mức tích hợp chặt nhất với hệ thống.

3. “Tôi đã trả tiền cho Claude hoặc ChatGPT rồi.”

Dùng thứ bạn đang có, và công bằng về chỗ nó mạnh. Claude Code, Codex và Cursor hiện nằm trong danh sách được Figma duyệt cho MCP server từ xa, gồm cả công cụ ghi lên canvas mà OpenCode chưa dùng được. OpenCode có thể đăng nhập trực tiếp bằng ChatGPT Plus hoặc Pro. Thêm M3.1 qua OpenCode cho những việc mà cửa sổ ngữ cảnh một triệu token và đầu vào video của nó tỏa sáng.

4. “Tôi muốn khởi đầu rẻ nhất có thể.”

MiniMax M3 thay vì M3.1 (qua OpenCode Go với $10 một tháng, hoặc trả theo mức dùng), Figma Starter, bản build miễn phí của Expo và gói miễn phí của Firebase. Khoản $99 thành viên Apple là chi phí duy nhất bạn không thể tránh với ứng dụng iPhone. Nếu chưa sẵn sàng, hãy xây bản web trước.

5. “Ứng dụng của tôi xử lý dữ liệu nhạy cảm.”

Thiết kế cho chế độ khách trước, giữ SDK bên thứ ba ở mức tối thiểu, và cũng nghĩ xem code của bạn đi đâu. Prompt và mã nguồn của bạn được gửi đến nhà cung cấp model. Với dự án rất nhạy cảm, model cục bộ qua Ollama giữ mọi thứ trên máy của bạn ( bài viết về OpenCode v2 trình bày cách thiết lập đó), và nhờ chuyên gia quyền riêng tư xem lại ứng dụng trước khi phát hành.

6. “Tôi xây ứng dụng cho khách hàng.”

Gói Figma Organization với Code Connect, chính sách của OpenCode để kiểm soát nhà cung cấp mà mỗi dự án khách hàng được dùng, một gói M Plan đủ chỗ cho nhiều tác nhân chạy song song, và bản build EAS trả phí. Đặt quy tắc thiết kế của từng khách hàng vào một skill được commit hoặc AGENTS.md để mọi phiên và mọi đồng đội bắt đầu từ cùng bộ quy tắc.


Phần 13 — Những gì cần theo dõi trong vài tháng tới

  • M3.1 bản đầy đủ của MiniMax. Liệu nó có được phát hành, có giá theo token, benchmark công bố và trọng số mở như M3 hay không, và liệu bản Flash preview có đến OpenRouter, OpenCode Go hay Ollama Cloud không.
  • OpenCode trong danh sách cho phép của Figma. Pull request của OpenCode cho một client Figma đã đăng ký đang chờ Figma. Khi được hợp nhất, các công cụ ghi của server từ xa sẽ mở cho người dùng OpenCode.
  • Giá công cụ ghi lên canvas của Figma. Figma nói các tính năng đó miễn phí trong giai đoạn beta và sau này sẽ tính theo mức dùng.
  • Figma Code Layers, được giới thiệu tại Config, hứa hẹn thiết kế và code trên cùng một canvas.
  • OpenCode v2 trưởng thành hơn: chia sẻ phiên quay trở lại, plugin bắt kịp, và các bản 2.0.x dần ổn định.
  • Hạn chót SDK tiếp theo của Apple. Nếu Apple theo đúng lệ thường, các bản build bằng Xcode 27 sẽ trở thành bắt buộc khi tải lên vào khoảng mùa xuân tới.
  • Bản thân Stash. Ba hướng thiết kế thử nghiệm trên trang web của ứng dụng (ghim đúng vị trí, Quick Move, hộp và nhãn) cho thấy các ý tưởng đang đi về đâu.

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

Tôi có thể xây một ứng dụng từ đầu mà không có kinh nghiệm lập trình không?

Có. Năm 2026, một tác nhân coding AI như OpenCode, đi cùng một model mạnh như MiniMax M3.1, sẽ viết code trong khi bạn đưa ra quyết định: ứng dụng làm gì, trông thế nào, lưu dữ liệu gì và bạn kiểm thử ra sao. Bạn vẫn cần học cách đọc bản kế hoạch, xem lại diff, kiểm thử trên thiết bị thật và xử lý App Store Connect. Hãy bắt đầu với một ứng dụng chỉ có một vòng lặp cốt lõi và không có thanh toán.

Mất bao lâu để xây một ứng dụng bằng AI?

Điều đó phụ thuộc vào phạm vi hơn là công cụ. Một ứng dụng nhỏ với một vòng lặp cốt lõi, như ứng dụng lưu-và-tìm, chỉ là chuyện vài tuần buổi tối chứ không phải vài tháng, nếu bạn xây theo lát cắt dọc và kiểm thử trong lúc làm. Việc phát hành thêm vài ngày cho TestFlight và giấy tờ App Store; Apple nói 90% hồ sơ được duyệt trong chưa đến 24 giờ.

MiniMax M3.1 là gì?

MiniMax M3.1 là thế hệ tiếp theo trong dòng model M3 của MiniMax. Tính đến tháng 10 năm 2026, phiên bản duy nhất bạn dùng được là MiniMax-M3.1-Flash-Preview, ra mắt ngày 27 tháng 9 năm 2026: một model coding đa phương thức với cửa sổ ngữ cảnh 1.000.000 token, đầu vào văn bản, hình ảnh và video, luôn bật suy luận và năm mức effort từ thấp đến tối đa. Nó chỉ có qua gói đăng ký M Plan của MiniMax và ứng dụng MiniMax Code.

MiniMax M3.1 có dùng được qua API không?

Chỉ với key đăng ký. M3.1-Flash-Preview chạy trên các endpoint tương thích OpenAI và tương thích Anthropic của MiniMax, nhưng chỉ với key đăng ký M Plan. Chưa có giá trả theo mức dùng, chưa có trọng số mở và chưa có trên OpenRouter, Ollama Cloud hay OpenCode Go. MiniMax M3 vẫn có sẵn theo hình thức trả theo mức dùng với $0,30 mỗi triệu token đầu vào và $1,20 mỗi triệu token đầu ra.

Làm sao dùng MiniMax M3.1 trong OpenCode?

Cài OpenCode v2, khởi chạy nó trong thư mục dự án của bạn, chạy /connect, chọn “MiniMax Token Plan (minimax.io)” và dán key đăng ký M Plan của bạn. Sau đó chạy /models và chọn MiniMax-M3.1-Flash-Preview. Không cần tệp cấu hình, dù một opencode.jsonc cho phép bạn đặt mức effort cho từng tác nhân và thêm quyền.

MCP server của Figma có hoạt động với OpenCode không?

Một phần. MCP server từ xa của Figma chỉ chấp nhận các client được duyệt trong giai đoạn beta, và OpenCode chưa có trong danh sách, nên kết nối thất bại với HTTP 403. MCP server trên máy tính của Figma thì hoạt động: bật nó trong Dev Mode của ứng dụng Figma trên máy tính và trỏ OpenCode tới http://127.0.0.1:3845/mcp. Nó cần ghế Dev hoặc Full trên gói trả phí và chủ yếu cung cấp công cụ chỉ đọc.

Tôi có cần Mac để xây ứng dụng iPhone không?

Không nhất thiết. Phát triển native với Xcode cần Mac, và Xcode 27 yêu cầu Apple silicon. Với Expo, EAS build ứng dụng iOS của bạn trên đám mây và EAS Submit tải nó lên App Store Connect từ macOS, Windows hoặc Linux. Bạn vẫn nên có iPhone để kiểm thử, và cần tư cách thành viên Apple Developer Program để phát hành.

Phát hành một ứng dụng trên App Store tốn bao nhiêu?

Apple Developer Program tốn $99 một năm, hoặc mức tương đương ở địa phương (€99 ở Đức). Apple không thu phí theo ứng dụng hay theo lần gửi. Chi phí xây dựng phụ thuộc vào công cụ; phương án tiết kiệm trong hướng dẫn này khoảng $363 cho năm đầu, gồm đăng ký MiniMax M Plan, với các gói miễn phí cho OpenCode, Figma, Expo và Firebase.

Việc duyệt App Store mất bao lâu?

Apple nói trung bình 90% hồ sơ được duyệt trong chưa đến 24 giờ. Lý do phổ biến nhất khiến ứng dụng bị kẹt là nguyên tắc 2.1, Tính đầy đủ của ứng dụng: crash, nội dung giữ chỗ, thông tin duyệt thiếu và liên kết hỏng, kể cả URL hỗ trợ và chính sách quyền riêng tư.

Tôi nên dùng SwiftUI, React Native (Expo) hay Flutter?

Dùng SwiftUI với Xcode 27 nếu ứng dụng của bạn chỉ cho Apple và bạn muốn các tính năng nền tảng mới nhất. Dùng Expo (React Native) nếu bạn muốn một codebase cho iPhone và Android và bạn làm một mình: SDK 56 hỗ trợ iOS 16.4 trở lên, có widget iOS ổn định và có thể build trên đám mây. Dùng Flutter nếu bạn hoặc nhóm của bạn đã biết Dart.

Sự khác biệt giữa MiniMax M3 và M3.1 là gì?

MiniMax M3, phát hành ngày 1 tháng 6 năm 2026, đã phổ thông với trọng số mở, benchmark công bố và giá theo token, và chạy trên nhiều nhà cung cấp. M3.1-Flash-Preview, phát hành ngày 27 tháng 9 năm 2026, là bản preview chỉ dùng qua đăng ký, chưa có trọng số, giá hay benchmark, luôn bật suy luận và có năm mức effort. Cả hai đều có cửa sổ ngữ cảnh 1 triệu token và nhận văn bản, hình ảnh và video.

Stash là gì?

Stash — Find It Fast là ứng dụng iPhone và iPad miễn phí của Graham Miranda UG, ghi nhớ nơi bạn để đồ. Bạn chụp ảnh chỗ để, đặt tên và phòng cho món đồ, rồi sau này tìm bằng tên, phòng, ghi chú hoặc ghi chú giọng nói đã chuyển thành văn bản. Ứng dụng cũng có nhắc nhở cho đồ theo mùa, widget, dùng ngoại tuyến và đồng bộ giữa iPhone và iPad. Nó ra mắt trên App Store ngày 23 tháng 9 năm 2026.

Stash có thu thập dữ liệu của tôi không?

Stash không có quảng cáo, không theo dõi bằng công cụ phân tích và không bán dữ liệu. Ở chế độ khách, không có tài khoản, phòng, món đồ, ảnh và ghi chú giọng nói của bạn ở lại trên thiết bị. Nếu bạn tạo tài khoản, chúng được đồng bộ qua Google Firebase để dùng được trên iPhone và iPad, tách biệt với người dùng khác, và bạn có thể xóa tài khoản cùng dữ liệu trong Cài đặt hoặc qua một biểu mẫu web.


Điểm mấu chốt

Xây một ứng dụng từ đầu vào năm 2026 không còn là chuyện bạn có viết được code hay không. Một tác nhân như OpenCode v2, chạy một model như MiniMax M3.1, sẽ viết nhiều code trong một buổi chiều hơn những gì bạn đọc được trong một tuần. Việc thật sự đã chuyển ra các rìa: quyết định ứng dụng là gì, thiết kế nó đủ kỹ để tác nhân không thể hiểu sai, kiểm thử nó như một người hoài nghi, và làm phần giấy tờ kém hào nhoáng để biến một thư mục dự án thành thứ người lạ có thể tải về.

Bộ công cụ trong hướng dẫn này là bộ tôi sẽ giới thiệu hôm nay. Figma cho những quyết định bạn nhìn thấy được. OpenCode v2 vì nó mở, có thể viết script, cẩn thận với quyền và không trung thành với một model nào. MiniMax M3.1 vì cửa sổ ngữ cảnh một triệu token và đầu vào video hợp với việc xây ứng dụng một cách bất thường, miễn là bạn đối xử với một bản preview đúng như một bản preview. Và phần “linh tinh” (Firebase, TestFlight, nhãn quyền riêng tư, trang đích, trang pháp lý) vì đó là thứ người dùng thực sự gặp.

Stash là hình ảnh của điều đó khi được phát hành: một lời hứa nhỏ, được giữ trọn vẹn. Tải Stash trên App Store, hoặc thử bản demo trên trình duyệt trước. Rồi đi xây ứng dụng của bạn.


Bạn đang xây ứng dụng đầu tiên bằng AI? Tôi muốn nghe bạn chọn framework nào, bạn có kết nối được MCP server của Figma với tác nhân không, và MiniMax M3.1 đang đối xử với bạn thế nào. Chào đón các chỉnh sửa và bằng chứng ngược lại; bài viết này sẽ được cập nhật khi tình hình thay đổi.

Tiết lộ: Stash là ứng dụng của chính tôi, do công ty tôi là Graham Miranda UG phát hành. Nó miễn phí, không quảng cáo và không có mua hàng trong ứng dụng. Không có liên kết tiếp thị liên kết nào trong bài này, và không công ty nào được nhắc đến đã tài trợ hay duyệt bài trước khi xuất bản.

Cập nhật lần cuối: 5 tháng 10 năm 2026.

Thêm tín hiệu của bạn.

Địa chỉ email của bạn sẽ không được công khai. Các trường bắt buộc được đánh dấu *

viTiếng Việt