Build app iPhone thật bằng Claude Code và Opus 5.5

Từng bước build một app focus timer iPhone bằng Claude Code và Opus 5.5: plan, widget, Live Activity, StandBy, rồi cài qua TestFlight.

Đã duyệt độc lập · cập nhật 23/10/2026 · 17 min

1. Mục tiêu: một app iPhone thật, từ ý tưởng tới TestFlight

Video được Anthropic tài trợ, theo lời mở đầu video đăng ngày 09/10/2026.

Beto mở đầu bằng nhận xét rằng chắc hẳn bạn đã nghe về Claude Opus 5.5, và theo anh (video đăng ngày 09/10/2026) các model này đang trở nên thực sự giỏi. Hôm nay anh muốn cho thấy bạn thực sự làm được gì với chúng: build một ứng dụng iPhone bằng Claude Code. Cụ thể là một focus timer cá nhân, có UI đẹp, có home screen widget và có Live Activities. Sau đó anh đưa app vào iPhone qua TestFlight, để bạn dùng được, chia sẻ cho bạn bè, rồi phát triển tiếp từ đó.

Một chiếc iPhone đặt trên đế sạc, màn hình hiện app Focus Time với mặt đồng hồ 25:00
Thành phẩm cuối video: app Focus Time chạy trên iPhone thật, màn hình chính hỏi "What are you focusing on?", một mặt đồng hồ kiểu analog màu cam đặt sẵn 25:00 và nút Start Focus (video đăng ngày 09/10/2026).

Anh thừa nhận đây là một ý tưởng đơn giản. Nhưng theo Beto (video đăng ngày 09/10/2026), app đơn giản cũng kiếm ra tiền được: một app đơn giản giải quyết một vấn đề thật có thể trở thành một business nếu bạn đưa nó tới đúng người. Dù vậy, bạn không bắt buộc phải làm focus timer. Bạn có thể mang ý tưởng của riêng mình và đi theo đúng quy trình này. Rồi anh vào việc.

2. Cần chuẩn bị gì: Claude Code desktop, Xcode và TestFlight

Beto liệt kê những thứ cần có để build ứng dụng iPhone của riêng bạn, theo cách anh làm trong video đăng ngày 09/10/2026:

  • Claude Code: tải ứng dụng desktop. Đó là bản anh dùng suốt video đăng ngày 09/10/2026.
  • Xcode trên máy Mac. Và đúng, bạn cần một chiếc Mac, vì Xcode chỉ có cho Mac (theo Beto, video đăng ngày 09/10/2026). Cứ tải thẳng từ Mac App Store.
  • TestFlight trên điện thoại, tải từ App Store (video đăng ngày 09/10/2026).

Với Xcode có một lưu ý nhỏ. Theo Beto lúc quay (video đăng ngày 09/10/2026), bản mới nhất trên App Store là 27.0, còn bản anh dùng hôm nay là 27.1. Nếu lúc bạn xem video mà 27.1 chưa có trên App Store, bạn vào trang developer.apple.com/downloads và tải Xcode 27.2 beta, hoặc tải 27.1, chính là bản anh đang dùng. Khác biệt duy nhất, theo lời anh, là bản này có hỗ trợ iPhone Duo. Chỉ vậy thôi.

Claude Codeứng dụng desktopnơi làm việc với Opus Xcode 27.1chỉ có trên Machoặc 27.2 beta từ Apple TestFlightcài trên iPhoneđể nhận bản beta Danh sách chuẩn bị theo video đăng ngày 09/10/2026
Hình 2.1Ba thứ Beto chuẩn bị trước khi bắt đầu: ứng dụng desktop Claude Code, Xcode trên Mac, và TestFlight trên iPhone để cài bản beta ở cuối video (video đăng ngày 09/10/2026).

3. Bắt đầu bằng plan mode và dictation

