Practical engineering support

Solve issues step by step, from connecting to a cloud Mac to delivering build artifacts

This is not conceptual documentation. Every guide includes prerequisites, execution steps, validation results, and logs to retain when things fail. Covers SSH, VNC remote desktop, Xcode, fastlane, self-hosted Runners, and billing.

4 guide categories 5 service nodes 365 days of uptime
build-diagnostics Checks passed
Connection methods SSH / VNC
Build tools Xcode / fastlane
Execution architecture Apple Silicon
$ xcodebuild -version Xcode 16.x $ uname -m arm64 $ df -h / volume check: ready
Verify the environment before running the full pipeline Narrow the failure down to a connection, dependency, signing, or concurrency issue.
Support center search

Filter by task—no need to read from the beginning

Select the task you are handling, or search for terms such as SSH, archive, signing, Runner, node, or billing. Filtering only changes the index cards; the complete steps remain below.

Connect devices

First SSH and VNC connection

Prepare your public key, verify the host fingerprint, check the arm64 environment, and exit safely after the graphical session ends.

Estimated 10 minutes
Configure development environment

Select Xcode and install dependencies

Pin toolchain versions, verify command-line paths, then restore Ruby, Pods, or Swift Package dependencies from the lockfile.

Estimated 15 minutes
Run builds

Archive and export artifacts

Archive with an explicit workspace, scheme, and destination, then save the xcresult and export logs.

Estimated 20 minutes
Run builds

fastlane automation and cleanup

Inject sensitive variables only temporarily, run a fixed lane, then remove temporary files and process environment data after saving artifacts.

Estimated 20 minutes
Run builds

Connect a self-hosted Mac Runner

Register a dedicated Runner, restrict repository scope, set capability labels, and clean the working directory after every job.

Estimated 25 minutes
Configure development environment

Five-point build troubleshooting

Check the network, disk, signing materials, dependency cache, and concurrency in order; avoid changing multiple variables at once.

Estimated 15 minutes
Connect devices

Choose a node and request migration

Choose one of five nodes based on developer, repository, and pipeline locations, then request migration through a ticket.

Estimated 5 minutes
Manage billing

Verify orders and add-ons

Submit the order ID, rental period, node, and storage or Thunderbolt 5 parallel-connection add-on details to locate billing records quickly.

4 details to prepare
Manage billing

Escalate to human support

Submit the device ID, node, time range, and redacted logs through a console ticket or support email.

Two contact paths
Connection guides

Establish a trusted connection before configuring the environment

Use the connection details shown in the console. Never paste private keys, one-time credentials, or complete connection commands into public repositories, build logs, or team chats.

SSH command-line connection

  1. 1
    Prepare your local public key

    Use a separate passphrase-protected key whenever possible. Upload only the public key; never send private-key content through tickets or email.

  2. 2
    Read the connection details

    Verify the device ID, node, host address, port, and username in the console to avoid reusing an old rental record.

  3. 3
    Verify the host fingerprint

    Compare the fingerprint supplied in the console before connecting for the first time. If it differs, stop and open a ticket instead of overwriting the local record.

  4. 4
    Run basic checks

    Run uname -m, xcodebuild -version and df -h /, then record the architecture, toolchain, and available disk space.

VNC remote desktop connection

  1. 1
    Confirm SSH works first

    If the graphical connection fails, SSH is the primary way to check processes, disk, and network status. Verify the host fingerprint first.

  2. 2
    Get session details from the console

    Use the VNC entry point and temporary credentials for the current device. Do not save them in browser sync, shared documents, or pipeline variables.

  3. 3
    Check the graphical environment

    After signing in, confirm the resolution, keyboard layout, Xcode launch status, and available storage before signing or archiving.

  4. 4
    End and clean up the session

    Quit running development tools, remove temporary downloads and plaintext credentials, then close the remote desktop session.

Credential handling boundary:Team members should use individually controlled access methods. When someone leaves the project, revoke the corresponding public key and pipeline token; do not only change the local SSH configuration.
Xcode build guide

Document versions, dependencies, and export parameters for reproducible builds

Do not rely on the scheme last selected in the graphical interface. Automation should explicitly set the Xcode path, workspace, scheme, configuration, destination, and export configuration.

01

Select and verify the Xcode version

Read the project requirements first, then use xcode-select to point to the target version. Next, run xcodebuild -version and xcrun swift --version separately, and write the output at the beginning of the build log.

02

Install dependencies from the lockfile

