Installed Software
Overview
Section titled “Overview”RunnerHub build machines come pre-installed with all essential development tools for iOS, macOS, watchOS, tvOS, and Android development. No additional setup is needed—start building immediately.
Each machine runs one of four golden images keyed by Xcode version. See Golden Images for exact tool versions per image.
Core Development Tools
Section titled “Core Development Tools”| Software | Version | Purpose |
|---|---|---|
| Xcode | 16.3, 16.4, 26.4, or 26.5-beta | Complete IDE and compiler suite (select via environment.xcode) |
| Command Line Tools | Matches Xcode | Compilers, headers, utilities |
| Swift | Matches Xcode | Swift compiler and runtime |
| Clang/LLVM | Matches Xcode | C/C++ compiler |
Language Runtimes
Section titled “Language Runtimes”| Language | Version | Notes |
|---|---|---|
| Node.js | 22 (Xcode 16.x) or 24 (Xcode 26.x) | Activated per-job via environment.node and nodenv when requested |
| npm | Latest for Node version | Node package manager |
| Yarn | Latest | JavaScript package manager (globally installed) |
| Python 3 | Latest system version | Python runtime (via brew) |
| Ruby | 3.3.6 (Xcode 16.x) or 3.4.7/4.0.2 (Xcode 26.x) | Managed by rbenv; .ruby-version files auto-switch Ruby |
Dependency Managers
Section titled “Dependency Managers”| Tool | Version | Platform |
|---|---|---|
| CocoaPods | Latest | iOS, macOS, watchOS, tvOS (installed as gem) |
| Swift Package Manager | Built-in | Swift packages |
| Bundler | Latest | Ruby gems |
| Gradle | Latest | Android build (installed via brew) |
Build Automation Tools
Section titled “Build Automation Tools”| Tool | Purpose | Installed |
|---|---|---|
| Fastlane | iOS/macOS automation gem | Yes |
| xcpretty | xcodebuild output formatter | Yes |
| xcodegen | Xcode project generator | Yes |
| xcbeautify | xcodebuild formatter | Yes |
| SwiftLint | Swift linting | Yes |
| SwiftFormat | Swift code formatter | Yes |
| SwiftGen | Swift code generation | Yes |
| Mint | Swift package manager CLI | Yes |
| Carthage | Dependency manager | Yes |
Homebrew Packages
Section titled “Homebrew Packages”All images include the following Homebrew formulae:
| Package | Purpose |
|---|---|
swiftlint | Swift linting |
swiftformat | Swift code formatting |
swiftgen | Swift code generation |
xcbeautify | xcodebuild output formatting |
xcodegen | Xcode project generation |
mint | Swift package manager |
carthage | Dependency manager |
cmake | Build system |
wget | Download files |
imagemagick | Image manipulation |
jq | JSON query and transform |
yq | YAML query and transform |
gh | GitHub CLI |
rbenv | Ruby version manager |
ruby-build | Ruby compiler (used by rbenv) |
gradle | Gradle build system |
ktlint | Kotlin linting |
python3 | Python runtime |
Homebrew Casks
Section titled “Homebrew Casks”All images include:
android-commandlinetools— Android SDK command-line toolsgoogle-cloud-cli— Google Cloud SDK
iOS/macOS Tools
Section titled “iOS/macOS Tools”| Tool | Purpose |
|---|---|
| xcodebuild | Build iOS/macOS apps |
| xcrun | Xcode command-line utility |
| simctl | Simulator control |
| codesign | Code signing |
| notarytool | macOS app notarization |
| xcresulttool | Xcode result analysis |
| dwarfdump | Debug symbol inspection |
| dsymutil | Debug symbol utility |
| lipo | Universal binary tool |
| install_name_tool | Binary linking tool |
| otool | Object file tool |
| nm | Symbol listing |
Android Development
Section titled “Android Development”Java Development Kit (JDK)
Section titled “Java Development Kit (JDK)”All images include multiple JDK versions:
- JDK 17 — Default
- JDK 21 — Available
- JDK 11 — Available
- JDK 26 — Available on Xcode 26.x images only
Set JAVA_HOME defaults to JDK 17. Switch versions by modifying JAVA_HOME in your pipeline or using jenv if needed.
Android SDK
Section titled “Android SDK”Full Android SDK is pre-installed at ~/Library/Android/sdk. Includes:
- Platforms: android-28 through android-36 (android-37 preview on 26.5-beta)
- Build-tools: 28.0.3, 29.0.2, 30.0.3, 33.0.2, 33.0.3, 34.0.0, 35.0.0, 35.0.1, 36.0.0 (37.0.0 on 26.5-beta)
- NDK: Multiple versions including 25.1.8937393, 27.3.13750724, 28.2.13676358, 29.0.13113456 (exact versions vary per image; see Golden Images)
- CMake: 3.18.1, 3.22.1
- Command-line tools: Latest via
android-commandlinetoolscask
ANDROID_HOME is pre-set to ~/Library/Android/sdk.
Flutter Development
Section titled “Flutter Development”Flutter SDK
Section titled “Flutter SDK”Flutter SDK is not pre-installed. Instead, projects use FVM (Flutter Version Manager) at build time. This follows the Codemagic model and avoids volatile version dependencies.
Using Flutter in Pipelines
Section titled “Using Flutter in Pipelines”Set environment.flutter in your YAML to specify the Flutter version:
jobs: build: environment: flutter: "3.19.0" # FVM will install this version steps: - name: Get packages run: fvm flutter pub get
- name: Build iOS run: fvm flutter build iosImportant: The Flutter SDK is installed by FVM at ~/.fvm/, but ~/.fvm/default/bin is not on PATH. Always invoke Flutter as fvm flutter …, not bare flutter ….
Note: FVM is pre-installed on all images. See the Flutter documentation for detailed setup.
System Tools
Section titled “System Tools”| Tool | Purpose |
|---|---|
| Git | Version control |
| curl | Download files |
| wget | Download files (alternative) |
| jq | JSON query and transform |
| zip / unzip | Archive compression |
| gzip / gunzip | Gzip compression |
| tar | Archive tool |
| sed, awk, grep | Text processing |
| defaults | macOS defaults database |
| plutil | Property list utility |
| PlistBuddy | Plist editing |
| security | Keychain and certificate management |
| killall | Process termination |
| lsof | List open files |
| ps | Process status |
| date | Timestamp utility |
| md5 | File checksums |
Using Pre-Installed Software
Section titled “Using Pre-Installed Software”In Your Pipeline
Section titled “In Your Pipeline”Access any pre-installed tool directly in your build steps:
steps: - name: Install pods run: pod install
- name: Build with fastlane run: fastlane build
- name: Run tests run: xcodebuild test -scheme MyApp
- name: Process JSON run: curl https://api.example.com/status | jq '.status'No Installation Required
Section titled “No Installation Required”Tools are ready to use—no brew install, npm install -g, or setup needed for pre-installed packages.
Adding Additional Software
Section titled “Adding Additional Software”Node.js Packages
Section titled “Node.js Packages”Install Node.js packages globally or locally:
steps: - name: Install global CLI run: npm install -g @my-org/my-cli
- name: Use it run: my-cli buildPython Packages
Section titled “Python Packages”Install Python packages:
steps: - name: Install Python package run: pip3 install requests
- name: Use it run: python3 my_script.pyRuby Gems
Section titled “Ruby Gems”Install Ruby gems:
steps: - name: Install gem run: gem install some-gem
- name: Use it run: some-gem commandOther Tools via Homebrew
Section titled “Other Tools via Homebrew”Homebrew is fully functional during job execution. Install additional tools as needed:
steps: - name: Install tool run: brew install my-tool
- name: Use it run: my-tool --versionCompiling from Source
Section titled “Compiling from Source”For tools not available through Homebrew, npm, pip, or gem, download and compile them:
steps: - name: Download and build tool run: | curl -o /tmp/tool https://example.com/tool.tar.gz cd /tmp && tar xzf tool.tar.gz cd tool && ./configure && make ./tool --versionNode.js Version Management
Section titled “Node.js Version Management”To use a specific Node.js version, set environment.node in your pipeline YAML:
jobs: build: environment: node: "20.10.0" # nodenv will activate this version steps: - name: Verify Node version run: | node --version npm --versionWhen environment.node is set, the agent activates that version via nodenv before running job steps. Node versions are available per image—see Golden Images.
Ruby Version Management
Section titled “Ruby Version Management”Ruby versions are managed by rbenv. If your project has a .ruby-version file at the root, it will be automatically applied when the agent clones the repository:
steps: - name: Check Ruby version run: ruby --versionThe agent sources .zshenv on every SSH session, which runs eval "$(rbenv init - zsh)", ensuring the correct Ruby version is always active.
Verifying Installed Software
Section titled “Verifying Installed Software”Check Specific Tool
Section titled “Check Specific Tool”steps: - name: Verify tool run: | which fastlane fastlane --version which xcodebuild xcodebuild -versionList All Installed
Section titled “List All Installed”steps: - name: System info run: | system_profiler SPSoftwareDataType brew list gem list pip3 list java -versionTesting Tools
Section titled “Testing Tools”| Tool | Purpose |
|---|---|
| xctest | Built-in unit test framework |
| instruments | Performance profiling |
| xctestrun | Test execution |
Known Limitations
Section titled “Known Limitations”Not Available on Cloud Machines
Section titled “Not Available on Cloud Machines”The following tools are not installed on RunnerHub build machines:
- Flutter SDK — Use FVM instead (see Flutter Development section above)
- pnpm — Use npm or yarn instead
- nvm — Use
environment.node+nodenvinstead - Tuist — Use xcodegen instead
- xcov — Use built-in Xcode code coverage tools
- Apple’s swift-format (hyphenated) — Use
swiftformat(Homebrew package) instead - aws CLI — Use AWS SDK in your code instead
- Azure CLI — Use Azure SDK in your code instead
- Docker — Not available on cloud machines
- Linux tools — macOS only
For needs not met by pre-installed software:
- npm/pip/gem: Use these package managers to install additional tools
- brew install: Works during job execution; changes don’t persist across jobs
- Self-hosted agents: Use VM mode for full OS customization
Q: What Xcode version is running?
A: Depends on environment.xcode in your YAML. Cloud machines offer Xcode 16.3, 16.4, 26.4, and 26.5-beta. See Golden Images.
Q: Can I use a different Node.js version?
A: Yes. Set environment.node in your pipeline YAML (e.g., environment.node: "22.11.0"). The agent activates it via nodenv before running steps.
Q: How do I switch Ruby versions?
A: Add a .ruby-version file to your repository root (e.g., 3.3.6). The agent auto-activates it via rbenv on each job.
Q: Is Homebrew functional?
A: Yes. brew install works during job execution. Changes don’t persist across jobs—run brew install in each step if needed.
Q: Can I install Docker? A: Not on cloud machines. Consider self-hosted agents if you need virtualization.
Q: Can I compile and use my own tool? A: Yes, download the source and compile it in your pipeline.
Q: What about Rust, Go, or other languages? A: Many languages can be installed via Homebrew or their own installers. Use in your pipeline as needed.