Pinpoint it, then troubleshoot

Keep your build jobs running

Troubleshoot connectivity, toolchains, signing, and billing. Check the commands and limitations below first; if the issue persists, share your node details and redacted logs with support.

For issues with a rented node, submit a ticket from the account used for the order so we can check the instance and billing details.

Start with the stage where the issue occurs

Choose a starting point based on where the failure occurs. You don't need to change the entire pipeline first—check whether a minimal reproducible job passes.

Account & billing

Check the email address on the order, rental term, and billing status. Before renewing, confirm the instance and billing period. After payment, rely on the result shown in the console.

Connectivity & remote desktop

First identify whether SSH is unreachable, authentication is failing, or the graphical interface won't connect. Note the exact error, and never include your login password in a ticket.

Xcode & signing

Check the active developer directory first, then verify the certificate's private key, provisioning profile, and target. Test toolchain and signing issues separately.

CI/CD setup

Check the runner's execution user, labels, and working directory. Once a manual job passes, add automated triggers and credential injection.

Data & reinstallation

Separate source code, caches, and secrets. Back up essential data outside the node before reinstalling, and verify that the backup can be restored.

Verify with one command

Frequently asked build machine questions

The paths, schemes, and project names below are command examples. Replace them with your own project details before running the commands. Test operations involving permissions or certificates with a single job first.

How do I switch between Xcode versions with xcode-select?

Check the current developer directory and version, and make sure the target Xcode version is installed. The example below switches the system-wide default to /Applications/Xcode.app. To use another version, replace it with the actual application path.

xcode-select -p
xcodebuild -version
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcodebuild -version
xcrun --find swift

A system-wide switch affects other jobs launched afterward. If different pipelines need different versions, set DEVELOPER_DIRin each job's environment instead of having jobs repeatedly change the global directory.

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -list -workspace MyApp.xcworkspace

After switching, list the schemes and run an Archive. If platform components are missing or first-run setup is required, initialize the toolchain in the macOS graphical interface before resuming automation.

How do I import a distribution certificate and provisioning profile?

Prepare a certificate export that includes the private key, its password, and a provisioning profile that matches the app identifier and distribution method. A certificate without its corresponding private key usually can't sign code.

  1. On the macOS account that runs the build, open Keychain Access and import the certificate into that user's keychain.
  2. Expand the certificate and confirm its private key is listed beneath it. Use the command below to check for valid code-signing identities.
  3. Install the provisioning profile as required by your Xcode version. In the project signing settings, verify the Team, Bundle Identifier, and distribution method.
  4. Check signing settings for the app, widgets, and extensions individually, then validate the Archive and export.
security find-identity -v -p codesigning

The CI execution user's keychain environment may differ from that of the remote desktop user. For unattended builds, unlock the keychain in the job and configure the required access permissions. Read passwords from protected CI variables; don't store them in your repository, command output, or support ticket.

If a manual build succeeds but CI fails, first compare the execution user and keychain state. For signing errors, provide only the certificate type, validity period, and redacted error lines. Never upload private keys or certificate passwords.

Will data on the node be retained after a system reinstall?

Don't treat reinstallation as a way to preserve files. It may erase the system and working directories. Before submitting a request, confirm the scope of work through a console ticket and back up data outside the node. At the end of the rental term, the node's disks are erased, so it can't be used to recover data afterward.

Back up at least any unpushed source code, build configuration, essential artifacts, provisioning profiles, and protected key material. Caches such as DerivedData and dependency downloads can be regenerated, but they may slow the first build after restoration.

A completed backup isn't necessarily restorable. Extract it to a separate directory, check the file count and key settings, and make sure you can retrieve the latest artifact before stopping jobs on the original node. After reinstallation, reinstall the toolchain, restore the signing environment, and register the runner again.

How do I renew before my rental term expires?

Sign in to the account used for the order. In the console, check the instance, expiry date, and available renewal periods, then pay the invoice shown on the page. Use the live result in the console to confirm the renewal and new rental term—not a payment screenshot or the page shown before you closed your browser.

We accept USDT-TRC20 and Visa, Mastercard, and Amex via Stripe. All payments are charged in USD; actual payment options depend on the gateways returned by the backend. Before an on-chain payment, verify the network, amount, and recipient details. After a card payment, return to the console and check the invoice.

If the invoice and instance status don't match, submit the order number, invoice number, and transaction reference. Don't make another payment to try to fix the status, and never send your full card number in a ticket. Back up artifacts and essential files before expiry; renewal isn't a data backup method.

Can't connect over SSH or remote desktop? What should I check first?

First check the node address, port, username, and instance status in the console. Distinguish a connection timeout from an authentication failure: for a timeout, check network reachability; for an authentication failure, check the username, password, or key. SSH and VNC have separate connection details—don't mix up their ports.

ssh -v -p PORT USER@HOST

Replace PORT,USER, andHOST with the actual details. If the logs show a changed host fingerprint, confirm the reason using trusted console information or a support ticket. Don't disable host identity verification.

Use remote desktop to check the macOS graphical interface, Keychain, and Xcode settings; use SSH for command-line work and CI. Before sharing logs, remove sensitive information from usernames, addresses, and local paths. Keep only the error type and sequence of events.

Why do jobs keep waiting after I register a self-hosted runner?

Check four things: whether the runner is online, whether the job's labels match, whether the project is allowed to use the runner, and whether the process runs as the correct user. Successful registration only establishes an association—it doesn't mean every job will be assigned to that node.

Start with a test job that only prints toolchain information. Confirm the execution user, directory, and Xcode version before adding dependency installation and signing steps.