Beto mở Claude Code (video đăng ngày 09/10/2026). Anh đã tạo một thư mục tên FocusTime, đây là nơi anh sẽ tạo ứng dụng và làm việc với Claude. Nhưng trước khi yêu cầu bất cứ điều gì, anh muốn rõ ràng về mấy điều: ứng dụng làm gì, dành cho ai, việc chính người dùng phải làm được là gì, và điều gì khiến mình có thể nói "ok, cái này thực sự chạy và sẵn sàng để ship".

Trong Claude Code (video đăng ngày 09/10/2026), anh gõ /plan rồi Enter để vào plan mode. Sau đó anh dùng dictation mode bằng cách bấm vào biểu tượng micro nhỏ, và nói ý tưởng thành lời. Khung chat hiện lại đúng đoạn anh vừa đọc:

I want to say I want to build an iPhone application called Focus Time. It's for someone who wants to focus on studying or reading or a personal project. You name what you're doing, start a timer, and then take a short break afterward. I want a calm Polish interface, a widget that shows today progress, and a timer I can see in my lock screen. Everything should stay in the phone. Help me make a plan.

Nói gọn: một app iPhone tên Focus Time cho người muốn tập trung học, đọc sách hay làm một dự án cá nhân. Bạn đặt tên cho việc mình đang làm, bấm hẹn giờ, rồi nghỉ ngắn sau đó. Anh muốn giao diện bình tĩnh, chỉn chu, một widget cho thấy tiến độ hôm nay, và một timer nhìn thấy được trên lock screen. Mọi thứ phải nằm trong điện thoại.

App làm gì?focus timer Dành cho ai?người học, đọc, làm dự án Việc chính?đặt tên, hẹn giờ, nghỉ Khi nào là xong?chạy được, sẵn sàng ship trả lời xong mới gõ /plan
Hình 3.1Bốn điều Beto muốn rõ trước khi yêu cầu Claude bất cứ thứ gì, rồi mới vào plan mode (video đăng ngày 09/10/2026).

4. Bản spec dán thêm: user, main flow, screens, design, constraints

Trước khi gửi, Beto dán thêm một đoạn nữa vào khung chat, và anh khuyên bạn cũng làm như vậy khi build ứng dụng. Anh đi qua từng mục:

  • User: trước hết, định nghĩa người dùng. Người dùng lý tưởng của anh là ai đó đang tập trung học, đọc sách hoặc làm một việc cá nhân.
  • Main flow: luồng chính là bắt đầu một session 25 phút, hiện timer, cho phép pause, resume, rồi tự tay bắt đầu một khoảng nghỉ 5 phút. Phần này dĩ nhiên tuỳ vào ứng dụng của bạn.
  • Screens: bạn có thể định nghĩa các màn hình muốn có. Anh muốn màn hình focus và một history view đơn giản (video đăng ngày 09/10/2026).
  • Design: một timer lớn, dễ đọc, một hành động chính rõ ràng, khoảng cách rộng rãi. Và đây là "chút tinh chỉnh" của anh: anh muốn cảm giác retro. Anh muốn hỗ trợ dark mode. Và tất nhiên dùng SwiftUI, framework mà Opus sẽ dùng cùng Xcode (theo Beto, video đăng ngày 09/10/2026). Một điều quan trọng với anh là Liquid Glass, vì anh muốn app trông hiện đại và native, và cũng phải hỗ trợ iPhone Duo mới.
  • Animations: anh muốn có animation, nhưng tinh tế, thanh lịch.
  • Haptics: anh muốn có haptics.
  • Native features: hai tính năng native anh đặc biệt muốn có là Live Activity và home screen widget.
  • Constraints: cuối cùng, anh khuyên nên có vài ràng buộc. Ví dụ app của anh chỉ chạy phía client, nghĩa là mọi dữ liệu, history, mọi thứ đều nằm trên thiết bị. Chưa có database hay backend.

Anh nói anh viết ra những điểm này vì đó là thứ anh muốn cụ thể, để Opus không phải đoán (video đăng ngày 09/10/2026). Đoạn văn bản đầy đủ trên màn hình (giữ nguyên cả lỗi gõ):

User: someone focusing on one study, reading, or personal task.
Main flow: enter a session name, start a 25-minute focus timer, pause/resume, then manually start a 5-minute break. Allow canceling without recording a completed session. Only one session can be active.

