Chuyển tới nội dung
CHủ NHậT, THáNG 11 8, 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 /

Cách dùng OpenCode từ prompt đầu tiên đến App Store: Hướng dẫn 2026 về gói lập trình, Ollama, máy chủ MCP và skills

ĐỌC HƯỚNG DẪN
Tác nhân AIGM / 903

Cách dùng OpenCode từ prompt đầu tiên đến App Store: Hướng dẫn 2026 về gói lập trình, Ollama, máy chủ MCP và skills

Cách dùng OpenCode từ cài đặt đến khi App Store duyệt: so sánh các gói lập trình, Ollama trên máy và trên cloud, MCP, skill và luật Apple 2026.

How to use OpenCode from first prompt to the App Store: coding plans, Ollama, MCP servers, skills and the 2026 App Store rules on a tech.grahammiranda.com title card

Đâu đó giữa prompt đầu tiên và email đầu tiên từ App Review, một tác nhân lập trình AI thôi là đồ chơi và trở thành công cụ bạn dùng để xuất xưởng. Hướng dẫn này nói về cách dùng OpenCode để đi từ cái này sang cái kia: cài nó trên một chiếc Mac sạch, chọn xem trả tiền cho mô hình nào để lo phần suy nghĩ, chạy mô hình trên máy của bạn với Ollama, cho tác nhân đôi tay thật sự bằng máy chủ MCP, dạy nó thói quen của bạn bằng skills, rồi dẫn một ứng dụng iPhone qua TestFlight và App Review mà không mất cả tuần cho giấy tờ.

Tôi không xuất thân từ lập trình. Tôi điều hành một công ty IT nhỏ ở Đức, và tôi xây dựng phần mềm bằng tác nhân AI. Hai trong số các kết quả đã lên App Store mùa thu này: Stash, ứng dụng nhớ nơi bạn đặt đồ, và PingAtlas, ứng dụng đo độ trễ mạng từ chính thiết bị của bạn. Chúng xuất hiện trong hướng dẫn này ở những chỗ thật sự hữu ích làm ví dụ, và không ở đâu khác.

Mọi thứ dưới đây được đối chiếu với tài liệu chính thức, ghi chú phát hành, trang giá và chính App Store vào ngày 7 November 2026. Lập trình AI thay đổi nhanh: OpenCode phát hành ít nhất mười bản version 2 chỉ trong khoảng 20 đến 30 tháng 10, Ollama và MiniMax đều đã xây lại gói của mình từ cuối tháng 8, và Apple viết lại một phần hướng dẫn đánh giá ít nhất hai lần trong năm nay. Những con số dễ đổi được đánh dấu ngay tại chỗ xuất hiện. Hãy kiểm tra trước khi mua bất cứ thứ gì.

Tiết lộ: Stash và PingAtlas là ứng dụng của chính tôi, do công ty tôi là Graham Miranda UG (haftungsbeschränkt) phát hành. Cả hai đều miễn phí và không có quảng cáo. Bài viết này có một liên kết tiếp thị: liên kết Z.ai GLM Coding Plan ở Phần 2 giảm cho bạn 10% và trả cho tôi hoa hồng nếu bạn đăng ký. Đội ngũ OpenCode tại Anomaly, Ollama, Apple, Expo, Z.ai và mọi công ty khác được nhắc ở đây không tài trợ, không duyệt và không phê duyệt bài viết này.


Tóm tắt — Toàn bộ hành trình trong mười gạch đầu dòng

  • OpenCode là tác nhân lập trình miễn phí, mã nguồn mở (MIT) hoạt động với gần như mọi mô hình: đăng ký đám mây, API trả theo token hoặc mô hình chạy trên Mac của bạn. Nó đang ở phiên bản 2.2.6 (6 November 2026), với ứng dụng terminal, ứng dụng desktop, giao diện web và điện thoại, cùng chế độ ACP chạy bên trong Xcode 27.
  • Bạn trả tiền cho mô hình, không phải cho tác nhân. “Gói lập trình” là đăng ký hàng tháng cố định cho thời gian dùng mô hình. Với phần lớn người mới bắt đầu, OpenCode Go ($10 một tháng) cộng Ollama (miễn phí cục bộ, $20 một tháng cho tín dụng đám mây Pro) là thiết lập tôi khuyên dùng: rẻ, không phụ thuộc mô hình, mặc định không lưu trữ với hầu hết mô hình, và không có vùng xám nào trong điều khoản dịch vụ của ai.
  • Các lựa chọn thay thế là có thật. ChatGPT Plus và Pro, GitHub Copilot và Z.ai GLM Coding Plan đều cắm vào OpenCode qua các provider tích hợp. Đăng ký Claude giờ lại hoạt động qua provider Claude Agent mới của OpenCode 2.2.3, nhưng Anthropic chưa công khai ủng hộ con đường đó, nên hãy đọc Phần 2 trước khi dựa vào nó.
  • Ollama là một engine cho cả mô hình cục bộ và đám mây. ollama launch opencode nối chúng lại với nhau, mô hình cục bộ cần cửa sổ ngữ cảnh ít nhất 64K, và một chiếc Mac 32 GB có thể chạy các mô hình lập trình vững như qwen3.8:27b (tải xuống 18 GB).
  • Máy chủ MCP cho tác nhân đôi tay. Với công việc làm ứng dụng, danh sách ngắn là cầu MCP của chính Xcode (xcrun mcpbridge), XcodeBuildMCP, máy chủ MCP của Expo, Context7 để tra tài liệu hiện hành và Sentry để theo dõi lỗi crash. Chỉ thêm thứ bạn dùng: mỗi máy chủ đều tốn ngữ cảnh.
  • Skills trao cho tác nhân cẩm nang của bạn. Một skill là một thư mục có SKILL.md tệp. OpenCode đọc chúng từ .opencode/skills và cả từ .claude/skills và .agents/skills, nên các skill viết cho tác nhân khác cũng dùng được. Expo phát hành 23 skill chính thức, và App Store Connect CLI (asc) đi kèm hơn hai mươi cái.
  • Để tác nhân làm giấy tờ, không bao giờ để nó bấm gửi. Việc asc CLI và các skill của nó có thể tải bản dựng lên, quản lý TestFlight, đồng bộ metadata và ảnh chụp màn hình, và kiểm tra trạng thái đánh giá. Chặn lệnh submit trong phần quyền của OpenCode và tự bạn bấm nút.
  • Quy tắc 2026 của Apple có ý nghĩa với ứng dụng do AI xây dựng. Ứng dụng nhái trong các danh mục bão hòa giờ bị từ chối (hướng dẫn 4.3(b), tháng 6), tính năng ẩn hoặc nằm im bị cấm (mục mới 2.5.19, tháng 10), bản dựng cần Xcode 26 trở lên, và từ tháng 4 năm 2027 ứng dụng xây bằng SDK iOS 27.1 cần ảnh chụp màn hình iPhone Duo.
  • Chi phí năm đầu: $99 nếu bạn chạy mọi thứ cục bộ và chỉ trả cho Apple, khoảng $419 với thiết lập tôi khuyên dùng (Apple + OpenCode Go + Ollama Pro tính theo năm), và khoảng $1,779 cho một thiết lập mạnh. Mọi giá đều chưa gồm VAT.
  • Quy tắc quan trọng nhất: “xong” là một lời khẳng định, không phải sự thật. Hãy chạy nó trên iPhone thật, ở chế độ máy bay, ở chế độ tối, ở cỡ chữ lớn nhất, bật VoiceOver. Rồi hãy tin.

Toàn cảnh hành trình

Giai đoạn Bạn làm gì OpenCode làm gì Công cụ
1. Thiết lập Cài đặt, chọn một gói coding, kết nối model Chưa có gì OpenCode, OpenCode Go, Ollama
2. Dạy Viết AGENTS.md, thêm skill, kết nối máy chủ MCP Đọc chúng mỗi phiên AGENTS.md, skill, MCP
3. Lập kế hoạch Viết bản mô tả, tranh luận với kế hoạch Biến bản mô tả thành kế hoạch và lộ trình plan agent, /goal
4. Xây dựng Xem lại từng diff, kiểm thử trên thiết bị Viết mã theo từng phần nhỏ, build, chạy kiểm thử, chụp ảnh màn hình build agent, Xcode MCP, XcodeBuildMCP hoặc Expo MCP
5. Beta Mời người kiểm thử, đọc phản hồi Lưu trữ, tải lên, quản lý nhóm TestFlight Xcode, asc hoặc EAS
6. Thủ tục giấy tờ Trả lời trung thực các câu hỏi về pháp lý và quyền riêng tư Soạn metadata, kiểm tra luồng dữ liệu, chỉnh kích thước ảnh chụp màn hình asc kỹ năng
7. Gửi duyệt Bạn nhấn “Gửi để xem xét” Kiểm tra trạng thái xét duyệt, phân loại các ca bị từ chối App Store Connect
8. Ra mắt Phản hồi người dùng, lên kế hoạch cập nhật Bản địa hóa, viết ghi chú phát hành, phân loại sự cố treo ứng dụng asc, Sentry, trang web của bạn
Cách dùng OpenCode từ prompt đầu tiên đến App Store: quy trình tám giai đoạn từ cài đặt và gói lập trình đến kỹ năng, máy chủ MCP, build, TestFlight, App Store Connect và ra mắt
Toàn bộ quy trình gói trên một trang. Tác nhân đảm nhận phần lớn việc gõ. Bạn chịu trách nhiệm bản mô tả, việc xem lại từng diff và nút “Gửi”.

Mục lục


Phần 1 — OpenCode vào tháng 11 năm 2026 là gì, và vì sao tôi đề xuất nó

OpenCode là một tác nhân coding AI mã nguồn mở. Bạn khởi chạy nó trong một 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: nó đọc các tệp của bạn, lập kế hoạch, sửa mã, chạy lệnh, đọc các lỗi và tiếp tục cho đến khi xong việc hoặc khi cần đến bạn. Nó được phát hành theo giấy phép MIT bởi Anomaly, nhóm đứng sau dự án, và nó không quan tâm bạn đưa cho nó model nào.

Trang chủ của dự án tuyên bố hơn 220.000 sao GitHub, 1.089 người đóng góp và 22 triệu nhà phát triển hàng tháng. Đó là những con số của chính dự án và chúng thay đổi mỗi tuần, nhưng chúng giải thích vì sao OpenCode đã trở thành lựa chọn thay thế không gắn với mô hình nào được biết đến nhiều nhất so với các tác nhân của chính những nhà sản xuất mô hình, Claude Code và Codex.

Nơi nó chạy

OpenCode không còn là một ứng dụng duy nhất nữa. Kể từ lần viết lại 2.0, một dịch vụ nền chạy trên máy của bạn và mọi giao diện đều giao tiếp với nó, nên phiên bạn bắt đầu ở một nơi sẽ xuất hiện ở những nơi còn lại.

Giao diện Nó là gì Phù hợp cho
Terminal (TUI) Ứng dụng terminal toàn màn hình cổ điển Công việc nhanh bằng bàn phím, phiên SSH, máy chủ
Ứng dụng máy tính để bàn Một ứng dụng Electron cho macOS (Apple silicon và Intel), Windows (x64 và ARM64) và Linux (.deb, .rpm, AppImage), với tab, diff, terminal và trình duyệt tích hợp Những người không sống trong terminal
Web và điện thoại opencode pair in ra một liên kết dùng một lần (hết hạn sau năm phút) để mở các phiên cục bộ của bạn trong trình duyệt; 2.2.6 bổ sung thanh soạn thảo thân thiện với điện thoại và máy tính bảng Theo dõi một tác vụ dài từ ghế sofa
Bên trong Xcode 27 OpenCode hỗ trợ Agent Client Protocol, nên opencode acp có thể được thêm làm tác nhân trong phần cài đặt Intelligence của Xcode Các nhà phát triển Swift gốc muốn ở lại trong Xcode
SDK và script opencode run cho các tác vụ đơn lẻ, cùng một SDK JavaScript Tự động hoá và CI

Những gì đã thay đổi kể từ 2.0

OpenCode 2.0 là một lần xây dựng lại từ đầu: theo thông báo của nhóm vào tháng Bảy, runtime chuyển từ Bun sang Node.js để giảm mức dùng bộ nhớ, ứng dụng máy tính để bàn chuyển từ Tauri sang Electron, API được thiết kế lại, và OpenCode bắt đầu chạy như một dịch vụ theo mặc định. Phiên bản 2.0.0 phát hành ngày 11 tháng 9 năm 2026. Các bản phát hành từ đó chủ yếu bổ sung những tính năng quan trọng cho các dự án thật, dài hơi:

Phiên bản Ngày Những gì nó bổ sung
2.2.0 27 thg 10 Plugin máy tính để bàn thử nghiệm, ứng dụng máy tính để bàn được làm mới, API hình ảnh và quyết định dành cho plugin
2.2.1 29 thg 10 Chế độ mục tiêu (/goal <objective>, có tạm dừng, tiếp tục và xoá), chọn tham gia prompt theo lịch, tạo hình ảnh
2.2.2 29 thg 10 Tạo hình ảnh bật mặc định khi nhà cung cấp được kết nối hỗ trợ; bộ chọn worktree từ nhánh Git
2.2.3 30 thg 10 Việc Claude Agent nhà cung cấp (nói thêm ở Phần 2)
2.2.4 30 thg 10 Thiết lập Claude Agent có hướng dẫn, các lịch chạy dưới opencode serve, terminal duy trì trên máy tính để bàn
2.2.5 30 thg 10 Phím tắt worktree và chế độ shell, bộ đệm nén dựa trên tỷ lệ phần trăm
2.2.6 6 thg 11 opencode run --worktree cho các lần chạy bằng script, thanh soạn thảo di động, kết nối MCP dùng chung

Nguồn: changelog của OpenCode, kiểm tra ngày 7 tháng 11 năm 2026. Khi bạn đọc bài này, hãy chờ một phiên bản mới hơn.

Vì sao đây là tác nhân tôi khuyên dùng

  1. Nó không trung thành với mô hình nào. OpenCode kết nối với các đăng ký, API trả theo token và mô hình cục bộ qua một /connect lệnh. Khi một mô hình tốt hơn ra mắt tháng sau, bạn đổi một dòng trong tệp cấu hình, chứ không phải cả quy trình làm việc của mình.
  2. Quyền của nó hoạt động như một tường lửa. Mọi hành động (đọc, sửa, chạy lệnh shell, tải một skill, gọi công cụ MCP) đều đi qua một danh sách có thứ tự gồm các allow, hỏi và deny quy tắc mà kết quả khớp cuối cùng thắng. “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.
  3. Nó nói được định dạng của mọi người. Nó đọc AGENTS.md (và quay về CLAUDE.md), tải skill từ .claude/skills và .agents/skills cũng như các thư mục riêng của nó, và kết nối với bất kỳ máy chủ MCP nào. Hệ sinh thái do các tác nhân khác xây dựng cũng hoạt động ở đây.
  4. Nó có mặt ở nơi bạn làm việc. Terminal trên máy chủ, ứng dụng desktop trên Mac, trình duyệt trên điện thoại, hoặc bên trong Xcode.
  5. Nó không tốn gì. OpenCode miễn phí, và nó còn có một bộ model miễn phí luân phiên mà bạn dùng được mà không cần tài khoản.