whoami
pwd
xcode-select -p
xcodebuild -version
security find-identity -v -p codesigning

Include the macOS version, chip architecture, and purpose in the labels, then select them explicitly in the project settings. For the initial setup, limit execution to one job. Check that caches, keychains, and artifact directories don't overlap before increasing concurrency. Treat registration tokens as credentials—never include them in tickets or build logs.

The project compiles, but Archive fails. How can I narrow down the cause?

First confirm that you're using the correct workspace, shared scheme, and Release configuration. Archive and simulator builds follow different paths; check signing, architecture, and export settings for the device target separately.

xcodebuild -list -workspace MyApp.xcworkspace
xcodebuild archive \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath build/MyApp.xcarchive

Keep the first substantive error and its context instead of just the final failure message. Check dependency installation, script phases, signing, and disk writes separately. After Archive succeeds, validate the exported artifact too; a completed archive doesn't mean a distributable package has been created.

Out of disk space—can I just delete all caches?

First check disk usage and job status, then distinguish rebuildable caches from artifacts you need to keep. Don't delete a directory that a running job depends on, or treat source code, signing materials, or an Archive that hasn't been uploaded as cache.

df -h
du -sh ~/Library/Developer/Xcode/DerivedData
du -sh ~/Library/Developer/Xcode/Archives

Set separate retention rules for caches and artifacts. The first compile and dependency resolution after cleanup may take longer, so treat that build as a cold-start test. If you regularly run short on space, measure project and artifact growth before choosing a more suitable machine or SSD add-on.

Use consistent terminology in support tickets

Eight common terms for resources, connectivity, builds, and signing. Name the specific component when describing an issue to reduce back-and-forth.

Physical node
A Mac mini running macOS. XCRent provides a dedicated physical machine, not a virtual machine. Node details help identify the instance and aren't the same as a CI job ID in your project.
Dedicated
One tenant uses the entire physical node during the rental term. Multiple jobs from that tenant still share CPU, memory, and disk, so you need to manage concurrency and isolate working directories.
VNC
A remote desktop connection for using the macOS graphical interface. Use it to check Xcode settings, Keychain, and system status. Get the actual address and credentials from the console after signing in.
SSH
An encrypted command-line connection for running commands, transferring files, and deploying automation. Protect your private key and verify the server's identity when using key-based authentication. SSH is not a remote desktop protocol.
self-hosted runner
A CI execution process deployed on your own node. It receives project jobs and runs them as a specified user. Online status, labels, permissions, and the working directory all affect whether a job can run.
Archive
An Xcode build archive containing the app and related information for later export. A successful Archive doesn't mean export has succeeded; check signing and distribution settings as well.
Provisioning profile
A signing file that specifies the app identifier, capabilities, certificates, and distribution scope. It must match the target settings and can't replace a distribution certificate and its corresponding private key.
Unified memory
Memory shared by the CPU and GPU in Apple Silicon. When builds, simulators, and model workloads run at the same time, assess their combined memory pressure instead of assigning all available capacity to a single job.
Uptime & credits

Monthly uptime, not build failures

Nodes run 365 days a year. Check service availability separately from project build results: expired certificates, project configuration errors, and user actions don't by themselves indicate that a node was unavailable.

Monthly uptime commitment

99.9%

If monthly availability falls below the commitment, rental-time credits are calculated based on the duration below the target. To request a review, provide the instance, affected period, and connection records. Support will verify server-side records and applicable coverage.

Past 90-day records

This page isn't connected to node monitoring, so it doesn't show daily status or present the commitment as measured uptime. Check actual incident records through a console ticket.

Lookback period
Past 90 days
Monitoring status
No monitoring data connected
Credit review period
Reviewed monthly

What evidence to keep

Record when the issue began and was resolved, including the time zone. Keep connection errors, retry results, and the affected instance details. Exclusions such as force majeure and user actions are subject to the service terms. Don't submit only a screenshot of a failed pipeline, and don't estimate node downtime from a local network outage.

Submit a ticket with everything needed to start troubleshooting

If you've rented a node, submit a ticket through the console. For presales, business inquiries, or security reports, email support@xcoderent.com. These are the two channels for all support requests.

  1. 01

    Identify the instance

    Include the order number, node location, and machine model. Nodes are available in Singapore, Tokyo, Seoul, Hong Kong, the eastern United States, and the western United States. Specify XR Build 16, XR Build 24, or XR Build Pro 64 rather than just “that build machine.”

  2. 02

    Describe the issue

    State which step failed, when it started, whether it's ongoing, and whether you recently switched Xcode, changed signing settings, or updated the runner. Include the time zone so records from different nodes can be compared accurately.

  3. 03

    Include a minimal reproduction

    Provide redacted commands, the first substantive error, and the checks you've already tried. Never send private keys, login passwords, registration tokens, or complete payment card details. Remove sensitive paths from logs first.

  4. 04

    Clarify the impact

    Distinguish between one project failing, all jobs failing, and the node being unreachable. If some jobs still run, say which pass and which fail so support can determine whether the issue is with the toolchain, project, or instance.

Where can I check ticket progress?

Check ticket status, requests for more information, and support replies in the console. We don't promise an unconfirmed fixed response time in minutes on this page. If you have a delivery deadline or need an estimated recovery time, note it in your ticket so support can assess the issue. Submitting the same issue again won't add useful troubleshooting details; update the original ticket instead.

Still can't find the answer?

Tell us about your build queue, expected usage period, or specific error. Visit the contact page for guidance on preparing an inquiry. For an existing order, keep the full troubleshooting history in a console ticket.