Documentation
iOS Compute Runbook
Plan, route, and operate Syrus Jobs that compile or test iOS code on native Mac workers.
iOS Compute Runbook
Syrus supports iOS compilation and execution through native macOS compute workers. Use this runbook when a repository needs Xcode, SwiftPM, or iOS simulator validation. Coding Mode iOS/editor integration is deferred: iOS work is supported through Jobs, planned execution capabilities, repository targets, and graders, not through an interactive iOS editor surface.
1. Prepare the repository
Declare macOS/Xcode requirements in .syrus.yml; Syrus does not infer them from issue text.
project:
id: ios
label: iOS App
kind: ios_app
capabilities:
os: macos
arch: arm64
toolchain: xcode
runtime: ios_simulator
grade:
- type: xcodebuild
workspace: apps/ios/MobileApp.xcworkspace
scheme: MobileApp
destination: "platform=iOS Simulator,name=iPhone 16,OS=latest"
derived_data_path: .syrus/DerivedData/ios
result_bundle_path: build/syrus/ios/MobileApp.xcresult
junit_output: build/syrus/junit/ios-tests.xml
when_files_changed:
- "apps/ios/**"
phases: [review, landing, ci]
timeout_minutes: 45
Mixed repositories should also mark backend graders with Linux requirements when they should stay on Linux workers:
grade:
- name: backend
run: bin/rspec
capabilities:
os: linux
For common commands, enable the bundled iOS plugin and use type: xcodebuild or type: swiftpm. The typed graders still produce ordinary Syrus grader metadata with macOS/Xcode/iOS simulator capabilities, result bundle and artifact paths, timeouts, and optional JUnit output.
2. File the Job with the right primary worker
Capability selection happens before implementation starts. For an iOS-only Job or a mixed iOS/backend Job whose implementation needs Xcode feedback, choose primary planned execution like:
{
"capabilities": {
"os": ["macos"],
"arch": ["arm64"],
"toolchain": ["xcode"],
"runtime": ["ios_simulator"]
}
}
Plan mixed Jobs for the most constrained implementation work, usually the iOS project. After code exists, target graders refine placement from the actual diff: iOS graders can run on Mac workers while backend graders run on Linux workers, and Syrus waits for all selected grader results.
3. Run Mac workers beside Linux
Keep web, data services, the home worker, Linux compute, and Linux backend graders in the normal Linux deployment. Add Mac hosts as external launchd compute workers that connect outbound to Syrus, the database, storage, GitHub, model providers, package registries, and any internal build services.
SYRUS_ROLE=worker
SOLID_QUEUE_CONFIG=config/queue.compute.yml
SOLID_QUEUE_SKIP_RECURRING=1
SYRUS_DATA_ROOT=/var/lib/syrus
SYRUS_WORKER_POOL_NAME=macos-xcode
SYRUS_WORKER_CAPABILITIES=os:macos,arch:arm64,toolchain:xcode,runtime:ios_simulator
Before loading launchd, run:
/opt/syrus/current/bin/macos-worker-check --env-file /etc/syrus/worker.env
The check validates Ruby/Bundler, Node/npm, Git, Xcode Command Line Tools, full Xcode selection, iOS simulator runtimes, required env, and production credentials without starting queue work.
4. Debug no-capable-worker blockers
If an iOS Workflow is blocked with no_capable_worker, inspect the Workflow's blocked details, queue-admission decision, Admin Workers, read_worker_health, or read_queue. Look for:
- selected queue, usually
runs-macos-arm64; - required capabilities:
os: macos,arch: arm64,toolchain: xcode,
runtime: ios_simulator;
- live worker heartbeats and consumed queues;
- Xcode and simulator probe diagnostics;
- drain or updater state for Mac workers.
Typical fixes are to start a Mac worker, correct SOLID_QUEUE_CONFIG, update SYRUS_WORKER_CAPABILITIES, install or license Xcode, add the simulator runtime, clear a stuck drain, or retry the Job with the right primary planned execution.
Current limits
- Coding Mode iOS/editor integration is not included in this release.
- Mac workers are compute-only and should not consume chat, polling, indexing,
cleanup, video, or control-plane queues.
- Syrus reports readiness; it does not install Xcode, accept licenses, manage
signing identities, install provisioning profiles, or create simulator images.
- Target graders can refine placement after a diff exists, but mutable
implementation work does not live-migrate between Linux and macOS.