Screens: Focus and a simple History view with today's completed focus minutes. Breaks do not count as focus time. Save completed sessions and recover the active timer locally after relaunch.

Design: large readable timer, one obvious primary action, generous spacing, with a retro look and feel.  Support dark mode. Use swiftui native components and liquid glass with prominent effect when relevant. Make sure the app also supports and works well on iPhone Duo.

Animations: Add subtle elegant animations where it makes sense.

Haptics: Add subtle haptics where it makes sense. For rewarding moments like completing a focus session add a satisfiyng haptic pattern after the completition.

Native features, after the core works: a Home Screen widget showing today's progress and opening the focus screen; a Live Activity showing the current session and remaining time on the Lock Screen and supported Dynamic Island devices. the widget and live activity should reflect the same retro look and feel for consistency.

Constraints: Keep it client side only. Use built-in Apple frameworks where practical. Keep a short test duration available only in development.
Khung chat Claude Code desktop với đoạn spec Screens, Design, Animations, Haptics, Native features
Đoạn spec trong khung chat của Claude Code desktop: phía trên là thống kê sử dụng của tài khoản, dưới cùng là model Opus 5.5 và mức Ultracode đã chọn (video đăng ngày 09/10/2026).

5. Chọn Opus 5.5 và Ultracode

Beto chọn Opus 5.5 và Ultracode. Anh thích chọn Ultracode ít nhất cho bản plan đầu tiên và lần implement đầu tiên. Sau đó, với những việc dễ hơn, bạn có thể giảm thinking effort. Theo Beto (video đăng ngày 09/10/2026), Ultracode về cơ bản làm model rất thông minh, nhưng cũng đốt token và tốn nhiều tiền hơn, nên hãy để ý điều đó.

Thêm một mẹo nhỏ trước khi bấm Enter: nếu bạn đã có sẵn một UI cụ thể, như một bản design hay cảm hứng từ ứng dụng khác, cứ dán vài screenshot vào đây (video đăng ngày 09/10/2026). Trong trường hợp của anh, anh chỉ muốn giữ mọi thứ đơn giản, nên anh bấm Enter luôn.

Ultracodeplan đầu tiên + implement đầu tiênthông minh hơn, tốn token và tiền hơn Giảm thinking effortcác việc dễ hơn về sau Cách Beto chọn mức effort, video đăng ngày 09/10/2026
Hình 5.1Cách Beto chọn mức effort: Ultracode cho lượt plan và implement đầu, rồi hạ xuống cho các việc nhỏ hơn.

6. iOS Simulator ngay trong Claude Code desktop

Trong lúc Opus làm plan, Beto muốn khoe một thứ rất hay của ứng dụng desktop Claude Code (video đăng ngày 09/10/2026). Ở góc trên bên phải có một mục tên iOS Simulator. Anh lưu ý bạn cần cài Xcode trước thì mới thấy mục này. Theo anh, đây là một tính năng tuyệt vời, vì Claude Code và Opus truy cập thẳng vào iOS simulator, và bạn có thể đánh dấu (highlight) các thứ trên đó.

Claude Code desktop: bên trái là prompt, bên phải là pane iOS Simulator với nút Attach simulator
Pane iOS Simulator bên phải ứng dụng desktop: màn hình ghi "Attach a simulator so Claude can see your app", Claude sẽ điều khiển simulator và chụp toàn màn hình; bên trái, Opus đang đọc thông tin màn hình của iPhone Duo (video đăng ngày 09/10/2026).

Bạn gắn một simulator bằng cách bấm Attach, và chọn simulator muốn dùng. Anh tiếp tục, cho phép (allow), và simulator hiện lên. Đây là nơi Opus sẽ test ứng dụng, nhưng chính bạn cũng dùng thiết bị trực tiếp ở đây được. Theo video đăng ngày 09/10/2026, còn có các công cụ khác như annotation: bạn đánh dấu một thứ trên màn hình rồi thêm nó vào chat. Anh bấm Escape để huỷ, rồi đóng pane này lại.

