Skip to content

Epic: Add iOS Project Support to iloom #966

@acreeger

Description

@acreeger

Summary

Extend iloom's project capability system to detect and manage iOS projects — React Native, Expo, and native Xcode/SwiftUI — with support for both simulator and physical device deployment. This brings iOS projects to feature parity with iloom's existing web and CLI project support.

Context

iloom currently supports two project capabilities: 'cli' (projects with bin entries) and 'web' (projects with web framework dependencies like Next.js, Vite, Express). Each capability drives behavior across the tool — from framework detection during il init, to dev server management, to command routing in il open, il run, and il dev-server.

iOS projects need the same treatment: detect the project type, manage the development lifecycle (simulator, device, Metro bundler), and route commands appropriately.

Scope

In scope:

  • Add 'ios' as a new ProjectCapability
  • Detect iOS projects (React Native, Expo, native Xcode/SwiftUI)
  • iOS Simulator management (boot, install, launch, track per worktree)
  • Physical device deployment (xcodebuild with device destination, code signing)
  • React Native Metro bundler as a dev server strategy (port-based, fits existing pattern)
  • Native iOS build-and-launch utilities (does NOT fit DevServerStrategy — separate pattern)
  • Command routing for iOS in il open, il run, il dev-server
  • Framework detector agent update for iOS project initialization
  • macOS-only platform guard (iOS development requires macOS)
  • iOS-specific settings (simulator device, Xcode scheme, bundle ID, deploy target, development team for code signing)

Out of scope:

  • Android support (separate future epic)
  • Remote build services (e.g., EAS Build, Bitrise)
  • App Store distribution
  • CI/CD pipeline integration for iOS

Assumptions

  1. macOS is required for iOS development — feature will gracefully skip on other platforms
  2. React Native and Expo are the primary frameworks (TypeScript ecosystem), but native Xcode projects are also supported
  3. Physical device deployment requires a valid Apple Developer account and provisioning profile — iloom surfaces errors from xcodebuild, it does not manage signing itself
  4. For React Native, Metro bundler is the "dev server" (port-based, reuses existing DevServerStrategy pattern). For native iOS, a build-and-launch lifecycle replaces the dev server concept.

Key Architectural Decisions

  1. React Native uses DevServerStrategy; native iOS does not. Metro bundler is a long-running port-bound process — it fits DevServerStrategy. Native Xcode projects use a build-and-launch cycle — they get standalone utilities, not a strategy.
  2. Simulator UDID tracking per worktree. Each worktree tracks its assigned simulator to enable re-attachment and clean teardown.
  3. Port 8081 override for React Native. Metro defaults to 8081; iloom overrides this with its standard basePort + issueNumber assignment to avoid conflicts across worktrees.
  4. Code signing is passthrough. iloom passes developmentTeam to xcodebuild but does not manage certificates or profiles directly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Status

    In Progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions