Фабрика iPhone и Apple Watch: SwiftUI, Xcode 27 и агент
25.1Какой стек лучший в 2026 году
IPHONE + APPLE WATCH · НАТИВНО · АГЕНТ В XCODE
Для iPhone и Apple Watch одновременно лучший стек — нативный SwiftUI + Xcode 27 с агентом, подключённым через встроенный Xcode MCP. Flutter и React Native официально не рисуют интерфейс на watchOS: часы всё равно пришлось бы писать на SwiftUI отдельно.
| 1 · SwiftUI + Xcode 27 + Claude | Полная поддержка watchOS, один язык на оба устройства, превью, симуляторы, подпись и публикация. Агент собирает, тестирует и проверяет UI через Xcode MCP. Наш выбор. |
| 2 · Skip + SwiftUI | Swift-код дополнительно превращается в Android. Часы — всё равно отдельный нативный таргет. |
| 3 · Kotlin Multiplatform | Общая логика может работать на watchOS, интерфейс часов — только SwiftUI. Имеет смысл, если уже есть Android-команда. |
| 4 · Flutter | Отлично для iPhone + Android, но официально не поддерживает watchOS. Часы — отдельное SwiftUI-приложение и мост между ними. |
| 5 · React Native / Expo | Не рендерит на часах; watch-таргет генерируется плагином и пишется на Swift. |
Видео разработчика с Flutter и симулятором iPhone — это рабочий путь для телефона. Для часов и максимального качества на Apple-устройствах выигрывает нативный SwiftUI, а писать Swift за вас будет агент.
25.2Установка Xcode и симуляторов
APP STORE · ~11 ГБ + СИМУЛЯТОРЫ · APPLE SILICON
- Откройте Xcode в App Store → Получить → подтвердите Touch ID. Нужно ~11 ГБ для Xcode и ещё ~12 ГБ для симуляторов iOS и watchOS — проверьте свободное место.
- Первый запуск Xcode: примите лицензию и отметьте платформы iOS и watchOS.
- Остальное — одной командой в терминале:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer # пароль вводите вы sudo xcodebuild -license accept xcodebuild -runFirstLaunch xcodebuild -downloadPlatform iOS xcodebuild -downloadPlatform watchOS xcodebuild -version && xcrun simctl list devices available | grep -E "iPhone|Watch" | head
df -h / — нужно минимум 30 ГБ свободных. Старые симуляторы чистит xcrun simctl delete unavailable.25.3Подключить агента к Xcode
XCODE MCP (XCRUN MCPBRIDGE) · XCODEBUILDMCP
Два моста, которые дополняют друг друга. Xcode MCP встроен в сам Xcode: сборка, тесты, диагностика, превью и, начиная с Xcode 27, управление симулятором, включая Digital Crown часов. XcodeBuildMCP (теперь MobileBuildMCP, от Sentry) — сборка и симуляторы из командной строки, без открытого Xcode.
- Xcode → Settings → Intelligence → Model Context Protocol → «Allow External Agents to Use Xcode Tools» → While Xcode is Open.
claude mcp add --transport stdio xcode -- xcrun mcpbridge npm i -g mobilebuildmcp@latest claude mcp add --transport stdio MobileBuildMCP -- npx -y mobilebuildmcp@latest mcp claude mcp list
Сборка, ошибки компиляции, превью SwiftUI, тесты, кнопки часов в симуляторе.
Список симуляторов, сборка и запуск, скриншоты, логи — без открытого Xcode.
Settings → Intelligence → Agents → Claude: отдельный вход, отдельная настройка.
25.4Первое приложение: таймер на iPhone и часах
SWIFTUI · ОДИН КОД — ДВА УСТРОЙСТВА
- Xcode → File → New → Project → вкладка watchOS → App → выберите вариант «Watch App with New Companion iOS App». Имя:
TenMinuteBody, Interface: SwiftUI. - Создайте файл
TimerView.swiftи отметьте оба таргета — iOS и Watch. - В
ContentViewобоих таргетов вернитеTimerView().
import SwiftUI
#if os(watchOS)
import WatchKit
#endif
// Один файл для iPhone и Apple Watch: добавьте его в оба таргета (Target Membership).
struct TimerView: View {
@State private var remaining = 600 // 10 минут
@State private var running = false
private let tick = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
VStack(spacing: 14) {
Text(String(format: "%02d:%02d", remaining / 60, remaining % 60))
.font(.system(size: 56, weight: .semibold, design: .rounded))
.monospacedDigit()
.contentTransition(.numericText(countsDown: true))
Button(running ? "Пауза" : "Старт") {
running.toggle()
haptic()
}
.buttonStyle(.borderedProminent)
.tint(Color(red: 1.0, green: 0.31, blue: 0.23)) // коралл #FF4F3A
Button("Сброс") { running = false; remaining = 600 }
.buttonStyle(.bordered)
}
.padding()
.onReceive(tick) { _ in
guard running, remaining > 0 else { return }
withAnimation(.snappy) { remaining -= 1 }
if remaining == 0 { running = false; haptic() }
}
}
private func haptic() {
#if os(watchOS)
WKInterfaceDevice.current().play(.success)
#else
UIImpactFeedbackGenerator(style: .medium).impactOccurred()
#endif
}
}
#Preview { TimerView() }cd ~/apps/TenMinuteBody xcodebuild -scheme TenMinuteBody -destination "platform=iOS Simulator,name=iPhone 17 Pro" build open -a Simulator
Превью SwiftUI (⌥⌘↩) обновляется на лету — это и есть «hot reload» нативной разработки. Для живого обновления в симуляторе iPhone есть InjectionNext + Inject; для часов достаточно превью.
25.5Директива агенту: приложение под ключ
ВЫ ГОВОРИТЕ — CLAUDE ПИШЕТ SWIFT
@cpn приложение 10-Minute Body для iPhone и Apple Watch ЦЕЛЬ: таймер 10 минут, 6 упражнений с картинками, вибрация на смене упражнения, тёмная и светлая тема ФАЙЛЫ: ~/apps/TenMinuteBody (SwiftUI, таргеты iOS + watchOS) ИСПОЛНИТЕЛИ: Claude сам, Xcode MCP + MobileBuildMCP; аудит Codex видимо ГОТОВО, КОГДА: BUILD SUCCEEDED для iOS и watchOS · скриншоты iPhone 17 Pro и Watch из симулятора · 0 warnings ДЕПЛОЙ: нет
25.6TestFlight и App Store
APPLE DEVELOPER PROGRAM · $99 / ГОД
| Аккаунт | Apple Developer Program на developer.apple.com — $99 в год. Без него — только симулятор и ваш собственный iPhone по кабелю. |
| Подпись | Xcode → Signing & Capabilities → Team → «Automatically manage signing». |
| Загрузка | Product → Archive → Distribute App → App Store Connect → Upload. Через 10–30 минут сборка появится в TestFlight. |
| Тестеры | До 100 внутренних тестеров сразу, внешние — после короткой проверки Apple. |
| Деньги | Приложение — апсейл курса: покупка в приложении или доступ по коду из Lava/Gumroad. |
25.7Чек-лист: фабрика запущена
ОТМЕЧАЙТЕ — ПРОГРЕСС СОХРАНЯЕТСЯ
xcodebuild -versionпоказывает Xcode 27- Скачаны симуляторы iOS и watchOS
- В
claude mcp listестьxcodeиMobileBuildMCP - Таймер запущен в симуляторе iPhone
- Таймер запущен на симуляторе Apple Watch
- Агент собрал приложение по директиве без ручного Swift
- Сборка загружена в TestFlight