Cloud Mac Support

Try these checks before contacting support

Start by locating the issue, from your connection and toolchain to your renewal.
Current customers can submit a ticket through the console. Unreachable nodes are treated as urgent.

Tickets are for troubleshooting rented nodes. For pre-sales, volume enquiries or security reports, use the email address on our contact page.

Find your issue

Start with the right troubleshooting guide

These four issue types call for different approaches. An unconfirmed payment does not mean the node is faulty, and a failed build does not always require a restart.

Connections & sign-in

SSH timeouts, a blank remote desktop or display issues with screen sharing. Check your order credentials and network first, then determine whether the issue is with the connection or the desktop session.

Xcode & simulators

The wrong Xcode selected on the command line, disk space taken up by caches or a signing identity that is not visible. Check versions and Keychain results to pinpoint environment differences.

CI runners

A build works in an interactive terminal but fails in the pipeline. Check the runner user, PATH, Keychain and simulator state before increasing concurrency.

Billing & renewals

A transfer is awaiting confirmation, a card payment failed or the expiry date is unclear. The console shows the latest order status and payment result.

Connection help

Check the port, then the session

Get the host address, connection port, username and key requirements from your order details in the console. Set the variables in the commands below for your order first; example aliases are not real node addresses.

SSH connection times out

First distinguish a timeout from an authentication failure. A timeout usually happens before the TCP connection is established, so check the address, port, local network route and node status. If you see Permission denied, authentication has started; check the username and key instead of repeatedly changing ports.

nc -vz "$NODE_HOST" "$SSH_PORT"

Run this in a local terminal. A successful connection confirms only that the port is reachable, not that authentication has passed. If it fails, try again on another available network and record both results. If the port is reachable but sign-in fails, use ssh -vv to collect authentication logs. Before submitting them, remove sensitive details such as usernames, addresses and local paths.

Black screen after connecting with VNC

A connected client with no image is different from a completely unreachable port. Disconnect any duplicate graphical sessions, then check the client’s image quality and the desktop session. If SSH still works, check the current console user to see whether a graphical session is already logged in.

stat -f '%Su' /dev/console

Run this in an SSH session on the node. The output is one clue, not proof that the desktop service is working. Do not terminate unknown processes or restart a node that is building. Include when the black screen started, the client name, whether SSH works and the session check results in your ticket so support can investigate further.

Screen sharing resolution is wrong

First determine whether the remote resolution changed or the local client scaling is making text look blurry. Check the screen-sharing scaling and adaptive image quality options, then inspect the remote display information. Resizing the client window does not change the remote display mode.

system_profiler SPDisplaysDataType

Run this on the node and review the display information. If the expected mode is missing, note the current resolution, client window size and available display modes. Screenshots should show only display settings, not project files, credentials or business data. Do not start by installing display drivers from an unknown source.

If both SSH and the graphical connection are unreachable, and the issue persists on another network, submit an unreachable-node ticket. Reinstalling the client repeatedly is not a substitute for reporting an outage.

Dev environment

Use the same toolchain in your terminal and builds

Save error logs before changing the environment. These steps are for your dedicated physical node. Before running commands that require elevated permissions, make sure no other team tasks are using the environment.

How do I switch Xcode versions and check which version the pipeline actually uses?

Run xcode-select -p and xcodebuild -version first, and note the current developer directory and version. Once you have confirmed the target Xcode is installed, switch the developer directory to its Contents/Developer folder. The path below assumes the app is named Xcode.app. If the node uses a versioned app name, replace it with the actual path.

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

A CI process may override the system selection with DEVELOPER_DIR. If the terminal and pipeline use different versions, check the job’s environment variables and the runner service user; system settings alone are not enough. If a single job needs another version, specify its developer directory in that job rather than affecting other builds on the same node.

When should I clear DerivedData, and how can I avoid deleting project files?

Check disk usage before deciding whether to clear it. DerivedData may be worth addressing after toolchain changes, cache-related errors, indexing issues or low disk space. Do not assume every ordinary compile error is caused by the cache. After stopping related build tasks, renaming the cache directory so you can restore it is easier to verify than deleting it recursively.

du -sh "$HOME/Library/Developer/Xcode/DerivedData"
mv "$HOME/Library/Developer/Xcode/DerivedData" "$HOME/Library/Developer/Xcode/DerivedData.backup.$(date +%s)"

Only rename the directory if it exists; Xcode will create a new cache on the next build. Renaming does not free disk space. Once you have confirmed the new build works, delete the old cache using its actual backup path. Keep any archives you need, and do not delete Archives, project directories or signing materials along with the cache. If CI uses a custom -derivedDataPath, check that path rather than the current user’s default directory.

Why can’t a build find my signing identity after I import a certificate?

A signing identity requires a valid certificate and its matching private key. A certificate file on its own is usually not enough to sign a build. Import signing materials you are authorised to use with Keychain Access, then check for available identities as the user who runs the build. Do not include certificate files or import passwords in a ticket.

security find-identity -v -p codesigning
security list-keychains -d user

An identity visible to an interactive user may not be visible to the runner service user. Check the service account, Keychain search list, unlock state and access permissions. If you need to adjust Keychain access controls, authorise only the signing tools required. Do not give every app access to the private key just to clear a single error. In your ticket, provide the redacted identity check results, error code and type of user that ran the command.

