Support for Windows developers

Pick up your Windows project and keep building on a Mac

Most issues can be diagnosed through either the browser-based remote desktop or SSH. Use the desktop for graphical tasks and the command line to inspect build output. Check your connection first, then troubleshoot tools, signing, and file transfers.

Already have a machine? Sign in and find its connection details on the instance page. This guide does not provide a generic hostname or password.

Connect first, then configure

Open your workspace from the instance details

The browser desktop needs no remote desktop client. SSH from Windows is an alternative: if the desktop isn't displaying properly, SSH can help you check whether the machine is still reachable. Use the address, port, and account currently shown in the console for either method.

  1. 01

    Check the instance status

    Sign in to the console and find your active order and instance. Check the model, region, expiration date, and status. If payment is complete but provisioning is still in progress, check the status message before placing another order for the same configuration.

  2. 02

    Open the browser desktop

    Use the remote desktop option in the instance details. Wait for the macOS screen to appear before clicking the desktop to enter input. Don't share the connection page, password, or screenshots containing sensitive information.

  3. 03

    Check the basics

    Test a mouse click, type plain English, and switch between windows. Open Finder to confirm files are visible, then open Terminal to check the toolchain. If Chinese input doesn't work, check the local input method and remote input source separately; don't reinstall the system right away.

  4. 04

    Keep SSH as a fallback

    Run the command below in Windows PowerShell and enter the username, host, and port from your instance details when prompted. Verify the host fingerprint on first connection. It's normal for password input not to appear on screen.

Enter the connection details one at a time in Windows PowerShell. These variables use your own input; they aren't ready-to-use credentials.

$MacUser = Read-Host "Enter the instance username"
$MacHost = Read-Host "Enter the instance host"
$MacPort = Read-Host "Enter the SSH port"
ssh -p $MacPort "$MacUser@$MacHost"

If the connection times out, check the network, host, and port. If authentication fails, check the username and authentication method. If the host fingerprint has changed, first confirm whether the system was reinstalled; don't delete the old record without checking.

Keep output you can reproduce

Use an archive log to see how far the process got

A working SSH connection doesn't mean the project is configured. Check the Xcode path and version first, then archive from the project directory. Uploading requires a configured fastlane lane, signing assets, and distribution access.

Read the command, then check the last line

The workflow on the right is an example, not a performance benchmark or a guarantee that it will work unchanged for every project. The hostname is illustrative; use the interactive command in the previous section to connect.

App is an example scheme. Replace the corresponding parameters with your project's workspace, project, and scheme before archiving. If dependencies aren't installed, resolve dependency errors first.

fastlane beta Use only with projects that already have a beta lane. After the archive succeeds, check the distribution service's actual processing status. Starting the command does not mean the upload is complete.

osxmesh — ssh
$ ssh developer@your-mac-host
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcodebuild -version
$ cd ~/Projects/App
$ xcodebuild -scheme App archive
** ARCHIVE SUCCEEDED **
$ fastlane beta
Successfully uploaded package to TestFlight

Keep the full command, the first error, and the final error summary. A screenshot that only says “Build failed” usually isn't enough to diagnose the issue.

Toolchain & signing

Make sure Xcode has what your project needs

The macOS desktop and command line are both ready to use. When opening a project for the first time, check the toolchain before configuring signing. Check the instance itself to see which Xcode versions are installed and which one is selected.

Check versions and dependencies

Run xcodebuild -version and xcode-select -p. In Xcode settings, check the selected command line tools and confirm the SDK and deployment target your project requires.

If your project uses CocoaPods, Swift Package Manager, or another dependency manager, restore dependencies according to the project instructions. Don't upgrade every tool at once in response to an error.

Import signing certificates

Transfer certificates to the instance through a controlled method, then import the required certificates and private keys in Keychain Access. If a file is password-protected, store its password through a separate channel.

A certificate without its associated private key can't sign with that identity. Never put private keys or certificate passwords in a repository, command history, or public support ticket attachments.

Match the provisioning profile

Import the profile your project needs. Check that its bundle identifier, team, expiration date, and distribution type match the target, then review the signing settings for each target.

For your first attempt, complete a reproducible archive in the graphical interface. Once the setup is confirmed, move the same parameters into a script or CI to avoid differences between the GUI and command-line configurations.

Fix clear configuration gaps before trying the archive again
Error or symptom Check first Next step
No signing certificate Does the current keychain contain the required signing identity and its associated private key? Recheck the imported assets and expiration date; repeatedly downloading the same certificate won't help.
No profiles for… Do the profile's app identifier, team, and distribution type match the current target? Import a matching profile and check the project's signing selection.
User interaction is not allowed Check the build user's account, whether the keychain is locked, and the signing tool's access permissions. Check that the keychain is unlocked and access is authorized on the desktop, then retry as the same user.
SDK or deployment target mismatch Check the selected Xcode path, installed SDKs, and the project's deployment target. Select a compatible toolchain. Check project dependencies before upgrading; don't overwrite the environment blindly.
Send the project up, retrieve the build

Keep transfer paths and build directories clear

Store source code, signing assets, and build outputs separately. Create the project directory on the remote Mac before transferring files. After retrieving the IPA, check its size and checksum—don't rely on the filename to confirm the transfer.

Transfer your project to the cloud Mac

If your project is in a Git repository, clone it on the instance using your team's authentication method. Don't put access tokens in shared scripts. For a local project directory, use Windows OpenSSH scp, or an SFTP-capable tool to upload it.