For Ruby projects, run bundle install first; restore Pods projects from the lockfile, and resolve Swift Package dependencies first. Caches may speed things up but must not replace the version constraints in the lockfile.

03

Run the archive task

Point DerivedData and archivePath to separate directories for the current task. Concurrent jobs must not share an output path, or indexes, caches, and archives may overwrite one another.

04

Export and validate artifacts

Export with a version-controlled export configuration. Verify the command exit code, artifact files, signing result, and dSYM, then copy the artifacts to a controlled delivery directory.

05

Save actionable logs

At minimum, retain plain-text build output, export logs, and the xcresult. Include the pipeline job ID in filenames, but never include access tokens, private keys, or complete signing materials.

archive.sh
xcode-select -p
xcodebuild -version
xcrun swift --version

bundle install
bundle exec pod install

xcodebuild archive \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  -destination "generic/platform=iOS" \
  -archivePath output/App.xcarchive \
  -resultBundlePath output/App.xcresult

xcodebuild -exportArchive \
  -archivePath output/App.xcarchive \
  -exportPath output/export \
  -exportOptionsPlist ExportOptions.plist
Input Repository, lockfile, controlled environment variables Runs on Dedicated cloud Mac Outputs Archive, export files, xcresult, redacted logs
fastlane automation guide

Sensitive variables exist only during the job

fastlane should orchestrate build steps, not store long-lived secrets. Inject signing materials, repository tokens, and upload credentials through controlled variables, then clean them up when the job ends.

INPUT

Inject keys and signing configuration

Inject only the minimum required variables when the job starts. Store temporary files in a job-specific directory, restrict permissions, and never echo variable values through commands.

  • Variable names may be logged; values must never enter logs
  • Keep signing configuration mapped clearly to project branches
  • Do not reuse temporary directories for later jobs
RUN

Run a fixed lane

Use bundle exec fastlane to pin Ruby and gem versions. The lane must explicitly define the scheme, export method, output directory, and failure exit conditions.

  • Print tool versions before building, never credentials
  • Retain the current job log and xcresult on failure
  • Before retrying, determine whether the issue is environmental or code-related
CLEAN

Save artifacts and clean up

First copy the archive, export files, and logs to a controlled location. Then delete temporary signing files, environment files, download caches, and the job workspace.

  • Verify that artifacts exist and have plausible file sizes
  • Clear sensitive commands from shell history
  • Confirm that no build processes remain in the background
bundle exec fastlane ios archive Pinned dependency versions Dedicated output directory Non-zero exit code on failure
CI/CD integration guide

Connect a cloud Mac to your pipeline as a controlled execution node

Bind each Runner to a clearly defined repository or project scope. Do not let jobs from untrusted branches automatically access production signing materials, and do not share a working directory between jobs with different security levels.

GitHub Actions

Self-hosted Runner setup

  1. Define the scope

    Choose a repository-level or organization-level Runner according to your team’s permission model, and restrict which projects can invoke it.

  2. Create a dedicated system user

    The Runner process must not use a daily administrative account. Grant only the permissions required for the workspace and build tools.

  3. Set capability labels

    Labels should describe the architecture, Xcode major version, and job type so workflows select the right node accurately.

  4. Configure serial or parallel execution

    A working directory should handle only one job at a time. For concurrency, use separate directories or separate devices.

  5. Clean up after each job

    Delete temporary variable files, signing materials, and unuploaded artifacts; check for leftover processes before accepting the next job.

Common pipeline systems

Connect through an Agent or SSH executor

  1. Create a one-way job entry point

    Have the pipeline dispatch jobs to the cloud Mac, rather than putting device-management credentials in repository configuration.

  2. Restrict commands and directories

    Build users should access only the specified repositories, caches, and output paths; administrative actions should use a separate permission path.

  3. Preflight the toolchain

    Before a production build, verify the architecture, Xcode, Ruby, dependency manager, and available disk space. Stop the job if preflight checks fail.

  4. Standardize exit codes

    A failure at any dependency-installation, test, archive, or export step must return a non-zero status to prevent false pipeline success.

  5. Clean up after upload

    Confirm that artifacts and logs have uploaded before cleaning the job directory. Retain the job ID for ticket correlation.

Concurrency guidance:The base configuration—M4, 16GB, 256GB—is suited to light builds and single-project signing. The Pro configuration—M4 Pro, 64GB, 2TB—is better for high-concurrency builds and larger dependency caches. Base your choice on peak memory per build, parallel job count, and cache size.
Troubleshooting checklist

Eliminate one variable at a time