7. Opus hỏi lại, rồi đưa ra bản plan

Opus gửi lại vài câu hỏi (video đăng ngày 09/10/2026). Câu đầu: app nên đi theo hướng retro nào. Trên màn hình có các lựa chọn như "70s analog dial (Recommended)" (giấy màu kem, mực màu espresso, điểm nhấn cam cháy, theo kiểu đồng hồ bếp Braun) và "Flip clock" (các thẻ số lật như bảng giờ ở sân bay thập niên 60, 70). Beto chọn phương án được đề xuất, cho đơn giản.

Câu thứ hai, theo anh, là một câu quan trọng: Xcode project nên được tạo thế nào? App cần một main app target, một extension cho widget và Live Activity, một thư mục code dùng chung và một test target. Anh trả lời: tạo một Xcode project mới trong thư mục này, Xcode đã được cài rồi. Rồi anh gửi (video đăng ngày 09/10/2026).

Sau khoảng năm phút (theo số đo của Beto, video đăng ngày 09/10/2026), bản plan xong. Tiêu đề là "Focus Time: native SwiftUI iPhone app plan". Opus đã tự tìm ra cấu hình máy của anh: nó biết anh đang dùng Xcode 27.1, biết simulator iPhone Duo đang chạy (booted), và biết đó là máy gập. Phần quyết định chọn "70s analog dial", và anh tò mò muốn xem nó trông thế nào, nên đồng ý.

Bản plan Focus Time: native SwiftUI iPhone app plan với các mục Context, What I found in the environment, Decisions, Project setup
Bản plan của Opus: phần "What I found in the environment" ghi Xcode 27.1 với iOS 27.1 SDK, simulator iPhone Duo gập được có hai màn hình, và các API Liquid Glass có trong SDK; phần Decisions chốt kiểu 70s analog dial (video đăng ngày 09/10/2026).

Theo bản plan (video đăng ngày 09/10/2026), Opus sẽ tự tạo Xcode project, nên anh không phải làm gì bằng tay. Nó sẽ đặt một số setting và ký app bằng thông tin xác thực trong Apple Developer account của anh. Plan chia thành các phase: phase đầu là project setup; phase hai về UI và design, trong đó nó nói rõ sẽ dùng những màu nào. Theo Beto, đây là lúc hoàn hảo để đổi thứ gì đó về giao diện trước khi agent bắt đầu build. Phase bốn là widget, phần extension của app mà mình thấy trên home screen. Phase năm là Live Activity: khi khoá máy giữa lúc đang chạy timer, bạn vẫn thấy tiến độ. Cuối cùng nó sẽ viết test, và có một danh sách các bước verify.

8. Chuẩn bị Xcode: Apple account và Model Context Protocol

Beto muốn nói một điều quan trọng ở phase setup (video đăng ngày 09/10/2026), trước khi bạn duyệt plan. Nếu đây là lần đầu bạn cài Xcode trên máy, hãy mở nó ra. Bấm Command và dấu phẩy để mở Xcode settings. Ở cột trái, chọn Apple Accounts và đăng nhập bằng Apple account của bạn.

Trong tab Intelligence, kéo xuống, bạn sẽ thấy Model Context Protocol. Theo Beto (video đăng ngày 09/10/2026), mục này về cơ bản cho phép các agent bên ngoài dùng công cụ của Xcode. Hãy chắc rằng bạn luôn chọn "Always" ở đây. Theo anh, việc này cho phép Claude Code dùng Xcode để phát triển ứng dụng theo best practices, cùng một số agent skill có sẵn trong Xcode 27.1.

Xcode settings, tab Intelligence, mục Model Context Protocol với Allow External Agents to Use Xcode Tools đặt Always
Tab Intelligence trong Xcode settings (Xcode 27.1, video đăng ngày 09/10/2026): mục "Allow External Agents to Use Xcode Tools" dưới Model Context Protocol đặt là Always; phía trên có Agents in Xcode với Permissions và Plug-ins.

Plan trông ổn, nên anh chọn trong menu thả xuống "accept and bypass permissions". Agent bắt đầu làm ứng dụng (video đăng ngày 09/10/2026).