Khi nào nó không phải lựa chọn tốt nhất

Nói thẳng trước: OpenCode không đứng đầu các bảng xếp hạng coding, vì nó không phải một model. Những harness đứng đầu là các cặp của nhà cung cấp: Claude Code với model tốt nhất của Anthropic, Codex với model của OpenAI. Chúng được tinh chỉnh cùng nhau và đều xuất sắc. Tôi đã so sánh hai mươi tám harness trong bài so sánh harness coding AI, và nếu bạn đã trả tiền cho một trong những đăng ký đó và thấy hài lòng, không có gì trong hướng dẫn này buộc bạn phải chuyển.

Cũng có những chỗ chưa mượt. OpenCode phát hành gần như hằng ngày, nên mọi thứ thay đổi ngay dưới chân bạn. Tài liệu phiên bản 1 cũ vẫn còn ở docs.opencode.ai (kèm một banner trỏ đến v2), và nhiều hướng dẫn của bên thứ ba, kể cả trang OpenCode của chính Ollama, vẫn hiển thị địa chỉ cài đặt v1. Một số tính năng mới nhất được đánh dấu là thử nghiệm. Và các trình quản lý gói của Windows không được hỗ trợ cho công cụ dòng lệnh v2; người dùng Windows dùng ứng dụng desktop hoặc tệp zip độc lập.


Phần 2 — Gói coding, giải thích rõ (và hai gói tôi đề xuất)

OpenCode miễn phí. Model làm việc suy nghĩ thì không. Có ba cách trả tiền cho nó, và phần lớn sự nhầm lẫn về “gói coding AI” đến từ việc trộn lẫn chúng.

  1. Tự chạy nó. Các model trọng số mở trên Mac của bạn thông qua Ollama. Bạn trả bằng phần cứng và sự kiên nhẫn, không phải tiền. Mã của bạn không bao giờ rời khỏi máy.
  2. Đăng ký một gói coding. Một khoản phí cố định hằng tháng mua hạn mức sử dụng, thường tính theo cửa sổ năm giờ và theo tuần. Đây là nơi các gói đăng ký OpenCode Go, Ollama Pro, GLM Coding Plan, ChatGPT và Claude nằm.
  3. Trả theo token. Mang theo API key từ bất kỳ nhà cung cấp nào và trả đúng những gì bạn dùng. Lý tưởng cho thỉnh thoảng gặp bài toán khó; nguy hiểm cho một phiên gỡ lỗi dài mà không có cảnh báo ngân sách.

Các gói coding hoạt động trong OpenCode (tháng 11 năm 2026)

Gói Giá hằng tháng (USD) Bạn nhận được gì Cách nó kết nối với OpenCode
Model miễn phí của OpenCode $0 Một bộ model miễn phí luân phiên trong thời gian giới hạn Tích hợp sẵn, không cần tài khoản
Ollama, cục bộ $0 Bất kỳ model trọng số mở nào Mac của bạn chứa được Tự động phát hiện, hoặc ollama launch opencode
OpenCode Go ⭐ $10 · Go Plus $40 · Go Teams $20 mỗi thành viên 32 model mở, gồm GLM-5.3, GLM-5.3-Flash, Kimi K3 và K3.1 Pro, MiniMax M3.1 Flash, DeepSeek V4.1 Flash và Qwen3.8 Max /connect → OpenCode Go → dán key của bạn
Ollama Pro / Max ⭐ $20 ($200 một năm) · Max $100 $60 (Pro) hoặc $300 (Max) tín dụng model đám mây mỗi tháng, cộng thêm dùng cục bộ không giới hạn Giống Ollama cục bộ; model đám mây xuất hiện cùng với model cục bộ
GLM Coding Plan (Z.ai) Lite $18 · Pro $80 · Max $168 (giảm 20% khi trả theo quý, giảm 30% khi trả theo năm) GLM-5.3 và GLM-5.3-Flash, cả hai đều có cửa sổ ngữ cảnh 1M token /connect → nhà cung cấp Z.AI Coding Plan
MiniMax M Plan Go $22 · Explore $55 · Build $132 (miễn phí hai tháng khi thanh toán theo năm) MiniMax M3.1 Flash, cộng với các model hình ảnh, âm thanh và (từ gói Explore) video Nhà cung cấp gói coding của MiniMax, với key M Plan
ChatGPT Plus $20 · Pro từ $100 Dòng GPT-6 của OpenAI thông qua gói ChatGPT của bạn /connect → OpenAI → “Đăng nhập bằng ChatGPT”
GitHub Copilot Pro $10 · Pro+ $39 · Max $100 Nhóm model của Copilot, tính theo GitHub AI Credits /connect → GitHub Copilot → đăng nhập bằng thiết bị
Claude Pro $20 · Max từ $100 Mô hình của Anthropic qua Claude Code /connect → Claude Agent (OpenCode 2.2.3+, đã cài Claude Code); xem lưu ý bên dưới
Trả theo token Bạn dùng gì API của bất kỳ nhà cung cấp nào, kể cả cổng trả theo mức dùng của chính OpenCode /connect → nhà cung cấp → khóa API

Giá niêm yết ngày 7 tháng 11 năm 2026, chưa gồm VAT. ⭐ = những gì hướng dẫn này khuyến nghị. Giá, hạn mức và danh sách mô hình thay đổi liên tục, nên hãy kiểm tra trang của từng nhà cung cấp trước khi bạn đăng ký. Giá GLM lấy từ bản chụp ngày 24 tháng 9 và tiêu đề “các gói từ $18” của Z.ai; gói thành viên của Kimi (từ $19) bị bỏ ngoài vì tôi không thể xác nhận một đường chính thức nào của OpenCode dành cho nó.

So sánh các gói lập trình AI, tháng 11 năm 2026: giá khởi điểm hằng tháng từ miễn phí đến $168 cho OpenCode Go, Ollama, GitHub Copilot, GLM Coding Plan, ChatGPT, Claude và MiniMax, trong đó OpenCode Go và Ollama được làm nổi bật
Thang giá. Hai gói được tô sáng là những gói tôi sẽ bắt đầu; mọi thứ còn lại là lý do tốt để giữ lại gói đăng ký bạn đã có.

Cách các giới hạn thực sự hoạt động

Giá tiêu đề nói với bạn rất ít. Hạn mức mới là thứ bạn sống cùng.

  • OpenCode Go dành cho mỗi mô hình một hạn mức đô la hàng tháng riêng, và bạn có thể tiêu 20% trong bất kỳ khung năm giờ nào và 50% trong bất kỳ tuần nào. Ví dụ, ở gói $10, GLM-5.3-Flash được $60 một tháng, DeepSeek V4.1 Flash $100 và Kimi K3 $15, nên các mô hình rẻ, hiệu quả kéo dài xa hơn nhiều so với các mô hình hạng nặng. Khi chạm giới hạn, các yêu cầu bị chặn trừ khi bạn đã bật Extra Usage, vốn quay về tín dụng trả theo mức dùng. Các mô hình miễn phí vẫn hoạt động dù thế nào.
  • Ollama chuyển sang tín dụng: Pro gồm $60 mức dùng đám mây mỗi tháng và Max $300, cả hai đều tính theo giá mỗi token, và tín dụng chưa dùng không được cộng dồn. Pro cho phép ba yêu cầu cùng lúc, Max mười. Giá giảm ngoài khung 12:00 đến 18:00 UTC các ngày trong tuần và cả cuối tuần, rất hợp với buổi tối châu Âu. Mô hình cục bộ không giới hạn ở mọi gói, kể cả gói miễn phí.
  • Gói GLM Coding dùng tín dụng theo khung năm giờ và khung tuần, và dùng ngoài giờ cao điểm (ngoài 14:00 đến 18:00 giờ Trung Quốc các ngày trong tuần) tốn nửa số tín dụng.
  • ChatGPT và Copilot đo qua hệ thống riêng của họ: ChatGPT bằng ước tính số tin nhắn trong năm giờ cho mỗi mô hình, Copilot bằng AI Credits. Bên trong OpenCode, đăng nhập ChatGPT không hiển thị chi phí mỗi yêu cầu vì mức dùng tính vào gói của bạn, và OpenCode giới hạn ngữ cảnh đầu vào cho chúng theo mặc định (500.000 token trên các mô hình GPT mới nhất).

Quyền riêng tư và lưu giữ dữ liệu

Prompt của bạn chứa mã của bạn. Chúng đi đâu rất quan trọng, đặc biệt với công việc cho khách hàng theo các điều khoản bảo vệ dữ liệu của EU.

  • OpenCode Go chặn các điểm cuối trả phí dùng dữ liệu của bạn để huấn luyện theo mặc định. Hầu hết mô hình (GLM, Kimi, MiniMax, Qwen, MiMo và nhiều mô hình khác) được phục vụ với chế độ không lưu giữ; một số ít (Grok, các mô hình GPT Luna, Claude Haiku và hai mô hình khuyến mại miễn phí) giữ nhật ký 30 ngày. Các mô hình “Contributor” giảm giá có huấn luyện trên prompt của bạn và phải được bật có chủ đích. Khu vực mặc định là châu Âu và Hoa Kỳ, và các mô hình của DeepSeek yêu cầu bạn chọn tham gia định tuyến toàn cầu, với thỏa thuận không lưu giữ có hiệu lực đến 30 tháng 11 năm 2026.
  • Ollama Cloud nói thẳng: “Dữ liệu prompt hoặc phản hồi không bao giờ bị ghi nhật ký hay dùng để huấn luyện.” Các mô hình chạy chủ yếu ở Hoa Kỳ, với công suất dự phòng có thể được định tuyến sang châu Âu.
  • Các mô hình miễn phí của OpenCode là một thỏa thuận khác: tài liệu lưu ý rằng một số mô hình miễn phí có thể dùng dữ liệu của bạn để cải thiện mô hình. Ổn cho thử nghiệm, không ổn cho mã khách hàng. Đặt OPENCODE_DISABLE_FREE_MODELS=1 để ẩn chúng.
  • Mô hình cục bộ không bao giờ rời khỏi máy của bạn. Với bất cứ thứ gì thuộc một thỏa thuận xử lý dữ liệu nghiêm ngặt, đó vẫn là câu trả lời sạch sẽ nhất.

Câu hỏi về Claude

Các gói đăng ký Claude đã có một năm gập ghềnh trong các công cụ bên thứ ba. Vào tháng Giêng, Anthropic siết chặt kiểm tra khiến đăng nhập Claude Pro và Max ngừng hoạt động trong các harness như OpenCode, và vào tháng Ba OpenCode đã gỡ tùy chọn đăng nhập theo yêu cầu của Anthropic. Ngày 30 tháng 10, OpenCode 2.2.3 đưa đăng ký trở lại bằng một con đường khác: một Claude Agent nhà cung cấp tích hợp sẵn điều khiển Claude Code cài cục bộ của bạn (phiên bản 2.1.248 trở lên) qua Agent SDK chính thức của Anthropic, sau khi bạn đăng nhập bằng claude auth login.

Những sự thật bạn cần biết trước khi dùng nó:

  • OpenCode không đọc thông tin đăng nhập đã lưu của Claude Code; chương trình claude thật sự gửi các yêu cầu.
  • Các công cụ, cài đặt, CLAUDE.md tệp, hook, máy chủ MCP và skill của chính Claude Code đều bị tắt. Thay vào đó Claude làm việc qua các công cụ và lời nhắc quyền của OpenCode.
  • Tài liệu Agent SDK của Anthropic nói rằng nhà phát triển bên thứ ba không được cung cấp đăng nhập claude.ai hay giới hạn đăng ký trong sản phẩm của họ trừ khi Anthropic đã phê duyệt. Tại thời điểm viết bài, Anthropic chưa bình luận công khai về nhà cung cấp của OpenCode, và không ai có thể nói chắc với bạn liệu nó có đặt tài khoản của bạn vào rủi ro hay không.

Lời khuyên của tôi: nếu bạn đã trả tiền cho Claude và muốn thử, hãy dùng nó cho dự án cá nhân và theo dõi một tuyên bố chính thức. Với công việc kinh doanh, hãy dùng khóa API Anthropic, con đường duy nhất mà tài liệu của Anthropic nêu tên.

Tôi khuyến nghị gì, và tại sao

Bắt đầu với OpenCode Go và Ollama. Đây là lý do:

  • Giá. $10 một tháng mua quyền truy cập 32 mô hình mở mạnh. Thêm Ollama Pro ở mức $20 nếu bạn muốn thêm dư địa đám mây; bỏ qua nếu máy Mac của bạn chạy mô hình cục bộ tốt.
  • Lựa chọn không bị khóa. Go và Ollama Cloud cung cấp cùng các dòng trọng số mở (GLM, Kimi, MiniMax, DeepSeek và nhiều hơn nữa), nên bạn có thể so sánh các mô hình trên dự án của chính mình thay vì tin vào bảng xếp hạng.
  • Quyền riêng tư theo mặc định. Không lưu giữ với hầu hết mô hình Go, chính sách không ghi nhật ký tại Ollama, và tùy chọn chạy hoàn toàn cục bộ cho công việc nhạy cảm.
  • Không có vùng xám. Cả hai đều được thiết kế chính xác cho mục đích này, bên trong OpenCode.
  • Phương án dự phòng cục bộ thì miễn phí. Khi cửa sổ năm giờ cạn khô lúc 11 giờ đêm, một mô hình cục bộ trên Ollama giúp bạn tiếp tục xử lý những việc nhỏ.

Khi nào nên chọn thứ khác. Nếu bạn đã trả tiền cho ChatGPT Plus hoặc Copilot, hãy kết nối nó trước; bạn không tốn thêm gì. Nếu GLM sẽ là công cụ hằng ngày của bạn, hạn mức của GLM Coding Plan’ có thể hợp lý hơn giới hạn theo từng mô hình của Go’, và bạn có thể được giảm 10% gói GLM Coding Plan qua liên kết tiếp thị của tôi (liên kết tiếp thị, xem phần công bố ở đầu bài). Khóa của Coding Plan và khóa API Z.ai tiêu chuẩn không hoán đổi được cho nhau, nên hãy chọn nhà cung cấp Coding Plan trong /connect. Và nếu công việc của bạn cần tới đỉnh cao nhất của bảng xếp hạng, một mô hình tiên phong dùng khóa API cho những tác vụ khó nhất là khoản tiền đáng chi.


Phần 3 — Ollama: một engine cho cả model cục bộ và model trên cloud

Ollama chạy các mô hình trọng số mở trên máy của bạn và phục vụ chúng qua một API cục bộ đơn giản. Từ năm ngoái, nó cũng chạy những mô hình lớn hơn trên đám mây riêng, qua cùng ứng dụng và cùng API, nên với OpenCode một mô hình đám mây trông giống hệt mô hình cục bộ. Đó chính là toàn bộ sức hấp dẫn: một engine, một thiết lập, và việc chuyển đổi giữa “riêng tư và miễn phí” với “lớn và nhanh” chỉ là một cái tên mô hình.

