Development & connectivity support

Get remote Mac access, builds, and troubleshooting organized in one place

From retrieving access details to running Xcode, code signing, and continuous integration, find the right steps by task. Every check has an observable result, and each issue can be documented for reproducible diagnosis.

Apple Silicon physical nodes with one dedicated device per order—not a virtual machine. Before your first connection, verify the node, system version, and access method.

REMOTE SESSION HANDOFF Remote session handoff
SESSION / 05
Device assignment
One dedicated physical machine per order
Access methods
Graphical interface and SSH
System version
Verify immediately after first connection
Session time zone
Set according to node and team procedures
Delivery stages 01—05
  1. 01Confirm order and nodeVerify model, region, and rental term
  2. 02Retrieve access credentialsView them securely in the console only
  3. 03Establish a remote sessionVerify the graphical interface and SSH first
  4. 04Configure developer toolsRecord Xcode and dependency versions
  5. 05Connect automation jobsIsolate work directories and caches
Support coverage Connectivity, toolchains, CI/CD, systems, and orders
Nodes available 5
Operating status Running normally all 365 days of the year
Live information Use the console's real-time status
Remote connection guide

Verify the connection path before installing development dependencies

The goal of first access is not to migrate every project immediately. Confirm that credentials, networking, the graphical session, and SSH are all stable first. Avoid starting long builds until the basic connection path is verified.

  1. 01

    Retrieve credentials in the console

    Verify the order ID, node, device name, and access method. Store credentials only in a controlled password manager; never forward them through group chats or public documents.

  2. 02

    Run pre-connection checks

    Confirm that your local network does not block the required ports, disable temporary proxies that rewrite routes, and record your current public egress IP and test time. Validate first on a stable wired connection, then compare wireless performance.

  3. 03

    Calibrate resolution and clipboard

    Start with a resolution close to your local display and verify text clarity, key mapping, and bidirectional clipboard support. High resolution increases screen-update load on weak networks, so prioritize stable interaction.

  4. 04

    Verify reconnection after a drop

    Disconnect a session deliberately and reconnect, checking that running commands remain active and the graphical session returns to the original desktop. Put long-running tasks in a persistent command session or CI/CD job.

  5. 05

    Tighten remote-access boundaries

    Grant access only to necessary team members and update credentials immediately when membership changes. Never store private keys, full passwords, or remote-control verification codes in scripts, repositories, build logs, or screenshots.

Command execution record

Confirm build capability with three results

Verify the SSH session first, run an Xcode build next, and then validate the automated packaging tool. These examples show the diagnostic path; replace the project name, scheme, workspace, and export parameters with your team's configuration.

  • SSH: Confirm the connection reaches the device assigned to the order and record the system version.
  • xcodebuild:Explicitly specify the workspace, scheme, and configuration.
  • fastlane:Run read-only checks first, then run the actual packaging lane.
build-session / assigned-node UTF-8 · zsh
$ ssh developer@assigned-mac
connection established
$ sw_vers -productVersion
current macOS version returned
$ xcodebuild -workspace App.xcworkspace \
  -scheme App -configuration Release build
Resolve Package Graph
CompileSwiftSources normal arm64
** BUILD SUCCEEDED **
$ bundle exec fastlane ios verify_build
Checking signing assets
Archive validation passed
fastlane finished successfully
Xcode and code signing

Validate versions, certificates, and permissions separately

Most signing failures are not caused by a single switch. Pin the tool versions first, then check that certificates and provisioning profiles match, and finally confirm that the automation process can access the required Keychain items.

A

Confirm the selected Xcode path

Record both the Xcode version in the graphical interface and the command-line tools path. When multiple versions are installed, the build script must select one explicitly so interactive sessions and runners do not use different toolchains.

$ xcodebuild -version
$ xcode-select -p
$ xcrun --find swift
B

Import certificates and provisioning profiles

Certificates, private keys, and provisioning profiles must belong to the same signing workflow. After importing them, check their validity, team information, and target identifier before using a production packaging task as the first test.

  • The certificate and private key are paired
  • The provisioning profile covers the target identifier
  • The build configuration references the correct team
C

Check Keychain permissions

Availability in a graphical session does not guarantee availability to an automation process. Check the unlock method, search list, and code-signing access permissions as the user assigned to the runner and in a non-interactive environment.

  • Confirm the execution user is consistent
  • Limit the visibility of unlock credentials
  • Avoid writing sensitive values to build logs
D

Troubleshoot automated signing failures

Keep the failed command, target name, configuration, export method, and first error line. Do not submit only the final generic failure message; it usually omits the real cause.

  • Check the first signing error first
  • Compare local and runner environment variables
  • Reproduce the issue with the smallest target