9. Theo dõi session từ điện thoại bằng Remote Control

Việc này sẽ mất một lúc. Beto để "Claude nấu" trong lúc anh nghỉ, nhưng anh vẫn muốn để mắt tới việc Claude đang làm. May là làm được bằng ứng dụng Claude (video đăng ngày 09/10/2026): vào App Store, tải Claude by Anthropic, mở ra, ở bên trái bạn sẽ thấy tab Code, và có thể bấm "add device".

Quay lại chat trên máy tính (video đăng ngày 09/10/2026), anh gõ /rc, tức remote control, rồi Enter, và gửi. Giờ anh thấy session đang chạy ra sao ngay trong ứng dụng trên điện thoại. Anh có thể đi nghỉ mà vẫn theo dõi session và điều khiển (steer) nó.

Beto cầm iPhone hiện session Focus Time iPhone app ở chế độ Remote control
Session "Focus Time iPhone app" ở chế độ Remote control trên điện thoại: Opus báo cả 18 test đều pass, test layout chạy sáu cỡ màn hình Duo và iPhone, và ô "Queue for after this turn" để gửi thêm việc (video đăng ngày 09/10/2026).

Claude vẫn làm việc trên máy tính của anh. Theo Beto (video đăng ngày 09/10/2026), bạn cần để máy tính bật, vì nó đang làm việc với Xcode và mọi thứ liên quan. Cứ để máy bật và đi nghỉ.

10. Bản đầu tiên sau 55 phút và thử trên simulator

Sau 55 phút (theo số đo của Beto, video đăng ngày 09/10/2026), có phiên bản đầu tiên của ứng dụng. Đó là một session dài, trong đó Opus test nhiều thứ trên các thiết bị khác nhau. Trong chat có vài screenshot của quá trình: có ảnh từ iPad mini, "tôi nghĩ vậy", anh nói; có ảnh iPhone Duo và ảnh Live Activity. Anh nói nó đã test mọi thứ.

Bản tóm tắt của Opus sau lượt build đầu, có screenshot Live Activity và danh sách What's in it
Tóm tắt của Opus sau lượt build đầu (video đăng ngày 09/10/2026): app build được cho Debug và Release, cả 18 test pass; hai thứ nó ghi là chưa test được trên simulator là gập mở iPhone Duo và giao diện Dynamic Island.

Giờ đến lượt chính mình test. Beto khuyên mở Xcode (lúc này màn hình settings của Xcode vẫn đang mở từ lúc nãy). Trên menu bar, chọn Xcode, rồi Open Developer Tool, chọn Device Hub. Theo Beto (video đăng ngày 09/10/2026), Device Hub là một ứng dụng macOS cho phép chạy simulator. Cột trái liệt kê các simulator có sẵn.

Anh chọn iPhone Duo, bấm Start (video đăng ngày 09/10/2026). Simulator hiện lên, vuốt sang phải là thấy app Focus Time, anh mở ra. Theo lời anh, Opus đã cài app lên simulator trong lúc test, nên app có sẵn ở đó; nếu app chưa có trên simulator hay iPad bạn muốn thử, cứ bảo Opus cài.

Đây là màn hình chính của ứng dụng (bản đầu, video đăng ngày 09/10/2026). Anh mở màn hình gập của iPhone Duo, tò mò muốn xem trông ra sao, và thốt lên "wow, cái này tuyệt quá". Anh bắt đầu một khoảng nghỉ, có năm phút, và mặt đồng hồ có một animation đẹp. Anh gập máy lại một chút, trông vẫn đẹp; đóng hẳn lại, vẫn tuyệt; xoay máy cũng vẫn đẹp. Anh pause, resume rồi đóng app được, và việc đó bật Live Activity như thấy trên màn hình. Nhấn giữ Live Activity thì nó mở rộng ra; anh nghĩ chỗ đó cần thêm chút khoảng trống, nhưng cũng ổn.