Cài đặt Ollama (từng bước)

  1. Tải xuống từ ollama.com/download. Trên Mac, mở tệp tải xuống và kéo Ollama vào Applications. Trên Windows, chạy trình cài đặt. Trên Linux, lệnh một dòng chính thức là:
    curl -fsSL https://ollama.com/install.sh | sh
  2. Khởi động nó. Mở ứng dụng, hoặc gõ ollama trong terminal. Từ phiên bản 0.40.15 (đầu tháng 11), chạy ollama mà không có đối số sẽ mở trình khởi chạy chào mừng.
  3. Đăng nhập nếu bạn muốn dùng mô hình đám mây. Ứng dụng sẽ nhắc bạn trong quá trình thiết lập. Mô hình cục bộ hoạt động không cần tài khoản; mức sử dụng đám mây của bạn ở ollama.com/settings/usage.
  4. Tải một mô hình để kiểm tra mọi thứ hoạt động:
    ollama pull qwen3.8:27b
    ollama run qwen3.8:27b "Say hello in Swift"

Kết nối Ollama với OpenCode

Bạn có ba lựa chọn, từ dễ nhất đến linh hoạt nhất.

Cách 1: để OpenCode tự tìm. OpenCode v2 kiểm tra địa chỉ Ollama cục bộ mặc định khi khởi động và thêm mọi mô hình có thể viết văn bản vào /models. Không tài khoản, không cấu hình. Các mô hình chỉ dùng để nhúng bị bỏ qua.

Cách 2: để Ollama thiết lập.

ollama launch opencode            # configure OpenCode for Ollama and start it
ollama launch opencode --config   # configure only, don't start a session

ollama launch đã hoạt động với OpenCode v2 từ Ollama 0.40.12 (27 tháng 10). Nó không ghi đè ~/.config/opencode/opencode.json, nên các thiết lập riêng của bạn vẫn được áp dụng. Một điểm lạ: những mô hình bạn chỉ định nghĩa trong cấu hình của OpenCode’ không xuất hiện trong trình chọn khởi chạy của Ollama’.

Cách 3: trỏ OpenCode đến một máy chủ Ollama ở nơi khác. Nếu Ollama chạy trên một chiếc Mac mini trong tủ hay trên máy chủ, hãy thêm nó làm nhà cung cấp kèm địa chỉ của nó. Phần /v1 ở cuối rất quan trọng:

{
  "$schema": "https://opencode.ai/config.json",
  "providers": {
    "ollama": {
      "settings": {
        "baseURL": "https://ollama.example.com/v1",
        "apiKey": "{env:OLLAMA_API_KEY}"   // optional, sent as a bearer token
      }
    }
  }
}

Thiết lập làm hỏng hầu hết các cấu hình cục bộ: độ dài ngữ cảnh

Phần FAQ của Ollama’ cho biết cửa sổ ngữ cảnh mặc định là 4.096 token. Hướng dẫn OpenCode của chính Ollama’ yêu cầu ít nhất 64K, vì prompt hệ thống của tác nhân, các định nghĩa công cụ và nội dung tệp lấp đầy một cửa sổ nhỏ trước khi bất kỳ công việc nào diễn ra. Hãy đặt nó trên máy chủ Ollama, không phải trong OpenCode:

# Nếu bạn tự khởi động máy chủ:
OLLAMA_CONTEXT_LENGTH=65536 ollama serve

# Nếu bạn dùng ứng dụng Mac: đặt biến cho launchd, rồi thoát và mở lại Ollama
launchctl setenv OLLAMA_CONTEXT_LENGTH 65536

Sau đó kiểm tra xem nó đã có hiệu lực chưa: ollama ps hiển thị kích thước ngữ cảnh của từng mô hình đã tải và liệu nó có đang chạy trên GPU hay không. Cửa sổ lớn hơn dùng nhiều bộ nhớ hơn, nên trên một chiếc Mac 32 GB, 64K là mức trần hợp lý cho một mô hình 27 tỷ tham số.

Mô hình cục bộ nào phù hợp với Mac của bạn

Một quy tắc hữu ích từ bảng xếp hạng tháng 11 của BenchLM’: một mô hình cần khoảng kích thước tải xuống cộng thêm 20% cho ngữ cảnh, và một chiếc Mac có thể dành khoảng ba phần tư bộ nhớ hợp nhất cho GPU. Trên thực tế, hãy giữ bản tải xuống dưới khoảng 60% bộ nhớ Mac của bạn.

Bộ nhớ Mac của bạn Mô hình nên thử trước Tải xuống Ngữ cảnh Phù hợp cho
16 GB gemma4:12b hoặc gemma4:e4b 7.7 GB / 6.6 GB 256K / 128K Giải thích, chỉnh sửa nhỏ, thông điệp commit. Quá nhỏ cho các phiên tác nhân dài; hãy dùng mô hình đám mây để xây dựng
24–32 GB qwen3.8:27b (còn có dạng 27b-mlx dành cho Apple silicon) 18 GB 256K Điểm ngọt cục bộ để lập trình cùng tác nhân
24–32 GB qwen3-coder:30b 19 GB 256K Một mô hình lập trình mixture-of-experts chỉ với khoảng 3 tỷ tham số hoạt động, nên nó’ nhanh
24–32 GB gpt-oss:20b 14 GB 128K Mô hình trọng số mở nhỏ hơn của OpenAI’s; để lại nhiều dư địa nhất
64 GB Cùng những mô hình đó ở độ chính xác cao hơn, chẳng hạn như qwen3.8:27b-q8_0 30 GB 256K Câu trả lời tốt hơn, đủ chỗ cho ngữ cảnh lớn
96–128 GB gpt-oss:120b hoặc devstral-2:123b 65 GB / 75 GB 128K / 256K Chất lượng mô hình lớn mà không cần đám mây

Kích thước và cửa sổ ngữ cảnh lấy từ thư viện Ollama ngày 7 tháng 11 năm 2026. Tốc độ phụ thuộc vào băng thông bộ nhớ của chip’s cũng như dung lượng bộ nhớ của nó. Về phần phần cứng, xem hướng dẫn MacBook cho LLM cục bộ.

Ollama Cloud: những mô hình mà Mac của bạn không’ thể chứa nổi

Những mô hình lập trình trọng số mở mạnh nhất hiện nay quá lớn so với một chiếc laptop. Ollama Cloud chạy chúng thay bạn. Trong ứng dụng hoặc CLI, chúng mang thẻ :cloud và không tải gì cả:

ollama run glm-5.3:cloud
ollama run minimax-m3.1-flash:cloud

Phần liên quan đến lập trình trong danh mục đám mây ngày 7 tháng 11:

Mô hình Nhà phát triển Ngữ cảnh Xếp hạng mức sử dụng của Ollama’s Ghi chú
glm-5.3 Z.ai 1M Cao Mô hình hàng đầu của Z.ai’s; mạnh với các tác vụ tác nhân dài
glm-5.3-flash Z.ai 1M Trung bình Đa phương thức gốc, 18 tỷ tham số hoạt động; một mô hình xây dựng mặc định tuyệt vời
kimi-k3.1-pro Moonshot AI 1M Rất cao Mục mới nhất (cập nhật ngày 4 tháng 11), đa phương thức, mô hình mạnh nhất của Moonshot’s
kimi-k2.7-code Moonshot AI 256K Cao Tinh chỉnh cho lập trình và nhẹ hơn về token suy nghĩ
minimax-m3.1-flash MiniMax 976K Trung bình Đọc được hình ảnh; $0,15 đầu vào và $0,60 đầu ra mỗi triệu token
deepseek-v4.1-flash DeepSeek 1M Trung bình Được xây dựng cho tốc độ và thông lượng; đọc được hình ảnh
mistral-large-4 Mistral 1M Cao Phòng thí nghiệm châu Âu, trọng số mở
gemma4 Google 256K Thấp Đủ rẻ cho trợ lý và tác nhân phụ

Xếp hạng đó là cách viết tắt của Ollama để chỉ mức độ nhanh chóng mà một mô hình tiêu tốn tín dụng của bạn. Nếu bạn muốn so sánh những mô hình lớn một cách thấu đáo, hãy xem các bài so sánh của tôi Kimi K3 vs Fable 5.1 vs GLM-5.3 và GLM-5.3-Flash vs MiniMax M3 đi sâu hơn.

Mô hình Ollama cục bộ so với trên đám mây cho OpenCode: mô hình lập trình cục bộ nào phù hợp với máy Mac 16, 32, 64 hay 128 GB, và các mô hình Ollama Cloud cho tác vụ lớn hơn, kèm kích thước ngữ cảnh và đánh giá mức sử dụng
Cục bộ cho quyền riêng tư và những việc nhỏ, cloud cho những việc nặng. Cùng một engine, cùng một API, chỉ khác nhau ở tên mô hình.

Cách định tuyến tôi sẽ áp dụng

Bạn không nhất thiết phải chọn một mô hình. Hãy giao cho mỗi loại việc mô hình rẻ nhất làm tốt việc đó:

  • Lập kế hoạch (những sai lầm đắt giá nhất xảy ra ở đây): mô hình mạnh nhất của bạn.
  • Xây dựng: một mô hình nhanh và có năng lực như GLM-5.3-Flash hoặc MiniMax M3.1 Flash.
  • Tìm kiếm trong codebase, đọc tài liệu, viết kiểm thử và viết thông điệp commit: một mô hình cục bộ. Nó không tốn gì và mã của bạn vẫn nằm yên trên máy.

Phần 4 chỉ rõ cách thiết lập điều này trong cấu hình của OpenCode.

Chế độ chỉ cục bộ cho các dự án nhạy cảm

Nếu một dự án không bao giờ được phép chạm vào mô hình cloud, hãy biến điều đó thành một cài đặt thay vì một lời hứa. Ollama có thể tắt hoàn toàn các tính năng cloud (thêm "disable_ollama_cloud": true để ~/.ollama/server.json, hoặc đặt OLLAMA_NO_CLOUD=1, rồi khởi động lại nó), và các mô hình cloud miễn phí của OpenCode có thể bị ẩn bằng OPENCODE_DISABLE_FREE_MODELS=1. Sau đó chỉ kết nối các nhà cung cấp cục bộ trong dự án đó.

Những lưu ý trung thực về Ollama

  • Mô hình cục bộ chậm hơn và yếu hơn khi dùng công cụ trong các tác vụ dài, nhiều bước so với các mô hình cloud lớn. Chúng tỏa sáng với những công việc khép kín.
  • Cloud vẫn là máy tính của người khác. Chính sách không lưu nhật ký của Ollama là tốt, nhưng mã của bạn vẫn rời khỏi máy, phần lớn là đến Hoa Kỳ.
  • Tín dụng sẽ hết. $60 tín dụng Pro dùng được khá lâu với GLM-5.3-Flash và ít hơn nhiều với một mô hình được xếp hạng “cực cao”.
  • Một câu trả lời chậm không phải lúc nào cũng do mô hình. Mỗi yêu cầu cloud trước tiên đều phải đi một vòng qua Wi-Fi, router của bạn và mạng internet rộng lớn hơn. Nếu phản hồi có vẻ chậm, hãy kiểm tra kết nối trước khi đổ lỗi cho mô hình: ứng dụng PingAtlas của tôi đo thời gian khứ hồi từ iPhone, iPad hoặc Mac của bạn đến các thành phố và đến những dịch vụ như GitHub, và tôi đã giải thích phần còn lại của đường đi trong điều gì xảy ra bên trong router của bạn.

Phần 4 — Cách dùng OpenCode: cài đặt và kết nối model của bạn, từng bước

Đây là cách thiết lập tôi sẽ chỉ cho một người bạn. Mất khoảng hai mươi phút, phần lớn là 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 xây dựng ứng dụng iPhone native. Xcode 27.1 (phát hành ngày 15 tháng 10, với Swift 6.4 và SDK iOS 27.1) cần macOS Tahoe 26.6 trở lên. Nếu bạn xây dựng bằng Expo, dịch vụ cloud của nó có thể tạo bản dựng ứng dụng iOS từ Windows hoặc Linux, nhưng bạn vẫn sẽ muốn có một chiếc iPhone để kiểm thử.
  • Xcode từ Mac App Store, mở một lần để nó cài đặt các thành phần.
  • Git. Nút hoàn tác thực sự của bạn.
  • Node.js, chỉ khi bạn sẽ dùng Expo: SDK 58 cần Node 22.13 trở lên, 24.3 trở lên, hoặc 26 trở lên (các bản phát hành số lẻ như 23 và 25 không được hỗ trợ).
  • Một gói lập trình từ Phần 2, hoặc Ollama từ Phần 3.

Bước 1 — Cài đặt OpenCode

Trên macOS hoặc Linux:

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

Thích dùng ứng dụng? Tải phiên bản máy tính để bàn cho macOS, Windows hoặc Linux từ opencode.ai/download. Ứng dụng terminal và ứng dụng máy tính để bàn dùng chung một dịch vụ nền và các phiên. Trên Windows, hãy dùng ứng dụng máy tính để bàn hoặc tệp zip độc lập; các trình quản lý gói của Windows không được hỗ trợ cho v2.

Hai cái bẫy đáng biết:

  • Các hướng dẫn cũ dùng trình cài đặt cũ. opencode.ai/install (không có /v2/) vẫn xuất hiện trong nhiều hướng dẫn, kể cả một số tài liệu chính thức của đối tác. Hãy dùng /v2/install địa chỉ ở trên.
  • người dùng mise cần mise 2026.10.9 trở lên, nếu không họ sẽ nhận được OpenCode 1.

Bước 2 — Kết nối các mô hình của bạn

Khởi động OpenCode trong thư mục dự án và chạy /connect:

mkdir -p ~/code/my-first-app && cd ~/code/my-first-app
git init
opencode

Sau đó, tùy theo gói bạn trả tiền:

Bạn có Trong /connect, chọn Sau đó
OpenCode Go OpenCode Go Dán khóa API từ OpenCode Console
Ollama Không cần gì; mô hình cục bộ tự xuất hiện Hoặc chạy ollama launch opencode
ChatGPT Plus hoặc Pro OpenAI → Đăng nhập bằng ChatGPT Đăng nhập trong trình duyệt
GitHub Copilot GitHub Copilot Hoàn tất đăng nhập thiết bị
Claude Pro hoặc Max Claude Agent (không phải “Anthropic”, mục đó dành cho khóa API) Chạy claude auth login trong terminal trước; đọc lưu ý ở Phần 2’s
GLM Coding Plan Nhà cung cấp Z.AI Coding Plan Dán khóa Coding Plan của bạn, không phải khóa API thông thường
Khóa API Tên nhà cung cấp Dán khóa

Bước 3 — Chọn mô hình của bạn

Chạy /models và chọn. Các mô hình OpenCode Go có tên opencode-go/<model-id>; mô hình Ollama cục bộ xuất hiện dưới nhà cung cấp Ollama. Sao chép ID chính xác từ /models vào tệp cấu hình của bạn, vì tên và thẻ thay đổi.

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

