xcodes runtimes install returns immediately with 'Finished' when run without TTY (SSH non-interactive)
Nobody has claimed this yet.
- Dominant language
- Swift
- Stars
- 4.8k
- Forks
- 182
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 1
Description
Description
When running xcodes runtimes install via SSH without a TTY (e.g., through Ansible or ssh user@host 'command'), the command returns immediately with "Finished" output and exit code 0, even though the runtime download has not started or completed.
Steps to Reproduce
-
SSH into a macOS host without allocating a TTY:
ssh user@host '/opt/homebrew/bin/xcodes runtimes install "iOS 18.1"' -
Observe that the command returns immediately with:
Finished -
Verify that no runtime was actually installed:
xcrun simctl list runtimesShows no iOS 18.1 runtime.
Expected Behavior
The command should block and download the runtime, showing progress, even when run without a TTY. Or, if TTY is required, it should fail with a clear error message rather than silently claiming success.
Actual Behavior
- Returns immediately (< 2 seconds)
- Outputs "Finished"
- Exit code: 0
- No runtime is downloaded/installed
Workaround
Force TTY allocation when running via SSH:
ssh -tt user@host '/opt/homebrew/bin/xcodes runtimes install "iOS 18.1"'
Or in Ansible:
vars:
ansible_ssh_common_args: "-o RequestTTY=force"
Environment
- xcodes version: 1.6.2
- macOS version: 26.1
- Xcode version: Xcode 16.1
- Installation method: Homebrew
Additional Context
This issue makes it difficult to automate runtime installation via configuration management tools like Ansible, which don't allocate TTYs by default. The command should either work without a TTY or fail clearly instead of silently succeeding without doing anything.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing xcodes runtimes install "iOS 18.1" over SSH without a TTY, then trace the runtimes install command path in the repository. Compare its behavior with forced TTY allocation and define done as either completing the download without a TTY or returning a clear nonzero error instead of Finished with exit code 0.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, swift
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100