A local build works, but the CI runner or simulator task fails. What should I check first?

Add the same environment checks to the failing job rather than running them only in an SSH terminal. Compare the user, developer directory, Xcode version, PATH and available simulators. A service process may not load an interactive shell’s configuration, so a successful manual run does not prove the service environment is the same.

whoami
xcode-select -p
xcodebuild -version
printf '%s\n' "$PATH"
xcrun simctl list devices available

If the simulator list does not include the target device, check that the required runtime is installed and the test task’s destination matches. If the runner is offline, check its service status and task logs, then review the network connection and registration details. If you do not have baseline data, validate the workflow with one build first, then increase concurrency gradually while monitoring unified memory and disk usage.

Dedicated means the physical resources are not shared with other tenants; it does not mean multiple tasks on the same node cannot affect one another. See the connection guide for full setup instructions for GitHub Actions and GitLab CI.

Payments & rental term

Check your order status before deciding what to do next

All charges are in USD. We accept USDT-TRC20 and Visa / Mastercard / Amex (via Stripe) only. Available payment gateways are shown in real time in the console.

I sent USDT-TRC20. Why doesn’t my order show as paid yet?

A wallet showing a transfer, on-chain confirmation and order verification are separate steps. Confirmation times depend on on-chain processing and payment gateway status; we do not provide a fixed number of minutes here. Check the network, recipient address and amount specified on the payment page, then confirm the transaction succeeded and check the order status in the console.

Do not send another payment just because the order has not updated yet. If you need a manual check, provide your order ID, transaction hash, transfer amount and time, including the time zone. The transaction hash is enough to locate the transfer; never send your seed phrase, wallet private key or password. If the network or amount differs from the payment instructions, keep the transaction record and explain this in your ticket.

My card payment failed, or my statement shows a pending charge. How do I check what happened?

Check the error message on the payment page and your order status first. Then confirm with your card issuer that the USD transaction is allowed and whether additional verification is required. A pending authorisation from your issuer does not necessarily mean the order has been paid; do not rely on a card notification alone to confirm delivery.

If the payment fails more than once, contact your card issuer to find out why before trying again. If the console still shows the payment as unconfirmed but your bank shows a charge, provide your order ID, payment time, amount and a redacted error message. Include the payment transaction ID if available. Never send your full card number, security code or verification text. Support will check the order and payment records; any refund or release of an authorisation must be confirmed with the gateway and card issuer.

When are renewal reminders sent, and how can I avoid a project interruption at expiry?

Use the expiry time shown in the console as your reference. Check the console for the reminder send time and notification status; we do not promise a fixed number of days’ notice, and receiving a reminder should not be your only way to check whether the service is still active. We recommend adding the expiry date to your team calendar and assigning someone to confirm the renewal.

Choose a daily, weekly, monthly or quarterly term, then check that the renewal invoice matches the machine, add-ons and rental period. After payment, confirm that the order has updated instead of relying on a screenshot of the payment page. If you do not renew before expiry, node access will be affected. Back up your projects, build artifacts and essential configuration beforehand. If the time or amount in the console does not match your expectations, save the invoice number and submit a ticket before deciding whether to pay.

See the plans page for full-term pricing and storage expansion costs. For billing questions about an existing order, submit a ticket through the console. Do not include your machine password in an email.

Prepare a ticket

Give us the details to reproduce the issue

Current customers can submit a ticket through the console. We prioritise by impact: unreachable nodes come first, while environment setup and billing questions are routed by issue type.

General questions: expected and actual results

Use a ticket for development environment, configuration and renewal questions. We use UTC+8 as the time reference and cover working hours across Asia-Pacific. Check your console ticket for the applicable response hours and progress; we do not promise a fixed response time.

Explain what you were trying to do, what happened instead and what you have already tried. Include the shortest command that reproduces the issue. If several people take turns using the node, mention whether parallel builds or graphical sessions were running when the issue occurred, so task conflicts are not mistaken for a node fault.

Urgent issues: unreachable nodes take priority

If both SSH and the graphical connection fail and the node cannot run a task in progress, put “Node unreachable” in the subject and include the last time you connected successfully. Add the results of your port check on another network to help distinguish a local network issue from a node-side problem.

Urgent priority helps us schedule troubleshooting; it does not guarantee a fixed recovery time. If SSH still works, say which feature is affected. Do not erase the disk, reinstall the system or repeatedly power the node off before contacting us, as this may worsen the issue and remove useful diagnostic evidence.

Have these three sets of details ready

  1. Order & node

    Include your order ID, machine model and node identifier. Available nodes are Singapore, Tokyo, Seoul and Hong Kong. Never send your machine password, SSH private key or payment verification details.

  2. Time & impact

    Record when the issue started and include the time zone. Explain whether it affects SSH, the graphical desktop, a build task or payment verification, and when the node last worked normally.

  3. Results & evidence

    Include redacted command output, error codes and the shortest steps to reproduce the issue. Crop screenshots to remove project content and credentials. Add details to the original ticket where possible to keep the full context together.

If you cannot sign in to the console, or have a pre-sales, volume or security enquiry, email support@xcodenode.com. Do not include passwords, private keys, signing materials or full card details in your email.

Need one more step? Follow the full connection guide

The connection guide covers SSH, remote desktops and CI setup. If you need help with something beyond your order, our contact page explains what to include and which channel to use.