Cấu hình 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 mỗi tác nhân đến mô hình phù hợp, giữ tác nhân tránh xa mọi thứ không thể hoàn tác, và kết nối các máy chủ MCP của bạn. Lưu nội dung này thành opencode.jsonc ở thư mục gốc dự án, và thay bằng các ID mô hình /models hiển thị cho bạn:

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

  // The model new sessions start with
  "model": "opencode-go/glm-5.3-flash",

  "agents": {
    // Planning: your strongest model, because a bad plan costs the most later
    "plan":    { "model": "opencode-go/glm-5.3" },
    // Building: fast and capable
    "build":   { "model": "opencode-go/glm-5.3-flash" },
    // Read-only exploring: local, free, private
    "explore": { "model": "ollama/qwen3.8:27b" }
  },

  // Rules are checked in order and the LAST match wins
  "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": "xcodebuild -list *",    "effect": "allow" },
    { "action": "shell", "resource": "asc * list *",          "effect": "allow" },
    { "action": "shell", "resource": "asc review status *",   "effect": "allow" },
    { "action": "shell", "resource": "git push *",            "effect": "deny"  },
    { "action": "shell", "resource": "asc publish appstore *","effect": "deny"  },
    { "action": "shell", "resource": "* --submit *",          "effect": "deny"  },
    { "action": "shell", "resource": "* --confirm *",         "effect": "deny"  }
  ],

  "mcp": {
    "servers": {
      // Apple's bridge to the Xcode project you have open (Part 6)
      "xcode": { "type": "local", "command": ["xcrun", "mcpbridge"] },
      // Headless builds, simulator control and screenshots (Part 6)
      "XcodeBuildMCP": { "type": "local", "command": ["npx", "-y", "xcodebuildmcp@latest", "mcp"] },
      // Up-to-date library documentation
      "context7": { "type": "remote", "url": "https://mcp.context7.com/mcp" }
    }
  }
}

Nội dung bạn đang dán, nói theo cách đơn giản:

  • Mọi lệnh shell đều hỏi trước, trừ một vài lệnh chỉ đọc. Các truy vấn chỉ đọc asc (bất cứ thứ gì liệt kê, cộng với trạng thái đánh giá) đều được cho phép, để tác nhân có thể kiểm tra bản dựng và tiến trình đánh giá mà không làm phiền bạn.
  • Một vài thứ bị chặn hoàn toàn: đẩy mã, xuất bản hoặc gửi ứng dụng để đánh giá, và xác nhận các hành động phá hủy trong App Store Connect. Bạn tự làm những việc đó, có chủ đích. Việc tải bản dựng lên TestFlight vẫn được phép (sau khi hỏi), vì nó không gửi gì đi đánh giá.
  • Thiết lập mặc định của OpenCode đã hỏi trước khi đọc .env tệp. Hãy giữ nguyên.
  • Quyền hạn là hàng rào bảo vệ, không phải hộp cát. Một mô hình quyết tâm có thể tìm cách khác để làm việc gì đó. Hãy giữ thông tin đăng nhập sản xuất, khóa ký và khóa Admin App Store Connect của bạn tránh xa chiếc máy nơi các tác nhân chạy không giám sát.

Bước 5 — Viết AGENTS.md trước khi viết mã

OpenCode đọc AGENTS.md ở thư mục gốc dự án vào đầu mỗi phiên, cộng với một tệp cá nhân tại ~/.config/opencode/AGENTS.md nếu bạn tạo nó. Lệnh /init có thể soạn một bản nháp bằng cách quét kho lưu trữ của bạn. Đây là thói quen hiệu quả nhất trong phát triển có AI hỗ trợ, và tôi đã viết về toàn bộ hệ thống trong bài hướng dẫn vibe coding. Với ứng dụng iPhone, tệp này nên chứa các quy tắc của sản phẩm cũng như các lệnh:

# Ghi chú cho tác nhân lập trình

## Ứng dụng này là gì
Một câu. Nếu một thay đổi không phục vụ mục đó, nó không thuộc về đây.

## Điều không thể thương lượng
- Hoạt động ngoại tuyến. Các tính năng mạng suy giảm một cách nhẹ nhàng.
- Không có analytics, quảng cáo hay SDK theo dõi. Hỏi trước khi thêm BẤT KỲ phụ thuộc nào.
- Không có bí mật trong gói ứng dụng. Các khóa tốn tiền nằm trên máy chủ.
- Không có tính năng ẩn, không hoạt động hoặc chỉ dành cho gỡ lỗi trong bản dựng phát hành
  (hướng dẫn App Review 2.5.19). Menu gỡ lỗi bị loại khỏi bản Release khi biên dịch.
- Không bao giờ gửi dữ liệu cá nhân đến dịch vụ AI của bên thứ ba mà không có
  màn hình đồng ý rõ ràng trong ứng dụng (hướng dẫn 5.1.2(i)).
- Trợ năng: Dynamic Type, nhãn VoiceOver, vùng chạm 44 x 44 pt,
  chế độ sáng và tối trên mọi màn hình.
- Mọi chuỗi hiển thị cho người dùng đều được bản địa hóa, kể cả widget,
  thông báo và lời nhắc quyền.

## Lệnh
- Xây dựng và chạy: dùng các công cụ XcodeBuildMCP (build_run_sim), scheme "MyApp"
- Kiểm thử: test_sim
- Không bao giờ chạy asc publish hay bất cứ lệnh nào có --submit.

## Định nghĩa hoàn thành
- Biên dịch không có cảnh báo, kiểm thử đạt
- Đã kiểm tra bằng screenshot + snapshot_ui trên trình giả lập
- Hoạt động ở chế độ máy bay, chế độ tối và cỡ chữ lớn nhất

Bước 6 — Phiên thực tế đầu tiên của bạn

  1. Bắt đầu ở chế độ lập kế hoạch. Chuyển sang tác nhân plan (nó không thể sửa tệp dự án của bạn) và yêu cầu nó phản biện bản tóm tắt của bạn: “Đọc AGENTS.md và BRIEF.md. 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. Sau đó cho tôi biết nên cắt gì.”
  2. Lưu kế hoạch thành một lộ trình. Yêu cầu nó viết ROADMAP.md thành một danh sách kiểm tra gồm các phần nhỏ, trọn vẹn từ đầu đến cuối.
  3. Xây dựng từng phần một với build tác nhân. Mỗi màn hình, mỗi tính năng đều phải hoạt động trọn vẹn từ đầu đến cuối.
  4. Xem lại diff, chạy thử, commit. Mỗi phần đều kết thúc bằng một commit. Nếu một bước đi sai, /undo hãy khôi phục bước cuối của tác nhân từ các ảnh chụp của OpenCode; Git là tấm lưới an toàn lớn hơn.
  5. Bắt đầu một phiên mới cho phần tiếp theo. Một phiên sạch đọc lại AGENTS.md và ROADMAP.md thường thông minh hơn một phiên dài đầy những giả định đã cũ.

Phần 5 — Tác nhân, lệnh, quyền và Goal Mode: biến OpenCode thành của bạn

Khi những điều cơ bản đã chạy được, bốn tính năng biến OpenCode từ một cuộc trò chuyện với terminal thành một xưởng làm việc phù hợp với dự án của bạn.

Các tác nhân tích hợp sẵn

Agent Loại Nó làm gì
build Chính Mặc định. Sửa tệp, chạy lệnh, làm công việc thực sự
plan Chính Khám phá và lập kế hoạch mà không sửa tệp dự án của bạn (nó có thể ghi các tệp kế hoạch của riêng mình)
general Tác nhân phụ Nghiên cứu và các công việc nhiều bước; không thể khởi tạo thêm tác nhân phụ
explore Tác nhân phụ Tìm kiếm và đọc mã hoặc trang web; không thể sửa bất cứ thứ gì

Tác nhân chính là những tác nhân bạn trò chuyện cùng. Tác nhân phụ do một tác nhân chính khởi tạo cho một công việc tập trung, nhờ vậy ngữ cảnh của phiên chính luôn sạch.

Tự viết tác nhân phụ của bạn: một người hoài nghi App Review

Tác nhân tùy chỉnh là các tệp Markdown trong .opencode/agents/ (hoặc ~/.config/opencode/agents/ cho mọi dự án). Phần front matter cấu hình tác nhân và phần thân trở thành hướng dẫn của nó. Tác nhân này đánh giá ứng dụng của bạn theo cách App Review sẽ làm, và không thể thay đổi bất cứ thứ gì trong khi đánh giá:

---
description: Đánh giá ứng dụng và siêu dữ liệu của nó theo Hướng dẫn App Review của Apple trước khi gửi
mode: subagent
model: opencode-go/glm-5.3
permissions:
  - action: edit
    resource: "*"
    effect: deny
  - action: shell
    resource: "*"
    effect: deny
---

Bạn là một chuyên gia App Review hoài nghi. Hãy đánh giá mã hiện tại và các
tệp trong metadata/ rồi liệt kê các vấn đề, nghiêm trọng nhất trước, kèm tệp và dòng:

- Lỗi sập, văn bản giữ chỗ, liên kết hỏng, thiếu tài khoản demo (2.1)
- Bất cứ thứ gì trông như bản sao của một nhóm ứng dụng đã bão hòa (4.3(b))
- Tính năng ẩn, không hoạt động hoặc không được ghi chép, menu gỡ lỗi, cờ tính năng (2.5.19)
- Dữ liệu rời khỏi thiết bị mà không có trong chính sách quyền riêng tư hoặc nhãn quyền riêng tư
- Dữ liệu cá nhân gửi đến bất kỳ dịch vụ AI nào mà không có sự đồng ý rõ ràng (5.1.2(i))
- Tạo tài khoản mà không có chức năng xóa tài khoản trong ứng dụng (5.1.1(v))
- Ảnh chụp màn hình hoặc mô tả hứa hẹn những tính năng mà bản dựng không có

Đừng sửa gì cả. Chỉ báo cáo.

Lưu nó thành .opencode/agents/appstore-reviewer.md, rồi hỏi: “Dùng tác nhân phụ appstore-reviewer để đánh giá mọi thứ kể từ thẻ phát hành gần nhất.”

Lệnh tùy chỉnh cho những công việc bạn lặp đi lặp lại

Lệnh là các mẫu prompt bạn chạy bằng dấu gạch chéo. Đặt chúng trong .opencode/commands/; $ARGUMENTS sẽ được thay bằng bất cứ thứ gì bạn gõ sau lệnh, và ` !lệnh ` chèn kết quả của một lệnh shell trước khi prompt được gửi đi. Lệnh này soạn ghi chú phát hành App Store:

---
description: Soạn ghi chú "What's New" của App Store từ các commit kể từ thẻ gần nhất
agent: build
---

Đây là các commit kể từ bản phát hành trước:

!`git log $(git describe --tags --abbrev=0)..HEAD --oneline`

Hãy viết ghi chú "What's New" cho phiên bản $ARGUMENTS bằng tiếng Anh đơn giản, thân thiện,
dưới 400 ký tự, chỉ gồm những thay đổi dành cho người dùng. Lưu chúng vào
metadata/en-US/release_notes.txt và cho tôi xem văn bản.

Lưu nó thành .opencode/commands/whats-new.md và chạy nó bằng /whats-new 1.2.0. Một cảnh báo trong tài liệu OpenCode đáng để nhắc lại: những ! khối này chạy bên ngoài hệ thống phân quyền của tác nhân, nên chỉ đặt vào đó những lệnh bạn tin tưởng.

Cẩm nang phân quyền cho dự án ứng dụng

Cấu hình ở Phần 4 là một khởi đầu tốt. Vài quy tắc nữa đáng để biết:

  • Quy tắc theo từng tác nhân nằm dưới agents.<id>.permissions và được thêm sau các quy tắc chung, nhờ đó bạn có thể, ví dụ, chỉ cho phép build tác nhân chạy xcodebuild.
  • Công cụ MCP cũng là hành động, có tên <server>_<tool>. Một quy tắc như { "action": "XcodeBuildMCP_*", "resource": "*", "effect": "ask" } khiến mọi lệnh gọi XcodeBuildMCP phải hỏi trước.
  • Có thể giới hạn skill với skill action: allow quảng bá và tải skill tự do, hỏi quảng bá nhưng hỏi trước khi tải, deny ẩn hoàn toàn.
  • Khi nhiều tài nguyên được kiểm tra cùng lúc, bất kỳ deny thắng, sau đó bất kỳ hỏi.

Chế độ Goal, worktree và lịch chạy

Ba tính năng mới hơn thay đổi cảm nhận về những tác vụ dài:

  • Chế độ mục tiêu (2.2.1): /goal Khiến mọi màn hình vượt qua bài kiểm tra VoiceOver và sửa những gì không đạt giữ phiên làm việc hướng tới mục tiêu cho đến khi nó được xem xét, với tạm dừng, tiếp tục và xóa. Hoàn hảo cho những tác vụ lớn và nhàm chán: rà soát trợ năng, bản địa hóa, độ phủ kiểm thử.
  • Worktree: bắt đầu một phiên trong worktree Git riêng từ màn hình tạo phiên mới (hoặc ⌘⌥O trong ứng dụng desktop), để một thử nghiệm không thể chạm vào nhánh chính của bạn. Các lần chạy có script dùng opencode run --worktree=<name> từ 2.2.6. Hãy vứt bỏ worktree nếu thử nghiệm thất bại.
  • Prompt theo lịch (tùy chọn tham gia, thử nghiệm): /schedule chạy một prompt theo lịch trong khi opencode serve đang chạy, chẳng hạn như “chạy kiểm thử và tóm tắt lỗi” hằng đêm.

Phần 6 — Máy chủ MCP: trao tay chân cho tác nhân

Tự thân, một tác nhân lập trình chỉ có thể đọc tệp và chạy lệnh shell. MCP, Model Context Protocol, là cách chuẩn để cấp thêm cho nó: một dự án Xcode đang mở, một trình mô phỏng mà nó có thể chạm và chụp màn hình, báo cáo lỗi của bạn, tài liệu hiện hành, dịch vụ build của bạn. Mỗi máy chủ MCP phơi ra một bộ công cụ, và tác nhân tự quyết định khi nào gọi chúng.

Có một cái giá, và tài liệu OpenCode nói thẳng điều đó: “Công cụ MCP tiêu tốn ngữ cảnh của mô hình, nên chỉ thêm những máy chủ bạn cần.” Mỗi máy chủ được kết nối đều thêm mô tả công cụ vào mọi yêu cầu. Mười máy chủ bạn hiếm khi dùng khiến mọi câu trả lời chậm hơn và kém tập trung hơn.

Danh sách rút gọn cho nhà phát triển ứng dụng