Record the failed job ID and time range first, then check the network, disk, signing, cache, and concurrency in that order. Retain each validation result and avoid repeatedly reinstalling the environment.

How to troubleshoot network and connection timeouts

First confirm that your local network can reach the device port, then check DNS, the proxy, the SSH host fingerprint, and system time. Record connection and disconnection times and the exact error text separately. If SSH works but VNC does not, check the graphical-session processes instead of resetting the entire development environment.

ssh -v user@host
Insufficient disk space or archive write failure

Use df -h / to check available volume space, then inspect DerivedData, dependency caches, old archives, and simulator data. Identify large directories first, then remove only clearly rebuildable caches. Do not clean directories in use by a running build.

du -sh ~/Library/Developer/*
Signing certificate or provisioning configuration mismatch

Check the project identifier, build configuration, export method, certificate validity, and provisioning-profile mapping. Confirm that the pipeline injects the materials required by the current job, and check system time. When submitting logs, retain the error type and matching process while hiding certificate contents, private keys, and tokens.

security find-identity -v -p codesigning
Dependency cache causing version drift or build failures

First compare the lockfile with the actual versions in the logs. Run one build in a new job directory without shared caches; if the issue disappears, restore Swift Package, Pods, Ruby, and DerivedData caches layer by layer to locate the contamination source.

swift package resolve
Resource contention from concurrent builds

Check concurrently running xcodebuild, test, and dependency processes, along with each job’s output directory. Retest with lower concurrency and observe peak memory, disk writes, and job duration. Jobs must not share archivePath, resultBundlePath, or temporary signing directories.

ps -axo pid,%cpu,%mem,command
Nodes and availability

All five nodes support two tiers of dedicated physical Macs

Singapore, Japan (Tokyo), South Korea (Seoul), Hong Kong, and the US East are available 365 days a year. The listed configurations are generally orderable; real-time availability is determined by the console.

MiniRents two-tier model catalog and selection guidance across five nodes
Node Team location to prioritize MiniRents M4 MiniRents M4 Pro Selection guidance
SingaporeSG Southeast Asian teams and nearby repositories Available Available First compare connection stability from developers to the node and from the repository to the node.
Japan (Tokyo)JP Japanese and East Asian teams Available Available Well suited to workflows whose repositories and collaborators are mainly in East Asia.
South Korea (Seoul)KR South Korean and nearby East Asian teams Available Available Before choosing, test SSH stability from the team’s actual office network.
Hong KongHK Teams collaborating across Southern China and Southeast Asia Available Available Worth considering for teams balancing multiple collaboration locations across Asia.
US EastUS-E Eastern North American and Western European teams Available Available Well suited to workflows whose repositories, artifact services, or main team members are near the US East Coast.
01

Start with interactive connectivity

For frequent VNC use, prioritize stability between developers and the node. For pipeline-only execution, repository and artifact-service locations matter more.

02

Then consider data flow

Dependency downloads, repository pulls, and artifact uploads all use the network path. Place major data sources and the execution node on the most stable route.

03

Request migration through a ticket

Submit the current device ID, current node, target node, preferred time range, and reason for migration. Follow the console ticket record for the outcome and next steps.

Escalate to human support

When the guides are not enough, submit a reproducible issue report

Use a console ticket for technical issues so it can be linked to the device and order. If you cannot sign in to the console, or need pre-sales, billing, security, or team-deployment advice, send an email.

Console ticket

For connection interruptions, device status, build environments, node migrations, orders, and billing issues. Link the ticket to the current device or order and provide reproducible details.

  • Device ID and current node
  • Time range when the issue occurred
  • Steps performed and expected result
  • Exact error and redacted logs
  • Troubleshooting already completed
Submit a ticket in the console

Support email

For console access problems, pre-sales configuration reviews, team deployment, security reports, and general inquiries. State the issue type in the subject and do not include passwords, private keys, or complete tokens.

  • Contact name and work email
  • Inquiry type and target workflow
  • Preferred node and build concurrency
  • Reproduction steps and impact scope for security reports
  • Order ID and add-ons related to billing questions
support@minirents.com
Billing information

Include these four details in billing requests

Provide the order ID, rental period, node, and storage expansion or Thunderbolt 5 parallel-connection add-on. Only USDT-TRC20 and Visa / Mastercard / Amex (via Stripe) are supported. All charges are settled in USD; available gateways are determined by the backend response.

Ready to start building

Choose a dedicated cloud Mac and get your first pipeline running

Choose from two models, four rental periods, and five nodes. Each device is a dedicated physical Mac, not a virtual machine, starting at $21.5/day.