First, run this in a remote terminal: mkdir -p ~/Projects. The PowerShell command below uses the three variables from your first connection and prompts you for the local project path.

$ProjectPath = Read-Host "Enter the local project directory"
scp -P $MacPort -r "$ProjectPath" "${MacUser}@${MacHost}:~/Projects/"

Note:ssh uses a lowercase -p;scp uses an uppercase -P. Check the destination directory before uploading so you don't mix old dependencies with the new project.

Download the IPA to Windows

An archive and an exported IPA are different files. Complete the export process your project requires, then use ls -lh in macOS Terminal to confirm the IPA's actual path.

In the command below, enter the remote IPA's absolute path and an existing local destination directory. Keep paths with spaces in quotes, then check the file after the download completes.

$IpaPath = Read-Host "Enter the absolute remote IPA path"
$SavePath = Read-Host "Enter the local destination directory"
scp -P $MacPort "${MacUser}@${MacHost}:$IpaPath" "$SavePath"

To verify the file, run shasum -a 256on the Mac and Get-FileHash -Algorithm SHA256on Windows, then compare the results for the same file.

Troubleshoot by symptom

Start with checks that won't disrupt your environment

Note what you were doing when the issue occurred, then try reversible steps. A blank screen, incorrect keyboard input, or low disk space doesn't automatically mean you need to reinstall. Reinstallation affects your existing environment and shouldn't be the first troubleshooting step.

Browser desktop is blank or takes a long time to load

First, confirm the instance is reachable. Close the old connection tab and reconnect from the instance details. Check whether your local network restricts long-lived connections; try another network or browser session to compare.

If SSH works, note that the desktop is failing while the command line is available. Save any running work and don't repeatedly restart the machine. If both methods fail, submit a support ticket with the instance status, error message, and time of occurrence.

Keyboard symbols are wrong or shortcuts don't work

Click in an input area on the remote desktop, switch to English input, and test letters, numbers, and punctuation. Check the macOS input source and Windows keyboard layout. Diagnose local input-method interception separately from an incorrect remote layout.

Windows and macOS use modifier keys differently, and the local browser may intercept some shortcuts. Try the same action from the app menu, then check key mapping. Don't enter a password until you're sure the remote field has focus.

Archive fails because disk space is low

In macOS Terminal, run df -hto find the volume that's low on space. Check old archives, exported builds, simulator data, and project caches. Before deleting anything, confirm it's no longer needed; never treat certificates, source code, or your only backup as cache.

If you need more capacity, check the +1TB SSD or +2TB SSD add-ons. Afterward, confirm whether the expansion is mounted, where it's mounted, and whether your project uses the new location. An add-on in your order history doesn't mean the current volume has been expanded.

SSH reaches the host, but authentication fails

Check the instance username, port, and current authentication method one by one, and make sure there are no extra spaces. For key-based authentication, verify the private key file and its permissions. Don't paste private key contents into a support ticket.

Connection details may change after reinstallation, so check the instance details again. Save the exact error message. Authentication failures and connection timeouts are different issues; don't report only “SSH doesn't work.”

Keep your environment available until the work is done

Check your order to renew; back up before reinstalling

Nodes run year-round, 365 days a year. Your rental access still follows your order period. Before starting a long-running task, check the expiration date in the console—don't wait until the next build is underway to renew.

Check the expiration date

Sign in to the console and check the rental period and expiration date in your order or instance details. If you work across time zones, use the time and zone shown on the page; don't assume the payment processing time is the expiration time.

Keep separate backups of your source code, signing assets, environment configuration, and build outputs. Don't use an expired machine as long-term file storage.

View my orders

Choose a renewal period

Choose from daily, weekly, monthly, or quarterly billing; all prices are in USD. Check the renewal options and quote available for your order in the console, then choose a period that fits the length of your work.

Payments are accepted only via USDT-TRC20 and Visa / Mastercard / Amex through Stripe. Available payment gateways are determined by the response from the backend.

View all prices

List your backups before reinstalling

Reinstallation sets up a fresh environment; it doesn't repair the existing one while preserving its files. Stop builds first, retrieve your project, certificates, and build outputs, then record tool versions, dependencies, and startup scripts.

Check the available system actions in the instance details. Confirm the target instance and review the risks before proceeding; afterward, check your connection details and toolchain again.

Manage my instances
Hand over the results of your checks

A support ticket that helps us pick up where you left off

For technical issues with an existing order, sign in to the console and submit a support ticket so it's linked to the right instance. For presales, billing, or sign-in issues, contact support@osxmesh.com. Never send passwords, private keys, full card numbers, or certificate passphrases.

  1. 01

    Identify the instance

    Include the order number or instance ID, model, and region. Available regions: Singapore, Tokyo, Seoul, and Hong Kong. Models: Mesh M4 and Mesh M4 Pro. Don't just say “my Mac.”

  2. 02

    Describe what happened

    Include the time and time zone, expected and actual results, and the last action that worked. Add the shortest steps that reproduce the issue, and say whether it happens every time or only occasionally.

  3. 03

    Attach diagnostic details

    For connection issues, include your browser and OS versions, an error screenshot, and whether SSH works. For build issues, include tool versions, the command you ran, and the first error. Redact sensitive information from screenshots and logs before uploading.

Help the next troubleshooting step build on what you've already tried

Include the instance, symptoms, and steps you've tried in the same ticket. The contact page explains what to prepare for presales, billing, and technical questions.