Máy chủ Nó cấp cho tác nhân những gì Thêm nó vào OpenCode Điều cần biết
Xcode (Apple) Dự án Xcode đang mở của bạn: build, kiểm thử và hơn thế, thông qua chính Xcode opencode mcp add xcode -- xcrun mcpbridge Trong Xcode → Settings → Intelligence, đặt Cho phép tác nhân bên ngoài sử dụng công cụ Xcode để Luôn hoặc Khi Xcode đang mở. Mở dự án trong Xcode trước khi bạn prompt; Xcode hiển thị khi một tác nhân kết nối
XcodeBuildMCP Build không giao diện, chạy trên trình mô phỏng và thiết bị, chụp màn hình, chạm và vuốt, ảnh chụp trạng thái trợ năng, kiểm thử, gỡ lỗi LLDB opencode mcp add XcodeBuildMCP -- npx -y xcodebuildmcp@latest mcp Mã nguồn mở (MIT), được Sentry duy trì kể từ khi họ mua lại dự án vào tháng Hai. Cần macOS 14.5+, Xcode 16+ và Node 18+. Mặc định chỉ bật các công cụ giả lập
Expo Bản dựng EAS, quy trình làm việc và bài nộp, tài liệu Expo, trình giả lập đám mây, dữ liệu sự cố và phản hồi từ TestFlight và các cửa hàng opencode mcp add expo --url https://mcp.expo.dev/mcp, sau đó opencode mcp auth expo Cần tài khoản Expo và SDK mới nhất. Một số công cụ cần gói Expo trả phí. Công cụ giả lập cục bộ cần npx expo install expo-mcp --dev and SDK 54+
Context7 Tài liệu hiện hành, theo đúng phiên bản, cho các thư viện và framework opencode mcp add context7 --url https://mcp.context7.com/mcp Ngăn mô hình bịa ra những API đã thay đổi vào tháng trước
Sentry Sự cố và lỗi thật của bạn opencode mcp add sentry --url https://mcp.sentry.dev/mcp, sau đó opencode mcp auth sentry Sign-in by OAuth
Playwright Một trình duyệt thật để tác nhân điều khiển opencode mcp add playwright -- npx @playwright/mcp@latest Cho phiên bản web của ứng dụng và trang đích của bạn
Firebase Dự án Firebase, quy tắc bảo mật và cấu hình của bạn opencode mcp add firebase -- npx -y firebase-tools@latest mcp Hỏi trước khi thay đổi bất cứ thứ gì trong dự án của bạn

Kiểm tra những gì đang kết nối bằng opencode mcp list, và bật hoặc tắt máy chủ cho một phiên bằng /mcps.

Nếu bạn thiết kế bằng Figma, máy chủ MCP của nó cũng có thể cấp frame và biến cho tác nhân. Tôi đã trình bày điểm lưu ý riêng của OpenCode (máy chủ từ xa so với máy chủ trên desktop) trong hướng dẫn của tôi về xây dựng ứng dụng từ đầu bằng AI.

Xcode’s MCP bridge vs XcodeBuildMCP

Hai công cụ này trùng chức năng, và chúng phối hợp tốt với nhau:

  • Xcode’s own server (xcrun mcpbridge) hoạt động qua ứng dụng Xcode mà bạn đang mở. Nó là của Apple, hiểu dự án của bạn theo đúng cách Xcode hiểu, và cần Xcode đang chạy.
  • XcodeBuildMCP wraps Apple’s command-line tools (xcodebuild, simctl, devicectl), nên nó chạy không cần giao diện. Điểm mạnh thật sự của nó là vòng kiểm tra: build_run_sim để dựng và khởi chạy, screenshot to look, snapshot_ui để đọc cây trợ năng, tap và type_text để dùng ứng dụng, và test_sim để chạy các bài kiểm tra. Chạy xcodebuildmcp init một lần trong dự án của bạn để cài hai kỹ năng đồng hành của nó.

Trong tệp cấu hình

Các máy chủ tương tự có thể nằm trong opencode.jsonc (Phần 4 có ví dụ đầy đủ), cách này tốt hơn cho nhóm vì phần thiết lập đi theo kho lưu trữ:

"mcp": {
  "servers": {
    "expo":   { "type": "remote", "url": "https://mcp.expo.dev/mcp" },
    "sentry": { "type": "remote", "url": "https://mcp.sentry.dev/mcp" },
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp",
      "headers": { "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}" }
    },
    "playwright": { "type": "local", "command": ["npx", "@playwright/mcp@latest"], "disabled": true }
  }
}

Hai chi tiết từ tài liệu MCP của OpenCode: bí mật được nhập dưới dạng {env:NAME} (một $NAME thường không được mở rộng), và "disabled": true giữ một máy chủ đã cấu hình mà không kết nối.

Máy chủ MCP để phát triển ứng dụng iOS với OpenCode: cầu nối MCP của Xcode, XcodeBuildMCP, Expo, Context7, Sentry, Playwright và Firebase xoay quanh OpenCode, cùng các công cụ dòng lệnh gh, asc và eas như những lựa chọn nhẹ hơn
Bảy máy chủ xứng đáng có chỗ trong một dự án ứng dụng, và ba công cụ dòng lệnh thường làm được việc đó với ít ngữ cảnh hơn.

Khi công cụ dòng lệnh vượt qua máy chủ MCP

Nguyên tắc của tôi: nếu đã có một công cụ dòng lệnh tốt, hãy thử nó với một skill trước khi thêm máy chủ. Tác nhân vốn đã biết cách chạy lệnh, CLI không tốn ngữ cảnh cho đến khi được dùng, và đầu ra của nó có thể được lọc trước khi đến mô hình. Với công việc làm ứng dụng, ba CLI bao quát được nhiều việc:

  • gh cho GitHub: issue, pull request, bản phát hành.
  • asc cho App Store Connect: bản dựng, TestFlight, metadata, ảnh chụp màn hình, trạng thái xét duyệt (Phần 9).
  • eas cho dịch vụ dựng và gửi của Expo.

An toàn MCP trong bốn quy tắc

  1. Cài máy chủ từ chính nhà sản xuất hoặc từ những dự án bạn có thể đọc. Máy chủ là mã đang chạy trên máy của bạn với quyền của bạn.
  2. Coi đầu ra của công cụ là không đáng tin. Một trang web, một bình luận issue hay một báo cáo lỗi có thể chứa chỉ dẫn nhắm vào tác nhân của bạn. Giữ các thao tác rủi ro ở hỏi.
  3. Kiểm soát công cụ theo tên. Mỗi công cụ MCP là một hành động quyền có tên <server>_<tool>, nên bạn có thể cho phép những công cụ chỉ đọc và bắt phần còn lại phải hỏi.
  4. Gỡ bỏ những gì bạn không dùng. Nó tốn ngữ cảnh, và bớt được một thứ có thể hỏng.

Phần 7 — Skill: viết sổ tay của bạn một lần

AGENTS.md cho tác nhân biết dự án của bạn là gì. Skills dạy nó cách bạn làm những việc cụ thể: phát hành bản dựng, viết migration, chuẩn bị ảnh chụp màn hình, kiểm tra quyền riêng tư. Một skill là một thư mục chứa một SKILL.md tệp có mô tả ngắn ở trên cùng và hướng dẫn bên dưới, cùng mọi script hay tệp tham chiếu mà nó cần. Định dạng này là một chuẩn mở được OpenCode, Claude Code, Codex và những công cụ khác dùng chung, nên một skill viết cho tác nhân này thường chạy được ở các tác nhân khác.

OpenCode dùng một skill như thế nào

  1. Ở mỗi bước, OpenCode cho mô hình thấy danh sách các skill nó có thể dùng: chỉ ID, tên và mô tả của từng skill. Bản thân phần hướng dẫn không được nạp, nên một trăm skill gần như không tốn gì.
  2. Khi một tác vụ khớp, mô hình gọi skill công cụ với ID của skill, và OpenCode kiểm tra quyền của bạn.
  3. OpenCode thêm phần hướng dẫn vào cuộc hội thoại, kèm đường dẫn thư mục của skill và danh sách tối đa mười tệp hỗ trợ của nó.
  4. Tệp hỗ trợ chỉ được nạp khi phần hướng dẫn yêu cầu. Một danh sách kiểm tra dài hay một script nằm trên đĩa cho đến khi cần.

Bạn cũng có thể tự nạp một skill bằng cách nhắc đến nó trong prompt: @app-store-release.

OpenCode tìm ở đâu

Phạm vi Thư mục
Dự án của bạn .opencode/skills/
Dự án của bạn (chia sẻ với các tác nhân khác) .claude/skills/ và .agents/skills/
Mọi dự án trên máy của bạn ~/.config/opencode/skills/
Mọi dự án (chia sẻ) ~/.claude/skills/ và ~/.agents/skills/
Bất kỳ nơi nào khác Đường dẫn hoặc danh mục HTTP được liệt kê trong một kỹ năng mảng trong opencode.jsonc

ID của một skill đến từ tên thư mục của nó, không phải từ đặt tên trong phần front matter, và nó phân biệt chữ hoa chữ thường: .opencode/skills/app-store-release/SKILL.md có ID app-store-release. Khi hai nguồn định nghĩa cùng một ID, nguồn xuất hiện sau trong thứ tự này sẽ thắng: tích hợp sẵn, .claude/skills, .agents/skills, thư mục toàn cục của bạn, thư mục dự án của bạn .opencode/skills, rồi đến các mục cấu hình rõ ràng. Một skill không có mô tả sẽ hoàn toàn không được giới thiệu cho mô hình.

Viết skill đầu tiên của bạn: danh sách kiểm tra phát hành App Store

Tạo .opencode/skills/app-store-release/SKILL.md:

---
name: App Store release
description: Chuẩn bị một bản phát hành iOS. Tăng số phiên bản và số build, chạy danh sách kiểm tra phát hành, lưu trữ, tải lên TestFlight bằng asc và soạn ghi chú What's New. Dùng khi được yêu cầu "ship", "release" hoặc "send to TestFlight".
---

# App Store release

1. Kiểm tra `git status`. Nếu cây làm việc không sạch, hãy dừng lại và báo điều đó.
2. Tăng phiên bản marketing và số build (hỏi là phiên bản nào nếu chưa được đưa ra).
3. Làm hết references/release-checklist.md. Mọi mục phải đạt.
4. Lưu trữ và xuất IPA bằng scripts/archive.sh.
5. Tải lên: `asc builds upload --app "$ASC_APP_ID" --ipa build/MyApp.ipa`
6. Soạn ghi chú What's New từ các commit kể từ thẻ gần nhất và lưu chúng
   vào metadata/en-US/release_notes.txt.
7. TUYỆT ĐỐI KHÔNG gửi để xem xét. Báo rằng build đã được tải lên, rồi dừng lại.

Đặt danh sách kiểm tra vào references/release-checklist.md và script lưu trữ vào scripts/archive.sh bên cạnh nó. Lần tới khi bạn nói “ship 1.2.0 lên TestFlight”, tác nhân tìm skill theo mô tả của nó và làm theo các bước của bạn thay vì tự ứng biến.

Kỹ năng tác nhân của OpenCode hoạt động thế nào: một thư mục kỹ năng với SKILL.md, tài liệu tham chiếu và script; OpenCode liệt kê mô tả kỹ năng, mô hình tải một kỹ năng bằng công cụ skill, và các tệp hỗ trợ chỉ được đọc khi cần
Một skill chỉ tốn một dòng ngữ cảnh cho đến khi cần dùng. Đó là lý do bạn có thể cài hàng chục cái.

Những skill đáng cài cho công việc làm ứng dụng

Bộ skill Bao gồm những gì Cài đặt
Skill Expo (chính thức) 23 skill: 16 cho Expo SDK (Router, giao diện gốc, @expo/ui, hệ thống thiết kế, nâng cấp, mô-đun gốc và hơn thế nữa) và 7 cho các dịch vụ của Expo, bao gồm eas-app-stores để build và gửi lên TestFlight, App Store và Google Play npx skills add expo/skills
Skill CLI của App Store Connect Hơn hai mươi asc skill: quy trình phát hành, điều phối TestFlight, đồng bộ metadata với kiểm tra giới hạn ký tự, dịch danh sách, quy trình ảnh chụp màn hình, thiết lập ký, tình trạng gửi, phân loại sự cố, kiểm tra ASO asc install-skills, hoặc npx skills add rorkai/app-store-connect-cli-skills
Skill XcodeBuildMCP Hai skill dạy tác nhân các công cụ và CLI của XcodeBuildMCP xcodebuildmcp init
skills.sh Danh mục mở các skill cộng đồng của Vercel; nó liệt kê OpenCode trong số các tác nhân được hỗ trợ npx skills add <owner/repo>

Nếu OpenCode không hiển thị một skill bạn đã cài, hãy kiểm tra nơi trình cài đặt đã đặt nó so với các thư mục ở trên, hoặc sao chép thư mục của skill vào .opencode/skills/.

An toàn của skill

Một skill là hướng dẫn, cộng thêm — thường là — các script mà tác nhân sẽ chạy. Hãy đọc một skill của bên thứ ba trước khi cài đặt, giống như bạn vẫn đọc một shell script tải từ internet. Ưu tiên skill từ những người làm ra công cụ (Expo cho Expo, những asc người bảo trì cho asc), giữ các skill chưa rõ ở trạng thái bật hỏi với một quy tắc cấp quyền, và hãy nhớ rằng deny ẩn hoàn toàn một skill khỏi mô hình.


Phần 8 — Xây dựng ứng dụng: từ ý tưởng đến bản build bạn tin cậy

Công cụ đã sẵn sàng. Giờ đến phần quyết định xem có ai tải kết quả về hay không.

Chọn một ý tưởng mà App Review sẽ cho qua

AI đã khiến việc xây dựng một ứng dụng trở nên rẻ, và Apple đã nhận ra. Ngày 9 tháng 6, họ viết lại hướng dẫn 4.3(b), quy tắc chống spam của nó: những ứng dụng về cơ bản giống với thứ vốn đã có đầy trên cửa hàng giờ sẽ bị từ chối, và Apple nêu tên ứng dụng hẹn hò, đèn pin, hình nền, hẹn giờ và bói toán là những danh mục mà bạn cần một trải nghiệm khác biệt hoặc tốt hơn một cách có ý nghĩa. Những ứng dụng mới lạ làm qua loa có thể bị gỡ, các ứng dụng hiện có trong những danh mục đó có thể bị rút nếu chúng không được cải thiện hoặc không thu hút người dùng, và việc gửi lặp lại kiểu này có thể khiến bạn mất tư cách thành viên nhà phát triển.

Vậy nên trước prompt đầu tiên, hãy làm một phép thử: bạn có thể nói trong một câu điều ứng dụng của bạn làm được mà những kết quả hàng đầu cho từ khóa tìm kiếm chính của nó không làm được không? Nếu bạn không làm được, tác nhân sẽ xây dựng nó thật đẹp và App Review sẽ gửi trả lại.

Nhỏ và cụ thể thắng lớn và chung chung. Hai ứng dụng của tôi đều cố ý thu hẹp phạm vi:

  • Stash ghi nhớ nơi bạn đặt đồ: chụp ảnh vị trí, chọn phòng, lưu, rồi tìm theo tên, phòng hoặc một ghi chú thoại đã chuyển thành văn bản.
  • PingAtlas đo thời gian khứ hồi mạng từ chính iPhone, iPad hoặc Mac của bạn đến 202 thành phố, 278 điểm đến công cộng, 109 trò chơi và 32 dịch vụ trực tuyến, không cần tài khoản hay dịch vụ đo từ xa.

Mỗi ứng dụng một việc. Đó là điều khiến chúng có thể được xây dựng bởi một người cùng một tác nhân, và có thể giải thích trong một câu trên trang App Store.