Simulator iPhone Duo mở ra trong Device Hub: bên trái timer 00:07, bên phải History với hai session Reading · Dune ch. 4
App trên simulator iPhone Duo trong Device Hub, ở trạng thái mở: bên trái là timer "Reading · Dune ch. 4" đang chạy, bên phải là History với hai session 25 giây; cột trái liệt kê các simulator có sẵn (video đăng ngày 09/10/2026).

Tiếp theo là widget. Nhấn giữ, anh có cỡ small và medium. Cỡ small cho thấy phần tóm tắt "today", và cũng thấy được live timer, lúc này đang là giờ nghỉ. Cỡ medium cũng đẹp và tự cập nhật. Theo anh (video đăng ngày 09/10/2026), Live Activities và home widget chạy được ngay từ đầu.

Anh cũng đã yêu cầu một chế độ 25 giây để test (video đăng ngày 09/10/2026), nên anh huỷ session đang chạy và bắt đầu một session 25 giây. Anh chuyển qua lại giữa các tab: History lúc này có hai session, và một cái nữa sắp kết thúc. Anh có yêu cầu một animation khi xong, và đây rồi: một animation tinh tế lúc kết thúc, anh thích nó, rồi một mục mới hiện ở bên phải.

11. Chạy app trên iPhone thật

Đến lúc thử trên thiết bị thật (video đăng ngày 09/10/2026). Để build lên điện thoại thật, cần mở project trong Xcode. Mẹo của Beto: quay lại Claude Code và bấm Command J để mở terminal. Trong terminal, chạy lệnh sau rồi Enter, Xcode sẽ bật lên với project:

xed .

Trong Xcode bạn thấy code và mọi thứ Opus đã làm. Theo Beto, phần còn lại rất đơn giản (Xcode 27.1, video đăng ngày 09/10/2026): chọn iPhone của bạn, ở đây là iPhone 17 Pro, rồi bấm nút play. Xcode sẽ build và cài ứng dụng lên thiết bị thật.

Trên điện thoại thật (video đăng ngày 09/10/2026), nhìn qua thì app trông rất đẹp; anh rất thích dark mode. Vì đang test nên anh chọn thời lượng ngắn. Anh bắt đầu một session mới tên "reading", 25 giây, rồi bấm start focus. App hỏi có muốn nhận thông báo không, anh cho phép. Tiến độ của Live Activity chạy theo thời gian thực, và bấm vào thì nó mở app.

Lock screen iPhone thật với Live Activity FOCUS Reading 0:14 và thanh tiến độ màu cam
Live Activity trên lock screen của iPhone thật: vòng tròn cam, nhãn "FOCUS · Reading", thời gian còn lại 0:14 và một thanh tiến độ chạy dần (video đăng ngày 09/10/2026).

Anh test widget: cỡ medium, anh thấy hình như cần thêm chút khoảng trống ở bên phải. Nhấn giữ, xem cỡ small: trông rất ổn, anh thích. Theo anh (video đăng ngày 09/10/2026), với lần lặp đầu tiên thì không tệ chút nào.

12. Thêm StandBy bằng link tài liệu Apple

Nhưng đây mới là chỗ vui, theo Beto. Sau prompt đầu tiên, việc là đánh bóng ứng dụng: đạt đúng giao diện bạn muốn, đúng cảm giác bạn muốn, rồi đi thêm một bước. Anh cho xem một ví dụ nhanh. Đây là một tính năng của iOS (video đăng ngày 09/10/2026): nếu bạn đang chạy timer và lật ngang điện thoại khi đang sạc, máy sẽ vào chế độ StandBy, và bạn xem được timer cùng tiến độ ở đó. Anh muốn app của mình có tính năng StandBy, để người dùng chỉ cần đặt điện thoại như vậy và học.

Anh vào tài liệu Apple Developer và copy link thẳng tới mục standBy. Theo anh (video đăng ngày 09/10/2026), đây là một phần tích hợp thêm khi bạn làm với WidgetKit, thứ app đã dùng sẵn. Theo anh, cứ copy link tài liệu rồi đưa cho Claude lúc nào cũng là một cách hay. Trang tài liệu trên màn hình ghi "The widget appears in StandBy", áp dụng từ iOS 17.0, iPadOS 17.0 và Mac Catalyst 17.0.