Compatibility check order before changing the toolchain
Check Record Pass criteria Next step on failure
macOS Current version and available disk space Explicitly supported by the target Xcode version Pause the change and check the compatibility matrix
Xcode Version, selected path, and SDK Command line and graphical interface match Correct the tool path and rerun a minimal build
Signing materials Certificate status, provisioning profile, and team Target identifier matches the export method Reimport and check Keychain permissions
Project dependencies Lockfiles, runtime, and plugin versions Installation is repeatable from a clean directory Clear local caches and retain failure logs
Self-hosted runner

Make automation jobs isolated, cleanable, and reproducible

A runner should not reuse a daily development directory. Define separate boundaries for repositories, dependency caches, build artifacts, and temporary files to prevent one failed job from contaminating the next build.

GITHUB ACTIONS Repository- or organization-level runner

Validate with one repository before expanding job scope

  1. Registration:Generate short-lived registration information in the relevant repository or organization, then configure the runner on the target device.
  2. Labels:Use labels that describe the chip, purpose, and toolchain to prevent jobs from being assigned to the wrong environment.
  3. Service:Run under a fixed non-privileged user and confirm that it resumes accepting jobs after a restart.
  4. Validation:Run version checks and a minimal build first, then add archive, test, and release jobs.
GITLAB RUNNER Project- or group-level runner

Control job sources with labels and execution boundaries

  1. Registration:Confirm that the runner belongs to the project or group; do not store registration information in the script repository.
  2. Executor:Choose the local execution path according to the build method and restrict the types of jobs it can run.
  3. Labels:Require jobs to match labels explicitly so unreviewed tasks cannot enter the signing environment.
  4. Audit:Retain the job ID, commit version, and failure stage so the support team can reproduce the issue.
WORK Work directory

Keep each repository separate, remove temporary files when the job ends, and never reuse a checkout directory from an unknown source.

CACHE Dependency cache

Generate cache keys from lockfiles or tool versions, invalidate them when versions change, and avoid unconditional full-cache reuse.

OUTPUT Build artifacts

Store artifacts separately from source code and clean up local copies after a successful upload according to team retention policies.

SECRETS Sensitive variables

Inject them through the platform's secrets mechanism and restrict log output; never write them to project files, caches, or archives.

System upgrade strategy

You schedule upgrades—first create a traceable environment record

VMOwn nodes run normally all 365 days of the year. System upgrades are user-initiated changes; schedule them outside release and build windows, and verify toolchain compatibility beforehand.

Pre-upgrade state record

System and hardware
macOS version, chip, unified memory, and available disk space
Development tools
Xcode, command-line tools, SDK, and runtime versions
Project dependencies
Package-manager lockfiles and Ruby, Python, and Node environments
Signing configuration
Certificate status, provisioning profiles, and Keychain search list
Automation jobs
Runner status, labels, work directory, and most recent successful job
Recovery materials
Code backup, configuration export, key logs, and order ID
Before the change

Run a baseline pipeline first

Complete one repeatable build, test, and archive before upgrading, and record the commit and result. Rerun the same input after the upgrade; only then are differences useful for diagnosis.

Prepare diagnostic information
Change failed

Stop making consecutive changes and preserve the state

Record the last successful step and the first failed step; do not repeatedly delete every cache. Organize tool versions, error logs, and reproduction commands before submitting a ticket.

Submit a console ticket
Diagnostic information checklist

Give the support team the conditions needed to reproduce the issue

“Connection failed” or “build error” is not enough to begin diagnosis. Provide the context, exact time, first error, and minimal reproduction steps, and remove sensitive content from logs.

Ticket attachment checklist 6 REQUIRED FIELDS
01

Node and order ID

Provide the actual node—Singapore, Japan (Tokyo), South Korea (Seoul), Hong Kong, or the US West—and the order ID shown in the console.

02

System and tool versions

Record the macOS, Xcode, command-line tools, and directly relevant dependency versions; do not submit a complete software inventory for the device.

03

Time and time zone

State when the issue occurred, how long it lasted, and the time zone. For connectivity issues, also note the location of your local network and its connection type.

04

First actionable error

Keep the necessary context before and after the error, prioritizing the first failure message rather than only the final exit status.

05

Minimal reproduction steps

Start from a known-good state and list the commands, interface actions, inputs, and actual results in order.

06

Actions already tried

State whether you reconnected, restarted the job, changed networks, cleared selected caches, or rolled back configuration to avoid repeating actions that could destroy the evidence.

Still unresolved

Bring the diagnostic record so support can start with the first error

For presales questions and general technical issues, contact support@vmown.com. For existing orders, sign in to the console and submit a ticket first so the device, node, and order records can be linked.