Chọn bộ công nghệ của bạn

SwiftUI + Xcode 27.1 Expo SDK 58 (React Native 0.88)
Chạy trên iPhone, iPad, Mac, Apple Watch, Vision Pro iPhone, iPad, Android và web từ một cơ sở mã nguồn
Ngôn ngữ Swift 6.4 TypeScript
Cần Mac không? Có Không dùng để build hay gửi (đám mây của Expo làm việc đó); có, cho các công cụ giả lập iOS cục bộ
Công cụ cho tác nhân Cầu MCP của Xcode, XcodeBuildMCP, OpenCode bên trong Xcode qua ACP Máy chủ MCP của Expo, 23 skill chính thức, một @expo/agent-cli và máy đọc được expo command:ps đầu ra cho tác nhân
Mới trong mùa thu này iOS 27.1 SDK, trình giả lập iPhone Duo (có một số giới hạn về tiện ích mở rộng) Được xây dựng dựa trên iOS 27 SDK; ứng dụng chuyển sang vòng đời scene của UIKit, sẵn sàng cho iPhone Duo; hỗ trợ App Intents ở mức alpha; macOS không được hỗ trợ trong SDK 58
Phù hợp nhất Ứng dụng chỉ dành cho Apple muốn có các tính năng nền tảng mới nhất Một người phát hành cho iPhone và Android, kèm bản web

Nếu bạn thích phát hành bản web trước (tôi thì có), đầu ra web của Expo cho phép bạn đưa một bản demo chạy được đến với mọi người trước khi có bản trên App Store. Website của Stash cũng làm điều tương tự với một bản demo trên trình duyệt xây quanh một ngôi nhà mẫu: mọi người có thể thử ý tưởng trước khi cài đặt bất cứ thứ gì.

Vòng lặp xây dựng hiệu quả

Tác nhân viết nhanh. Điều giữ cho kết quả đáng tin là vòng lặp bao quanh nó:

  1. Bản tóm tắt. Một trang BRIEF.md: lời hứa trong một câu, ba câu chuyện người dùng, danh sách các màn hình.
  2. Kế hoạch. Việc plan tác nhân biến nó thành ROADMAP.md: những lát cắt dọc nhỏ, mỗi lát là một tính năng chạy được từ đầu đến cuối.
  3. Xây một lát cắt. Việc build tác nhân triển khai nó và viết các bài kiểm thử.
  4. Kiểm chứng như một người dùng. Với XcodeBuildMCP, tác nhân có thể build và khởi chạy ứng dụng trong trình giả lập, chụp màn hình, đọc cây trợ năng bằng snapshot_ui, chạm qua toàn bộ luồng và chạy các bài kiểm thử. Với Expo, các công cụ MCP cục bộ làm điều tương tự cho trình giả lập. Hãy yêu cầu nó so sánh những gì nó thấy với những gì bạn đã đề ra.
  5. Đánh giá như App Review. Chạy appstore-reviewer tác nhân con ở Phần 5.
  6. Tự đọc diff. Từng dòng sắp được phát hành.
  7. Commit, tích ô, mở một phiên mới.

Với những lượt việc máy móc lớn (thêm nhãn trợ năng ở khắp nơi, bản địa hóa mọi chuỗi, nâng độ phủ kiểm thử), hãy dùng chế độ goal: /goal Bản địa hóa mọi chuỗi hiển thị với người dùng sang tiếng Đức, gồm cả widget, thông báo và lời nhắc xin quyền.

Ba mẫu prompt đáng để tùy chỉnh:

Một phần việc: Triển khai lát cắt 4 trong ROADMAP.md (tìm kiếm). Đọc AGENTS.md trước. Viết kiểm thử đơn vị trước, rồi mới viết mã. Build và chạy nó trong trình giả lập, chụp màn hình kết quả và đối chiếu với bản tóm tắt. Cho tôi xem diff và liệt kê mọi giả định bạn đã đưa ra.

Một lỗi: Trên iPhone ở cỡ Dynamic Type lớn nhất, bàn phím che nút Lưu trên màn hình Thêm. Tái hiện lỗi trong trình giả lập, chụp màn hình, giải thích nguyên nhân trong hai câu, sửa nó, và kiểm tra mọi biểu mẫu khác xem có cùng vấn đề không.

Một lượt đánh giá trước khi commit: Hãy xem lại mọi thứ kể từ lần commit cuối với tư cách một reviewer iOS cấp cao khó tính: lỗi treo, mất dữ liệu, rò rỉ quyền riêng tư, nhãn trợ năng bị thiếu, chuỗi và màu hard-code, bất cứ thứ gì khiến việc dùng ngoại tuyến bị hỏng. Danh sách đánh số, nghiêm trọng nhất trước. Chưa sửa gì cả.

Bài học từ hai ứng dụng nhỏ

Stash và bản địa hoá. Stash 1.1.0 (28 tháng 10) đã thêm mười ngôn ngữ vào tiếng Anh: Tây Ban Nha, Pháp, Đức, Ý, Bồ Đào Nha (Brazil), Hà Lan, Ba Lan, Nhật, Hàn và Trung giản thể. Ứng dụng tự lấy một ngôn ngữ từ thiết bị và cho bạn đổi trong Cài đặt → Ngôn ngữ, và ghi chú phát hành chỉ ra rằng widget, lời nhắc và hộp thoại xin quyền của hệ thống cũng đã được dịch. Chi tiết cuối đó chính là bài học: bản địa hoá là công việc lý tưởng cho tác nhân, nhưng những chuỗi mà tác nhân bỏ quên lại nằm ngoài các màn hình chính, trong widget, thông báo, chuỗi mục đích xin quyền và định dạng ngày. Hãy ghi tên chúng trong AGENTS.md và chúng sẽ được làm.

PingAtlas và những tuyên bố trung thực. Phần mô tả trên App Store của PingAtlas đưa ra những cam kết cụ thể: một phản hồi bị mất sẽ hiện là “Không phản hồi”, không bao giờ là 0 ms; không có GPS và không xin quyền vị trí; không quảng cáo, không phân tích và không tài khoản; kết quả ở lại trên thiết bị trừ khi bạn xuất chúng; và việc kiểm tra trang web chỉ dùng yêu cầu HEAD. Những cam kết như thế thuộc về AGENTS.md như các điều không thể thương lượng, vì chúng cũng chính là điều nhãn quyền riêng tư của bạn nói. Nhãn của PingAtlas ghi “Không thu thập dữ liệu”, và điều đó chỉ đúng chừng nào mã còn đồng ý. Tác nhân con chuyên đánh giá có mặt để nhận ra ngày mà điều đó không còn đúng.

Phạm vi là một tính năng. PingAtlas là bản tải xuống 1,9 MB. Stash, với ảnh, ghi chú thoại, đồng bộ và widget, khoảng 65 MB. Nhiều tính năng hơn nghĩa là nhiều thứ phải kiểm thử hơn, nhiều thứ phải giải thích trong chính sách quyền riêng tư hơn và nhiều thứ để App Review chất vấn hơn. Hãy bắt đầu với phiên bản nhỏ nhất mà vẫn giữ được cam kết.

Hai ứng dụng do một nhà phát triển xây dựng với tác nhân lập trình AI: Stash, ứng dụng ghi nhớ nơi bạn đặt đồ, và PingAtlas, ứng dụng đo độ trễ mạng từ chính thiết bị của bạn, kèm các thông tin trên App Store của chúng
Hai ứng dụng nhỏ, mỗi ứng dụng một việc. Cam kết càng hẹp thì tác nhân càng dễ xây dựng và App Review càng dễ chấp thuận.

Trợ năng ngay từ ngày đầu

Nhãn Dinh dưỡng Trợ năng của Apple cho phép bạn khai báo hỗ trợ cho chín tính năng trên trang App Store của mình: VoiceOver, Điều khiển bằng giọng nói, Văn bản lớn hơn, Giao diện tối, Phân biệt không chỉ bằng màu, Độ tương phản đủ, Giảm chuyển động, Phụ đề và Mô tả âm thanh. Hiện nay chúng là tự nguyện, nhưng Apple nói rằng theo thời gian bạn sẽ phải cung cấp chúng để gửi ứng dụng mới và bản cập nhật. Bạn chỉ được khai báo một tính năng nếu mọi người có thể hoàn thành tất cả các tác vụ thông thường của ứng dụng với nó, bao gồm lần khởi chạy đầu tiên, đăng nhập, mua hàng và cài đặt.

Cả hai trang niêm yết của tôi đều chưa khai báo tính năng nào, đúng kiểu lỗ hổng mà hướng dẫn này muốn phát hiện. Tác nhân có thể làm phần lớn việc đánh giá: XcodeBuildMCP snapshot_ui đọc cây trợ năng, nên /goal Làm cho mọi màn hình dùng được đầy đủ với VoiceOver và ở cỡ chữ lớn nhất, rồi liệt kê mọi thứ bạn không thể sửa là công việc thực tế cho một buổi chiều.


Phần 9 — Phát hành lên App Store: để OpenCode lo giấy tờ, rồi tự bạn nhấn gửi duyệt

Xây dựng là phần thú vị. Phát hành là một dự án riêng, và đó là nơi những nhà phát triển lần đầu mất cả tuần. Tin tốt cho năm 2026: gần như toàn bộ việc đó giờ có thể được viết thành script, nghĩa là tác nhân có thể làm phần gõ trong khi bạn đưa ra quyết định.

Apple đã thay đổi những gì trong năm 2026

Thời điểm Những gì đã thay đổi Việc cần làm
31 tháng 1 2026 Câu hỏi xếp hạng độ tuổi mới trở thành bắt buộc cho bản cập nhật Trả lời chúng cho mọi ứng dụng trước khi bạn gửi
28 tháng 4 2026 Bản tải lên phải được build bằng Xcode 26 trở lên và các SDK 26 Dùng Xcode 26 hoặc 27
9 tháng 6 2026 Hướng dẫn 4.3(b) được viết lại: ứng dụng nhái và làm qua loa bị từ chối hoặc gỡ bỏ Tạo khác biệt (Phần 8)
9 tháng 9 2026 Bản tải lên phải nhắm tới iOS 13 trở lên Không có gì, với mọi ứng dụng mới
15 tháng 10 2026 Xcode 27.1 (Swift 6.4, SDK iOS 27.1; cần macOS Tahoe 26.6+) và Expo SDK 58 Cập nhật bộ công cụ của bạn
16 tháng 10 2026 Nguyên tắc mới 2.5.19 cấm các tính năng ẩn, không hoạt động hoặc không được ghi tài liệu; quy định chặt hơn với ứng dụng che giấu mục đích trong lúc duyệt Biên dịch loại bỏ menu gỡ lỗi và cờ tính năng khỏi bản build phát hành
Có hiệu lực Hướng dẫn 5.1.2(i): thông báo cho mọi người và xin phép họ trước khi chia sẻ dữ liệu cá nhân với AI của bên thứ ba (thêm tháng 11 năm 2025) Thêm màn hình đồng ý nếu ứng dụng của bạn gọi dịch vụ AI
Hiện nay Ảnh chụp màn hình: một bộ cho iPhone có Dynamic Island (màn hình trung bình) là bắt buộc, cộng thêm iPad 13 inch nếu ứng dụng của bạn chạy trên iPad Lên kế hoạch kích thước ảnh chụp màn hình (Phần 10)
Tháng 4 năm 2027 iPhone Duo ảnh chụp màn hình bắt buộc cho ứng dụng được xây dựng bằng SDK iOS 27.1 trở lên Bắt đầu thiết kế cho màn hình thứ hai ngay từ bây giờ
Hiện tại vẫn là tự nguyện Dinh dưỡng Trợ năng của Apple Khai báo những gì bạn thực sự hỗ trợ

Quy định mới 2.5.19 chính là điều ảnh hưởng đến các ứng dụng do AI xây dựng. Tác nhân rất thích những tiện ích phụ trợ: một màn hình gỡ lỗi ẩn, một cờ tính năng bị để tắt, một menu thử nghiệm nằm sau một lần nhấn giữ. Cách diễn đạt mới của Apple rất thẳng thắn: “Không được đưa bất kỳ tính năng ẩn, không hoạt động hoặc không có tài liệu nào vào ứng dụng của bạn.” Theo báo cáo của 9to5Mac về thay đổi này, việc cố che giấu những tính năng như vậy, ví dụ bằng cách làm rối mã, có thể dẫn đến việc ứng dụng bị gỡ bỏ và tài khoản nhà phát triển của bạn bị chấm dứt. Hãy đưa quy tắc này vào AGENTS.md và yêu cầu tác nhân con phụ trách đánh giá tìm kiếm nó trước mỗi lần gửi.

Quy định App Store năm 2026: dòng thời gian từ hạn chót xếp hạng độ tuổi tháng 1 và yêu cầu Xcode 26 tháng 4 đến nguyên tắc 4.3(b) tháng 6, Xcode 27.1 và nguyên tắc 2.5.19 tháng 10, và ảnh chụp màn hình iPhone Duo từ tháng 4 năm 2027
Những ngày đã thay đổi việc gửi lên App Store trong năm 2026, trên thang thời gian thực. Hai thay đổi về nguyên tắc có ảnh hưởng lớn nhất đến các ứng dụng do AI xây dựng.

Quy trình làm việc, từng bước

  1. Đăng ký Apple Developer Program. Chi phí là $99 mỗi năm (€99 tại Đức). Các công ty đăng ký với tư cách tổ chức, cần có số D-U-N-S. Hãy bắt đầu sớm; việc xác minh có thể mất vài ngày. Đăng ký tại đây.
  2. Khai báo tư cách thương nhân EU của bạn. Theo Đạo luật Dịch vụ Kỹ thuật số của EU, mọi nhà phát triển phải cho biết họ có phải là thương nhân hay không. Nếu bạn xuất bản với tư cách doanh nghiệp, địa chỉ, số điện thoại và email của bạn sẽ hiển thị trên trang sản phẩm ở mọi quốc gia EU. Apple đã gỡ hàng nghìn ứng dụng khỏi các cửa hàng EU vào tháng 2 năm 2025 vì thiếu điều này.
  3. Tạo khóa API cho App Store Connect. Trong App Store Connect, vào Người dùng và Quyền truy cập → Tích hợp → App Store Connect API và tạo một khóa nhóm. Chỉ Chủ tài khoản mới có thể yêu cầu quyền truy cập API ngay từ đầu. Hãy cấp cho khóa vai trò ít quyền nhất mà vẫn đủ việc (bản tổng quan vai trò của Apple cho biết mỗi vai trò làm được gì), tải xuống .p8 tệp này một lần, và lưu ở một nơi an toàn, bên ngoài kho lưu trữ của bạn.
  4. Cài đặt App Store Connect CLI và đăng nhập. asc là một công cụ dòng lệnh mã nguồn mở (MIT) cho API App Store Connect, được xây dựng cho script và tác nhân: nó in bảng trong terminal và in JSON khi một chương trình khác đọc đầu ra của nó.
brew install asc        # or: curl -fsSL https://asccli.sh/install | bash

asc auth login --name "MyApp" --key-id "ABC123" --issuer-id "DEF456" \
  --private-key ~/keys/AuthKey_ABC123.p8 --network