Quay lại chat (video đăng ngày 09/10/2026), anh dán link, rồi dùng dictation để nói phần còn lại. Khung chat hiện:

https://developer.apple.com/documentation/widgetkit/widgetlocation/standby This looks great. Can you now please add the option for standby?

Anh nói thêm thành lời: khi người dùng sạc điện thoại và lật ngang, họ thấy được live timer với giao diện đẹp mà mình đang làm. Anh thấy vậy là đủ và gửi đi (video đăng ngày 09/10/2026).

Sau 20 phút (theo số đo của Beto, video đăng ngày 09/10/2026), Opus xong việc. Nó đã đọc tài liệu, cải thiện UI rất nhiều, và làm thêm vài thứ anh không yêu cầu. Có một bản tóm tắt kèm screenshot. Home screen widget lúc này trông đẹp hơn hẳn, và StandBy đã được thêm. Trên màn hình, Opus ghi rằng nó không chạy được StandBy thật vì simulator không hỗ trợ, nên nó kiểm từng phần bằng cách render thật của hệ thống, và cả 22 test pass, bản Release build thành công.

Một điều quan trọng, theo Beto (video đăng ngày 09/10/2026): StandBy chỉ test được trên thiết bị thật. Nên cần build lại lên điện thoại. Anh quay lại Xcode, đảm bảo iPhone đang được chọn, bấm play. Nhân tiện anh khoe animation khi focus vào ô nhập liệu, "tuyệt quá". Rồi anh đưa máy vào chế độ StandBy: icon app hiện lên, bấm vào thì mở màn hình của app, nơi thấy được tiến độ trong lúc điện thoại đang sạc. Anh nhắc lại là chỉ test được trên thiết bị thật. Ở lượt lặp thứ hai này, Opus cũng tự cải thiện các widget.

iPhone nằm ngang trên đế sạc ở chế độ StandBy: mặt đồng hồ 24:04 FOCUS, chữ FOCUSING ON Reading, Ends at 11:00 AM
Chế độ StandBy trên iPhone thật sau lượt lặp thứ hai: mặt đồng hồ retro đếm ngược 24:04, bên phải là "Focusing on · Reading" và giờ kết thúc 11:00 AM (video đăng ngày 09/10/2026).

13. Đưa app lên TestFlight

Widget giờ trông đẹp hơn hẳn. Anh xem cỡ small; nếu muốn một cỡ khác, bạn cứ yêu cầu. Thế là test xong: app chạy tốt trên điện thoại thật, đã kiểm trên iPhone Duo và trông rất đẹp. Giờ sẵn sàng đưa lên TestFlight (video đăng ngày 09/10/2026).

Theo Beto (video đăng ngày 09/10/2026), deploy lên TestFlight rất dễ. Các bước anh làm trong Xcode:

  1. Mở project trong Xcode. Ở góc trên bên trái, bấm vào project Focus Time, là entry point chính (Xcode 27.1, video đăng ngày 09/10/2026).
  2. Vào tab Signing & Capabilities, đảm bảo Apple Developer account đã được thiết lập ở đây, và "Automatically manage signing" đang bật (video đăng ngày 09/10/2026).
  3. Ở ô chọn thiết bị phía trên, chọn "Any iOS Device (arm64)" (video đăng ngày 09/10/2026).
  4. Khi đã chọn xong và mọi thứ ở đây đúng, vào Product và chọn Archive. Bước này build ứng dụng cho production (video đăng ngày 09/10/2026).
  5. Chọn build mới nhất, bấm Distribute, chọn App Store Connect và bấm Distribute. App sẽ được upload (video đăng ngày 09/10/2026).
Xcode tab Signing and Capabilities: Automatically manage signing được bật, bundle identifier và App Groups
Tab Signing & Capabilities của target FocusTime: ô "Automatically manage signing" đã tích, Xcode Managed Profile, cùng ba target FocusTime, FocusTimeWidgets và FocusTimeTests mà Opus tạo (video đăng ngày 09/10/2026).