asc auth status --validate

Sau đó cài đặt các skill của nó (asc install-skills) để OpenCode biết cách sử dụng nó.

  1. Tạo bản ghi ứng dụng. Trong App Store Connect, chọn Ứng dụng → + → Ứng dụng mới, và chọn bundle ID cẩn thận, vì nó không bao giờ thay đổi (bundle ID của Stash là network.grahammiranda.stash, của PingAtlas là network.grahammiranda.pingatlas). Các asc skill bao gồm một skill làm việc này qua tự động hóa trình duyệt, nhưng đó là việc mất hai phút, đáng để tự làm một lần.
  2. Xử lý việc ký. Với ứng dụng native, tính năng ký tự động của Xcode xử lý chứng chỉ và profile. Với Expo, EAS quản lý thông tin xác thực cho bạn. Skill asc-signing-setup bao gồm bundle ID, khả năng, chứng chỉ và profile nếu bạn muốn viết script.
  3. Xây dựng và tải lên. Ứng dụng native: lưu trữ trong Xcode (hoặc để tác nhân làm việc đó bằng asc-xcode-build skill), sau đó tải lên:
asc builds upload --app "123456789" --ipa build/MyApp.ipa

Expo: eas build --platform ios, sau đó eas submit -p ios, lệnh này tải bản dựng lên App Store Connect (nó không gửi bản dựng đi đánh giá). Tải lên thì an toàn để giao phó; gửi đi đánh giá thì không.

  1. Trước tiên hãy thử nghiệm bằng TestFlight. Người thử nghiệm nội bộ (tối đa 100 người trong nhóm của bạn) nhận bản dựng mà không cần đánh giá. Người thử nghiệm bên ngoài (tối đa 10.000 người, qua email hoặc liên kết công khai) cần một đợt Beta App Review ngắn cho bản dựng đầu tiên. Bản dựng vẫn có thể thử nghiệm trong 90 ngày. Tác nhân có thể quản lý các nhóm bằng asc testflight groups list --app "123456789" và asc-testflight-orchestration skill. Đưa ứng dụng cho năm người dùng iPhone khác nhau trong một tuần; họ sẽ tìm ra lỗi sập mà bạn bỏ sót.
  2. Viết metadata, rồi để tác nhân kiểm tra. Giữ trang niêm yết của bạn trong các tệp trong kho mã (metadata/en-US/…) và áp dụng nó với một lần chạy thử trước:
asc metadata apply --app "123456789" --version "1.0.0" --dir ./metadata --dry-run

Việc asc-metadata-sync skill kiểm tra giới hạn ký tự của Apple trước khi tải lên bất cứ thứ gì. Phần 10 nói về những gì cần viết.

  1. Tạo ảnh chụp màn hình. Ít nhất một, tối đa mười, cho mỗi kích thước bắt buộc, dạng PNG hoặc JPEG không có nền trong suốt. asc-shots-pipeline skill có thể chụp chúng từ trình giả lập, đóng khung và tải chúng lên bằng asc screenshots upload. Phần 10 có các kích thước.
  2. Trả lời trung thực các câu hỏi về quyền riêng tư, xếp hạng độ tuổi và tuân thủ. Đây là phần bạn không được giao phó một cách mù quáng:
  • Nhãn quyền riêng tư. Theo các điều khoản của Apple, dữ liệu được tính là đã thu thập khi nó rời khỏi thiết bị và được lưu giữ lâu hơn thời gian cần để xử lý yêu cầu. Dữ liệu chỉ được xử lý trên thiết bị thì không tính. Đồng bộ nội dung của người dùng lên máy chủ của bạn thì có tính, kể cả khi chỉ họ mới nhìn thấy được. Hãy yêu cầu tác nhân kiểm tra mọi lệnh gọi mạng và SDK, rồi tự điền nhãn từ bảng của nó.
  • Chính sách quyền riêng tư phải được liên kết trong App Store Connect và truy cập được bên trong ứng dụng, và nó phải mô tả ứng dụng này, chứ không chỉ công ty của bạn.
  • AI bên thứ ba (nguyên tắc 5.1.2(i)): nếu dữ liệu cá nhân được gửi tới một dịch vụ AI, hãy nói rõ và xin phép trước.
  • Xoá tài khoản (nguyên tắc 5.1.1(v)): nếu người dùng có thể tạo tài khoản, họ phải có khả năng xoá tài khoản ngay trong ứng dụng.
  • Xếp hạng độ tuổi, tuân thủ xuất khẩu và Nhãn dinh dưỡng về khả năng trợ năng. Nếu ứng dụng của bạn chỉ dùng mã hoá tích hợp sẵn trong iOS, chẳng hạn HTTPS, hãy đặt ITSAppUsesNonExemptEncryption trong Info.plist của bạn sau khi xem hướng dẫn của Apple, để bạn không bị hỏi lại ở mỗi lần tải lên.
  1. Tự bạn gửi. Thêm phiên bản để đánh giá và gửi nó trên trang của ứng dụng trong App Store Connect, hoặc chạy asc publish appstore … --submit --confirm từ terminal của riêng bạn (các quy tắc quyền trong Phần 4 ngăn tác nhân chạy nó). Sau đó để tác nhân theo dõi: asc review status --app "123456789".

Đánh giá: cần mong đợi điều gì

Apple nói rằng trung bình 90% hồ sơ gửi được đánh giá trong dưới 24 giờ, và hơn 40% vấn đề chưa được giải quyết đến từ nguyên tắc 2.1, Tính đầy đủ của ứng dụng: sập, nội dung giữ chỗ, thông tin thiếu và liên kết hỏng. Nếu bị từ chối, hãy đọc thông báo hai lần, sửa đúng vấn đề thật, rồi trả lời trong App Store Connect. asc-submission-health skill giúp chẩn đoán các rào cản, và tác nhân giỏi soạn một câu trả lời bình tĩnh, cụ thể. Hãy tự bạn gửi nó.


Phần 10 — Ra mắt: trang niêm yết, ảnh chụp màn hình, ASO và cuộc sống sau khi được duyệt

Một ứng dụng đã được duyệt với trang niêm yết yếu ớt giống như cửa hàng không có biển hiệu. Đây là phần còn lại của công việc.

Trang niêm yết, từng trường một

Trường Giới hạn Điều hiệu quả
Tên ứng dụng 30 ký tự 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ì
Phụ đề 30 ký tự Lợi ích diễn đạt bằng từ ngữ đơn giản. PingAtlas dùng “Ping cities, games & services”
Từ khoá 100 ký tự Phân tách bằng dấu phẩy, không dấu cách. Đừng lặp lại các từ đã có trong tên hoặc phụ đề; chúng vẫn bị tính
Văn bản quảng bá 170 ký tự Thay đổi mà không cần đánh giá mới, nên hãy dùng cho các mùa và tin tức
Mô tả 4.000 ký tự Nó làm gì, dành cho ai, nó không làm gì với dữ liệu của mọi người. Rõ ràng và cụ thể
Có gì mới Theo từng phiên bản Những thay đổi thực tế bằng lời lẽ dễ hiểu; /whats-new lệnh ở Phần 5 soạn thảo ra nó
Ảnh chụp màn hình 1 đến 10 ảnh mỗi kích thước Kể câu chuyện theo thứ tự; hầu hết mọi người không bao giờ cuộn qua ba ảnh đầu

Hai quy tắc khi để tác nhân viết bất kỳ phần nào trong số này: bảo nó chỉ dùng những tính năng thực sự có trong mã (và nêu tên tệp nơi mỗi tính năng nằm), rồi giữ kết quả trong kho lưu trữ của bạn để mọi thay đổi đều được xem xét như mã. asc-aso-audit skill sau đó có thể kiểm tra khoảng trống từ khoá ngoại tuyến trước khi mọi thứ lên sóng.

Kích thước ảnh chụp màn hình tháng 11 năm 2026

Thiết bị Bắt buộc? Kích thước dọc (pixel)
iPhone có Dynamic Island, màn hình trung bình Có 1179 × 2556 hoặc 1206 × 2622
iPhone có Dynamic Island, màn hình lớn Tùy chọn 1260 × 2736, 1290 × 2796 hoặc 1320 × 2868
iPad, màn hình 13 inch Có, nếu ứng dụng của bạn chạy trên iPad 2064 × 2752 hoặc 2048 × 2732
iPhone Duo (màn hình ngoài / trong) Từ Tháng 4 năm 2027, cho ứng dụng được xây dựng bằng SDK iOS 27.1 trở lên 1398 × 2034 / 2007 × 2853

Nếu giao diện của bạn trông giống nhau ở mọi kích thước và ngôn ngữ, bạn chỉ cần độ phân giải cao nhất được yêu cầu; App Store Connect sẽ thu nhỏ nó cho các thiết bị nhỏ hơn. Ảnh chụp màn hình không được có nền trong suốt.

Cấu trúc trang niêm yết trên App Store với giới hạn ký tự: tên ứng dụng 30, phụ đề 30, từ khóa 100, văn bản quảng bá 170, mô tả 4.000, cùng các kích thước ảnh chụp màn hình yêu cầu trong tháng 11 năm 2026 và kích thước iPhone Duo bắt buộc từ tháng 4 năm 2027
Mọi thứ tìm kiếm trên App Store đọc, và mọi thứ một người lạ thấy trước khi nhấn “Get”, trên một trang.

Bản địa hoá trang giới thiệu, không chỉ ứng dụng

Nếu ứng dụng nói được nhiều ngôn ngữ, trang giới thiệu cũng nên như vậy. asc-localize-metadata skill dịch văn bản trang giới thiệu và asc-metadata-sync kiểm tra từng ngôn ngữ theo giới hạn ký tự của Apple, đây chính là chỗ phần phụ đề tiếng Đức dịch tay thường sai. Hãy để người bản ngữ đọc kết quả; dịch máy giờ đã rất tốt, nhưng nội dung trên cửa hàng ứng dụng là marketing, mà marketing thì cần tai người.

Sau khi được duyệt

  • Hãy xin đánh giá vào lúc người dùng đang hài lòng. Lời nhắc đánh giá hệ thống của Apple xuất hiện tối đa ba lần một năm với mỗi người, nên đừng lãng phí nó vào lần khởi chạy đầu tiên. Hãy hỏi ngay sau khi một việc gì đó diễn ra tốt đẹp.
  • Dùng văn bản khuyến mại để canh thời điểm. Mùa chuyển nhà, dọn dẹp mùa xuân, một cuối tuần chơi game. Nó thay đổi mà không cần đánh giá.
  • Theo dõi sự cố treo ứng dụng ngay từ ngày đầu. Việc asc-crash-triage skill xem xét sự cố và phản hồi trên TestFlight; máy chủ MCP của Expo có thể lấy sự cố, phản hồi và đánh giá (trả lời thì cần bạn xác nhận); máy chủ MCP của Sentry mang về lỗi trên môi trường thực tế.
  • Phát hành các bản cập nhật nhỏ thường xuyên. Stash lên sóng ngày 23 tháng 9, ra mắt thiết kế mới ngày 2 tháng 10 và thêm mười ngôn ngữ trong phiên bản 1.1.0 ngày 28 tháng 10. Hãy phát hành phiên bản chạy được, rồi cải thiện nó một cách công khai.
  • Cho ứng dụng một ngôi nhà trên web. Một trang đơn giản có bản demo, chính sách quyền riêng tư viết riêng cho ứng dụng, và nếu bạn ở Đức thì thêm một Impressum. hướng dẫn xây dựng ứng dụng từ đầu bao gồm các trang pháp lý cho nhà phát triển ở Đức và EU.

Phần 11 — Chi phí: bốn ngân sách cho năm đầu

OpenCode miễn phí. Ollama miễn phí trên phần cứng của bạn. Chi phí duy nhất bạn không thể tránh khi làm ứng dụng iPhone là khoản thành viên của Apple; mọi thứ còn lại chỉ là bạn muốn mua bao nhiêu thời gian mô hình.

Ngân sách Bao gồm những gì Năm đầu (USD)
Chỉ cục bộ Apple Developer Program; OpenCode; Ollama với mô hình cục bộ trên chiếc Mac bạn đã có (32 GB trở lên) $99
Khởi đầu Chỉ cục bộ + OpenCode Go ($10 một tháng) $219
Khuyến nghị Starter + Ollama Pro thanh toán theo năm ($200) $419
Hiệu năng Apple + OpenCode Go Plus ($40 một tháng) + Ollama Max ($100 một tháng) $1,779

Giá niêm yết ngày 7 tháng 11 năm 2026, chưa gồm VAT, không tính giảm giá khuyến mãi. Bạn có thể thay bằng lựa chọn của riêng mình: GLM Coding Plan Lite thay vì Go tốn $216 một năm khi thanh toán theo tháng (khoảng $151 khi thanh toán theo năm) thay vì $120; ChatGPT Plus là $240 một năm. Các khoản tùy chọn: phí $25 một lần của Google Play nếu bạn phát hành trên Android, các gói Expo trả phí nếu bạn vượt quá gói miễn phí, và chi phí website của bạn.

Chi phí năm đầu để xây dựng và phát hành ứng dụng với OpenCode và Ollama trong năm 2026: $99 chỉ cục bộ, $219 khởi đầu, $419 đề xuất và $1.779 nâng cao, chia theo Apple, OpenCode Go và Ollama
Phí Apple là khoản duy nhất bạn không thể tránh. Cấu hình được đề xuất tốn khoảng $35 một tháng.

Nhưng chi phí thật không nằm trong danh sách: đó là những buổi tối của bạn. AI rút ngắn phần gõ phím chứ không rút ngắn phần suy nghĩ, mà suy nghĩ mới là phần lớn công việc.


Phần 12 — Mười lăm sai lầm cần tránh

  1. Để tác nhân tự gửi duyệt. Chặn trong phần quyền. Bạn tự bấm nút.
  2. Để khóa API Admin ở nơi tác nhân chạy không có người giám sát. Dùng vai trò có quyền thấp nhất còn đủ dùng, và để khóa ký cùng thông tin đăng nhập production ở nơi khác.
  3. Xây một bản sao của thứ đã tồn tại. Hướng dẫn 4.3(b) giờ nêu tên cả nhóm ứng dụng. Hãy tìm ra điểm khác biệt chỉ gói trong một câu của bạn trước.
  4. Phát hành những tính năng ẩn. Màn hình debug, cờ tính năng không dùng và menu kiểm thử vi phạm hướng dẫn 2.5.19. Hãy loại chúng khỏi bản build phát hành ngay ở khâu biên dịch.
  5. 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 lại trên máy chủ thì nó được coi là dữ liệu được thu thập, kể cả khi chỉ người dùng nhìn thấy.
  6. Gửi dữ liệu cá nhân đến dịch vụ AI mà không hỏi. Hướng dẫn 5.1.2(i) yêu cầu công bố và xin phép.
  7. Bí mật nằm trong gói ứng dụng. Mọi thứ bên trong ứng dụng đều có thể bị trích xuất. Những khóa tốn tiền phải nằm trên máy chủ.
  8. Kết nối mọi máy chủ MCP bạn tìm được. Mỗi cái đều tốn ngữ cảnh trong mọi yêu cầu. Chỉ thêm cái bạn dùng.
  9. Cài các skill và máy chủ mà bạn chưa đọc. Chúng là hướng dẫn và mã chạy với quyền của bạn.
  10. Tin vào “xong”. Hãy chạy nó trên một chiếc iPhone thật, ở chế độ ngoại tuyến, chế độ tối, cỡ chữ lớn nhất, có bật VoiceOver.
  11. Dùng các mô hình khuyến mãi miễn phí cho mã của khách hàng. Một số mô hình có thể dùng dữ liệu của bạn để cải thiện mô hình. Hãy tắt chúng cho các dự án khách hàng.
  12. Quên độ dài ngữ cảnh của Ollama. Với giá trị mặc định, tác nhân hết chỗ trước cả khi bắt đầu. Hãy đặt 64K trên máy chủ.
  13. Để các gói phụ thuộc chất đống. Mỗi gói là mã bạn chưa đọc và là một bản cập nhật bạn sẽ phải quản lý. Hãy buộc tác nhân phải hỏi.
  14. Những phiên làm việc dài và lan man. Bắt đầu phiên mới cho từng phần nhỏ, và dùng worktree cho các thử nghiệm.
  15. Hứa hẹn về lộ trình phát triển. Ảnh chụp màn hình và phần mô tả cho thấy bản build này làm được gì. Ý tưởng nên nằm trên website của bạn, có ghi rõ đó là ý tưởng.

Phần 13 — Bạn nên chọn cấu hình nào? Sáu tình huống

1. “Tôi chưa từng viết mã và tôi có một chiếc Mac.”

Ứng dụng desktop của OpenCode, OpenCode Go, và Ollama cho những việc nhỏ. Expo nếu bạn cũng muốn Android; SwiftUI nếu bạn chỉ quan tâm iPhone. Giữ các lệnh shell ở hỏi, commit sau mỗi bước chạy được, và bắt đầu bằng một ứng dụng chỉ làm đúng một việc.

2. “Mã của tôi không bao giờ được rời khỏi máy tôi.”

OpenCode chỉ với Ollama cục bộ. Tắt các tính năng đám mây của Ollama, đặt OPENCODE_DISABLE_FREE_MODELS=1, và không kết nối nhà cung cấp đám mây nào trong dự án đó. Hãy chờ đợi sự trợ giúp chậm hơn, đơn giản hơn, và giao cho tác nhân những việc nhỏ hơn. Một chiếc Mac 64 GB trở lên khiến việc này dễ chịu hơn nhiều.

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

Hãy kết nối thứ bạn đã có trước. ChatGPT Plus và Pro cùng GitHub Copilot hoạt động qua đăng nhập tích hợp sẵn mà không tốn thêm phí. Claude hoạt động qua nhà cung cấp Claude Agent; hãy đọc Phần 2 trước khi phụ thuộc vào nó cho công việc kinh doanh. Thêm OpenCode Go sau nếu bạn muốn có cả các mô hình mở.

4. “Tôi muốn iPhone và Android từ cùng một mã nguồn.”

Expo SDK 58, máy chủ MCP của Expo, các skill chính thức của Expo và EAS cho bản dựng và tải lên trên đám mây. Bạn có thể xây dựng và tải ứng dụng iOS lên mà không cần Mac, dù bạn vẫn sẽ muốn có một chiếc (và một chiếc iPhone) để kiểm thử.

5. “Tôi chỉ quan tâm đến nền tảng Apple và muốn mọi thứ đều native.”

SwiftUI trong Xcode 27.1, với OpenCode nằm trong Xcode qua ACP (Xcode → Cài đặt → Intelligence → Thêm tác nhân…, tệp thực thi opencode, đối số acp) hoặc trong terminal với cầu MCP của Xcode và XcodeBuildMCP. Một hạn chế của cách chạy trong Xcode: không có trình chọn model, nên hãy đặt model mặc định trong opencode.jsonc trước.

6. “Tôi muốn đi nhanh và sẵn sàng trả tiền cho việc đó.”

OpenCode Go Plus và Ollama Max, worktree cho các thử nghiệm song song, chế độ goal cho những việc dài và máy móc, và một model tiên phong qua API key cho những bài toán thực sự khó. Theo dõi chi tiêu hằng tuần. Để chạy nhiều tác nhân song song, bài so sánh harness của tôi bao quát các lựa chọn.


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

Lần đầu dùng OpenCode thì làm thế nào?

Cài bằng curl -fsSL https://opencode.ai/v2/install | bash (hoặc tải ứng dụng desktop từ opencode.ai/download), mở terminal trong thư mục dự án và chạy opencode. Gõ /connect để thêm nhà cung cấp model, chẳng hạn OpenCode Go, đăng nhập ChatGPT hay model Ollama cục bộ, sau đó /models để chọn model. Thêm tệp AGENTS.md mô tả dự án, bắt đầu trong tác nhân plan, và xây từng tính năng nhỏ một, xem lại mọi thay đổi.

OpenCode có miễn phí không?

Có. OpenCode là mã nguồn mở theo giấy phép MIT và không tốn phí. Nó còn có một bộ model miễn phí luân phiên mà bạn dùng được mà không cần tài khoản. Bạn chỉ trả tiền cho quyền truy cập model mà bạn chọn thêm, như OpenCode Go giá $10 một tháng, gói Ollama Cloud, đăng ký ChatGPT hay Copilot sẵn có, hoặc API key trả theo token. Model cục bộ qua Ollama thì miễn phí.

OpenCode Go là gì và giá bao nhiêu?

OpenCode Go là gói coding của chính OpenCode: $10 một tháng để truy cập 32 model mở, gồm GLM-5.3, Kimi K3, MiniMax M3.1 Flash và DeepSeek V4.1 Flash. Mỗi model có hạn mức đô-la hằng tháng, trong đó bạn dùng được 20% mỗi năm giờ và 50% mỗi tuần. Go Plus giá $40 một tháng với hạn mức cao hơn, còn Go Teams $20 mỗi thành viên. Hầu hết model được phục vụ với chế độ không lưu dữ liệu.

Có thể dùng OpenCode với Ollama không?

Có. OpenCode tự phát hiện máy chủ Ollama cục bộ và liệt kê các model của nó trong /models. Bạn cũng có thể chạy ollama launch opencode, lệnh này hoạt động với OpenCode v2 từ Ollama 0.40.12. Đặt độ dài ngữ cảnh của Ollama ít nhất 64K token, vì mức mặc định 4.096 là quá nhỏ cho một tác nhân coding. Model đám mây của Ollama cũng hoạt động tương tự sau khi bạn đăng nhập.

Nên dùng model cục bộ nào với OpenCode trên Mac?

Giữ dung lượng tải về của model ở mức dưới khoảng 60% bộ nhớ máy Mac. Với 32 GB, hãy bắt đầu với qwen3.8:27b (18 GB), qwen3-coder:30b (19 GB) hoặc gpt-oss:20b (14 GB). Với 64 GB, dùng chính các model đó ở độ chính xác cao hơn với ngữ cảnh lớn hơn. Với 96 đến 128 GB, gpt-oss:120b (65 GB) và devstral-2:123b (75 GB) vừa đủ. Với 16 GB, model cục bộ hợp với việc nhỏ; hãy dùng model đám mây để xây dựng.

Có thể dùng đăng ký Claude Pro hoặc Max trong OpenCode không?

Từ OpenCode 2.2.3 (30 tháng 10 năm 2026), có, qua nhà cung cấp Claude Agent: cài Claude Code 2.1.248 trở lên, chạy claude auth login, rồi chọn Claude Agent trong /connect. Nó chạy chương trình Claude Code chính thức qua Agent SDK của Anthropic. Anthropic chưa công khai chấp thuận cách dùng này, và điều khoản Agent SDK của họ hạn chế việc bên thứ ba cung cấp đăng nhập claude.ai, nên hãy dùng API key Anthropic cho công việc kinh doanh.

Có thể dùng ChatGPT Plus hoặc GitHub Copilot trong OpenCode không?

Có, cả hai đều qua nhà cung cấp tích hợp sẵn. Với ChatGPT Plus hoặc Pro, chạy /connect, chọn OpenAI rồi “Đăng nhập bằng ChatGPT”; mức dùng sẽ tính vào gói của bạn. Với GitHub Copilot, chọn GitHub Copilot và hoàn tất đăng nhập thiết bị; tài khoản của bạn cần quyền truy cập Copilot Chat, mà gói Copilot miễn phí có bao gồm.

MCP server là gì, và tôi cần những cái nào để phát triển iOS?

MCP server (Model Context Protocol) cung cấp cho tác nhân coding thêm công cụ, chẳng hạn điều khiển Xcode hay trình giả lập. Với công việc iOS, hữu ích nhất là cầu riêng của Xcode (xcrun mcpbridge), XcodeBuildMCP để build, điều khiển trình giả lập và chụp màn hình, MCP server của Expo cho dự án Expo, Context7 để lấy tài liệu mới nhất và Sentry cho dữ liệu crash. Mỗi server đều thêm ngữ cảnh vào mọi yêu cầu, nên chỉ kết nối những gì bạn dùng.

Skill trong OpenCode là gì?

Skill là thư mục chứa một SKILL.md tệp: một mô tả ngắn cộng hướng dẫn từng bước, đôi khi kèm script. OpenCode chỉ cho model thấy phần mô tả và tải hướng dẫn của skill khi tác vụ cần đến. Nó đọc skill từ .opencode/skills, .claude/skills và .agents/skills trong dự án của bạn, và từ các thư mục toàn cục. Expo và App Store Connect CLI công bố các bộ skill chính thức.

OpenCode có thể phát hành ứng dụng của tôi lên App Store không?

Nó làm được gần như toàn bộ công việc: lưu trữ, tải bản dựng lên, quản lý TestFlight, đồng bộ metadata và ảnh chụp màn hình, và kiểm tra trạng thái duyệt, bằng các công cụ như asc CLI hoặc EAS của Expo. Nó không nên bấm “Submit for Review”. Hãy chặn các lệnh submit trong phần quyền của OpenCode, tự trả lời các câu hỏi về quyền riêng tư và tuân thủ, rồi tự gửi phiên bản đó trong App Store Connect.

Tôi có cần Mac để phát hành ứng dụng iPhone không?

Không nhất thiết. Với Expo, EAS build ứng dụng iOS của bạn trên cloud và tải lên App Store Connect từ Windows hoặc Linux. Với phát triển native bằng Xcode thì bạn cần Mac, và Xcode 27.1 yêu cầu macOS Tahoe 26.6 trở lên. Dù theo cách nào, bạn cũng nên có một chiếc iPhone thật để kiểm thử, và bạn cần tư cách thành viên Apple Developer Program ($99 một năm) để phát hành.

Chi phí để xây dựng và phát hành một ứng dụng bằng OpenCode là bao nhiêu?

Từ $99 trong năm đầu nếu bạn dùng model cục bộ và chỉ trả phí thành viên của Apple. Thiết lập được khuyến nghị trong hướng dẫn này (OpenCode Go cộng Ollama Pro, thanh toán theo năm) tốn khoảng $419 cho năm đầu, đã gồm phí Apple; còn một thiết lập mạnh với OpenCode Go Plus và Ollama Max tốn khoảng $1.779. Giá là giá niêm yết tháng 11 năm 2026, chưa gồm VAT.

Quy định App Store thay đổi gì trong năm 2026?

Bản build phải được tạo bằng Xcode 26 trở lên (từ tháng Tư), các ứng dụng nhái thương hiệu và làm qua loa trong những danh mục bão hòa bị từ chối theo guideline 4.3(b) viết lại (tháng Sáu), các tính năng ẩn, không hoạt động hoặc không có tài liệu bị cấm theo guideline mới 2.5.19 (tháng Mười), và ứng dụng phải nhắm tới iOS 13 trở lên (tháng Chín). Ảnh chụp màn hình iPhone Duo sẽ trở thành bắt buộc vào tháng Tư năm 2027 với các ứng dụng build bằng SDK iOS 27.1, và bộ ảnh chụp màn hình iPhone bắt buộc giờ là bộ dành cho màn hình Dynamic Island cỡ trung (1179 × 2556 hoặc 1206 × 2622 pixel).

Stash và PingAtlas là gì?

Đó là hai ứng dụng iPhone và iPad miễn phí của Graham Miranda UG, công ty của tác giả. Stash — Find It Fast ghi nhớ nơi bạn cất đồ: bạn chụp ảnh chỗ để, chọn phòng và tìm lại sau, kể cả bằng ghi chú thoại đã được chuyển thành văn bản, trong 11 ngôn ngữ. PingAtlas đo thời gian khứ hồi mạng từ chính thiết bị của bạn tới các thành phố, trò chơi và dịch vụ trực tuyến, không cần tài khoản, không quảng cáo và không phân tích dữ liệu.


Điểm mấu chốt

Học hỏi cách dùng OpenCode cũng không phải chuyện học thuộc lòng các lệnh. Mà là dựng một hệ thống nhỏ quanh tác nhân: một gói lập trình vừa với ngân sách của bạn, Ollama cho phần việc nên ở lại trên máy bạn, vài MCP server để tác nhân nhìn thấy thứ nó đang xây, các skill chứa playbook của bạn, và những quyền hạn giữ lại cho bạn các quyết định không thể đảo ngược.

Khuyến nghị của tôi vẫn giữ nguyên: OpenCode cùng OpenCode Go và Ollama là cách rẻ nhất, linh hoạt nhất và ít bị khóa chặt nhất để xây dựng ứng dụng bằng AI vào cuối năm 2026. Hãy thêm một gói đăng ký bạn đã trả tiền, hoặc một model tiên phong qua API key, khi có việc xứng đáng. Rồi dùng tác nhân cho cả phần giấy tờ, và giữ nút “Submit” cho chính bạn.

Nếu bạn muốn xem kiểu quy trình này tạo ra gì ở quy mô nhỏ, cả hai ứng dụng của tôi đều miễn phí: Stash — Find It Fast cho những thứ bạn cất đi, và PingAtlas để kiểm tra xem internet thực sự gần tới mức nào từ chỗ bạn ngồi. Rồi bạn hãy đi xây cái của mình.


Đang xây dựng bằng OpenCode? Tôi muốn nghe bạn chọn gói lập trình nào, model cục bộ nào giành được một chỗ trên chiếc Mac của bạn, và MCP server hay skill nào bạn không thể thiếu. Rất hoan nghênh các chỉnh sửa và phản chứng; bài viết này sẽ được cập nhật khi bức tranh thay đổi.

Tiết lộ: Stash và PingAtlas là ứng dụng của chính tôi, do công ty tôi là Graham Miranda UG (haftungsbeschränkt) phát hành. Cả hai đều miễn phí và không có quảng cáo. Bài viết này có một liên kết tiếp thị liên kết, tới GLM Coding Plan của Z.ai trong Phần 2; nếu bạn đăng ký qua đó, bạn được giảm 10% và tôi nhận hoa hồng. Không công ty nào được nhắc ở đây tài trợ, xem xét hay phê duyệt bài viết này.

Cập nhật lần cuối: 7 tháng 11 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