Đến đây, theo lời anh, đã có một ứng dụng trên TestFlight sẵn sàng để publish, anh bấm Done. Sau khi upload, vào developer account của bạn (App Store Connect), app nằm ở đó với tên "Focus Time: Retro Timer". Anh bấm tab TestFlight. Lúc đó build đang xử lý; theo Beto (video đăng ngày 09/10/2026), việc này thường mất vài phút.

Ở cột trái, bấm Internal Testing, đặt tên nhóm kiểu "internal" hay gì đó, đây là nhóm tester. Chọn Invite Testers, anh thêm chính mình vào. Khi build xử lý xong, nó sẽ trông như trên màn hình. Vào nhóm internal, chọn Builds, và build đã có sẵn trong đó theo mặc định (video đăng ngày 09/10/2026).

App Store Connect, tab TestFlight của Focus Time: Retro Timer, iOS Builds Version 1.0 build 1 Ready to Submit
Tab TestFlight trong App Store Connect: Version 1.0, build 1 ở trạng thái "Ready to Submit", hết hạn sau 90 ngày, gắn nhóm IN và một lời mời tester (video đăng ngày 09/10/2026).

Vì đã thêm mình làm tester, anh cài được ứng dụng qua TestFlight. Trong TestFlight, anh cài bản build production. Đúng là bản này đang ở dạng beta, nhưng theo Beto, khi bạn sẵn sàng nộp lên production thì sẽ dùng chính build đó. Và lúc này app chạy nhanh hơn hẳn; theo anh (video đăng ngày 09/10/2026), bạn sẽ thấy nó cực kỳ nhanh.

14. Từ đây đi tiếp

Từ đây, bạn đi theo hướng nào hợp với mình cũng được: tiếp tục chỉnh UI, tích hợp một tính năng cụ thể, hay đơn giản là thêm chế độ StandBy vào ứng dụng của bạn nếu nó còn thiếu. Theo Beto (video đăng ngày 09/10/2026), quy trình vẫn như vậy:

Mô tảthứ bạn muốn Plan/plan Cho agentcông cụ để test Tự testtrên máy thật Cải tiếnlặp tiếp lặp lại cho mỗi tính năng mới
Hình 14.1Quy trình Beto tóm lại ở cuối video: mô tả, lên plan, cho agent công cụ để test, tự test trên thiết bị thật, rồi tiếp tục cải tiến (video đăng ngày 09/10/2026).

Mô tả thứ bạn muốn, lên plan, cung cấp cho agent những công cụ nó cần để test, tự mình test trên thiết bị thật, và tiếp tục cải tiến (theo Beto, video đăng ngày 09/10/2026). Beto hy vọng bạn thích video và học được điều gì mới, và hẹn gặp ở video sau.

Nguồn và liên kết 9 nguồn

  1. Tên gốc: Can Claude Opus 5.5 Build a Real iPhone App?
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=S4h0TWyjOV0 youtube.com
  4. Kênh YouTube Code with Beto (Alberto Moedano): youtube.com/channel/UCh247h68vszOMA_OWpGEa5g youtube.com
  5. Tài liệu Claude Code về ứng dụng desktop, có mục iOS Simulator pane (đọc ngày 23/10/2026): code.claude.com/docs/en/desktop code.claude.com
  6. Tài liệu Claude Code về Remote Control, tiếp tục session trên máy tính từ ứng dụng Claude trên điện thoại (đọc ngày 23/10/2026): code.claude.com/docs/en/remote-control code.claude.com
  7. Apple Developer Documentation, WidgetKit, WidgetLocation.standBy, link Beto dán cho Claude (đọc ngày 23/10/2026): developer.apple.com/documentation/widgetkit/widgetlocation/standby developer.apple.com
  8. Trang tải Xcode và các bản beta của Apple Developer (đọc ngày 23/10/2026): developer.apple.com/download developer.apple.com
  9. TestFlight trên Apple Developer (đọc ngày 23/10/2026): developer.apple.com/testflight developer.apple.com