Build-day checklist

Finished writing the code?
What’s next on your Mac?

Keep developing locally on Windows or Linux, then move your project to a cloud Mac when it’s time to archive. Check your connection and environment, restore dependencies, import signing materials, and build for iOS with your framework.

We can help with connectivity, browser-based remote desktop, environment setup and billing. We don’t write application code, manage Apple developer accounts, or obtain distribution eligibility or signing authorization on your behalf.

Already rented a machine? Start with the migration checklist below. Check connection credentials and instance status in the console after signing in.

Handle each part of the migration separately

Project data, toolchains and CI each need their own path.

You can restore projects from version control on either a local Mac or Windows machine. Migrate reproducible configuration first, then sensitive materials. Don’t copy the entire cache directory from your old machine.

Data handoff

Retrieve your project and signing materials

Clone the project from a Git repository you’re authorized to access. Pass the repository URL through an environment variable; don’t put access tokens in shell history or screenshots.

  1. Sync branches and submodules, and keep the framework and package manager lockfiles.
  2. If signing is required, transfer certificates and provisioning profiles through a controlled channel. Import only what this task needs.
  3. For large files, use SSH transfer if it’s enabled and available. Check the current connection interface to see whether browser-based desktop supports file uploads.
git clone "$PROJECT_REPOSITORY" project
cd project
git submodule update --init --recursive
git rev-parse HEAD
git status --short

Check: the commit hashes match on both machines. Private dependency access, extra resources and signing files aren’t restored automatically with the code.

Environment handoff

Check versions first, then install dependencies

Start by checking which tools are actually available on the instance. Don’t assume every machine has the same versions preinstalled. If Xcode doesn’t meet the project requirements, resolve compatibility before building.

  1. Check the Xcode developer directory, version and available SDKs, and make sure the command-line tools point to the intended toolchain.
  2. Use Homebrew and the Brewfile to restore the tools your project needs, then check CocoaPods, Flutter SDK and Node.
  3. For Unity projects, use a compatible Editor version and confirm iOS Build Support in Unity Hub.
xcode-select -p
xcodebuild -version
xcodebuild -showsdks
brew --version
brew bundle check
pod --version
flutter --version
node --version

Check: run this check from the directory containing a Brewfile, if the project has one. If a command isn’t found, install the corresponding tool first. You’re responsible for confirming your Unity license.

Automation handoff

Get a successful desktop build before adding CI

Complete one build in an interactive session and confirm dependencies and signing work. Then register a temporary self-hosted runner so environment issues don’t get mixed up with pipeline troubleshooting.

  1. Get a runner package compatible with macOS and your chip architecture, along with a short-lived registration token, from your CI platform.
  2. Register the runner from the extracted directory using the platform’s instructions. Check its job labels, working directory and run-as user.
  3. If the project already has a fastlane setup, list the lanes first, then follow your team’s build process.
./config.sh --url "$CI_REPOSITORY_URL" --token "$RUNNER_TOKEN"
./run.sh

bundle check
bundle exec fastlane lanes

Check: runner commands depend on the CI platform and aren’t a universal installer. The registration commands above apply only to platforms that provide these scripts. Unregister the runner and revoke its token before they expire.

File transfer isn’t guaranteed just because you’ve opened a remote desktop.Clipboard content types and limits, along with file transfer options, depend on the current connection implementation. If you need an SSH or VNC client, check the connection method, credentials and address in the console first. Don’t assume a port is open. Don’t put sensitive materials at a public download URL or attach them to a support ticket.

Choose your build path

Three ways to build—and success means more than a “build succeeded” message.

Restore the environment using the versions pinned by your project, then handle platform dependencies and signing. Run the commands below from the relevant project directory. Whether the output can be distributed also depends on signing configuration, distribution permissions and platform requirements.

Flutter: create an archive and IPA from your project

Requirements:Use a Flutter SDK version that meets the project requirements. The iOS project, plugin dependencies and Xcode toolchain must be available, and the signing materials must match the app’s bundle identifier.

flutter doctor -v
flutter pub get
flutter build ipa

First, resolve the issues flutter doctor -v reported with the iOS toolchain. If dependency resolution fails, check whether the cause is network access, version constraints or permissions for private packages. Don’t keep retrying the archive command to work around an earlier error.

Expected output:After a successful build, check build/ios/archive for the archive, and build/ios/ipa for the exported files. Exact paths and export behavior depend on your Flutter version and build output.

If you have an archive but no IPA, check for export or signing errors. A completed build doesn’t automatically upload the app to TestFlight.

React Native: archive using the right workspace

Requirements:Use compatible Node and package manager versions with the project’s lockfile. For projects using CocoaPods, install the iOS dependencies and confirm you’re using the right scheme.

node --version
bundle check
cd ios
bundle exec pod install
open .

If there’s a Gemfile, use the Bundler environment specified by the project. Otherwise, install dependencies according to your team’s process. In Xcode, open the generated .xcworkspace, not the project file that’s missing its Pods dependencies.

Expected output:Select the target scheme and the appropriate device archive destination, then choose Product → Archive to create an .xcarchive. In Organizer, export or upload it according to your distribution method.

A successful simulator run doesn’t mean a device archive will work. If a native module fails, capture the first compiler error and the relevant dependency versions—not just the final failure summary.

Unity: the Xcode steps still matter after export

Requirements:Use a Unity Editor version compatible with the project. The iOS module, third-party native plugins and assets must be available, and you’ll need the appropriate Editor license.

xcodebuild -version
xcodebuild -list -project "$EXPORTED_XCODE_PROJECT"

In Unity, switch the build target to iOS and export the Xcode project. Projects using IL2CPP need to compile the generated code natively. Exporting the project doesn’t produce a distributable app by itself.

Expected output:In Xcode, configure signing, dependencies and the target, then archive. Export an IPA or upload it according to your distribution process. If a plugin generated a workspace, open that workspace to continue.

For large projects, plan for memory and space for intermediate files. Apple Silicon M4 Pro / 64GB RAM / 2TB SSD is a large-project option in the catalog, but build times aren’t guaranteed.

After your first successful build, take reproducibility with you.

Record the commit, Xcode and framework versions, dependency lockfiles, scheme, build commands and artifact paths. Version-control configuration that can be shared; store signing private keys and access tokens separately. The next time you rent a Mac by the day, restore from these notes instead of guessing the setup again.

First, tell desktop lag from build lag

Choppy screen? Check the connection. Stalled archive? Check the logs.

Delayed mouse movement or slow screen refresh usually points to network or display settings. If the mouse is responsive but a build runs for a long time, check the build logs and resource usage. Switching remote connection methods won’t fix a project error.

  1. 01

    Check your node and network

    Check whether your order’s current node is near your location, then compare a wired connection with a stable Wi-Fi connection. Pause sync tasks that are saturating your upload bandwidth. If you need a different node, read the next section first; don’t assume you can move your existing order instantly without disruption.

    Keep in mind: geographic proximity is only a starting point. ISP routing, inter-region links and local congestion can still affect actual round-trip latency.

  2. 02

    Reduce display load

    Use the options available in your current remote connection interface to lower image quality, resolution or frame rate, and turn off unnecessary animated content. Change one setting at a time and note what changes.

    Keep in mind: this may reduce the load from encoding and transmitting the screen, but it can’t reduce the network’s physical round-trip time or speed up CPU-bound builds.

  3. 03

    Try a VNC client

    If the console provides the connection details, try a VNC client to compare the experience on the same instance. A browser connection is convenient for accessing the desktop; a client can help you check whether the connection implementation makes a difference.

    Keep in mind: a client may offer different display and clipboard options, but it won’t change the node’s location. File transfer depends on both sides’ implementations; we can’t guarantee universal support.

  4. 04

    Capture the error details

    For connection failures, record the on-screen message, time and time zone. For build failures, capture the first meaningful error, command and version information. Before taking a screenshot, hide passwords, tokens, certificate details and private project content.

    Keep in mind: screenshots can help with diagnosis, but they can’t replace copyable error text. Don’t submit just “it’s laggy” or “the build failed” without steps to reproduce the problem.

Use node references to guide your choice, not as a measurement of your connection.

All 5 nodes are listed below. The ranges apply to the stated service areas and aren’t latency guarantees for connections from every city.

Node → Service area → Reference round-trip latency
NodeService areaReference round-trip latency
SingaporeSoutheast Asia20~50ms
TokyoEast Asia30~60ms
SeoulNortheast Asia30~50ms
Hong KongSouth China and Southeast Asia20~40ms
US EastEastern North America and Western Europe25~35ms

These ranges are for reference only; actual latency depends on your connection. For interactive desktop use, prioritize a nearby node. If you’re only building and retrieving artifacts, also consider dependency download speeds and file transfer conditions.

Check your order before changing nodes

Separate your project from your rental before switching nodes.

The node is part of your order configuration. This page doesn’t treat switching nodes within the same order as a standard feature, or guarantee that disks, connection addresses or remaining rental time can be transferred automatically. Submit a support ticket for your specific order to confirm whether a change is possible and how fees and data will be handled.

Ask before changing your current instance

Include your order number, current node, requested node and reason, and say whether a build is still running. Wait for confirmation of the order change process, any applicable fees and next steps. Don’t delete your environment or assume a new node will inherit your old instance’s state before it’s confirmed.

If you need to rent another machine, first check the new order’s configuration, term and current availability. Handle ending or renewing the old order according to its order details and service terms.

Treat the new instance as a fresh Mac

Push any uncommitted code and export your build artifacts first. Back up necessary configuration, certificates and provisioning profiles separately. On the new instance, check tool versions, access permissions and signing again; don’t assume the old disk has been transferred.

After switching successfully, update your CI connection settings, unregister the old runner and revoke any tokens you no longer use. Data handling at the end of the rental is subject to the service terms and console notices; don’t rely on post-expiry recovery as a backup plan.

Make your first support ticket easy to reproduce

Tell us which machine and step the issue occurred on—in one clear report.

Sign in to the console, create a request through the support ticket section, and link the order that needs checking. Console tickets are best for instance, connection, setup and billing issues. If you can’t sign in, contact us at support@testmini.com .

Gather these details before submitting

  • Order and node:Order number, machine model, current node and the instance involved.
  • Time and environment:When it happened, your time zone, local operating system, and browser or VNC client version.
  • Steps and results:Which page or command you started with, what you expected to happen and what actually happened.
  • Errors and evidence:Error text, redacted screenshots, relevant log excerpts and whether you can reproduce the issue.
  • What you’ve tried:Changes such as switching networks, adjusting image quality or reconnecting—and the results.

For payment issues, include the order number, payment method and status shown in the console. For USDT-TRC20, you can provide the transaction hash. For card issues, don’t send the full card number, security code or verification code.

Use this outline for your support ticket

Fill in these fields in the console ticket. There’s no need to upload your entire project.

What’s affected
Order number, node and machine model
When it happened
Exact time and time zone
How to reproduce
Steps, commands and error text
Environment
Browser, Xcode and framework versions
What you’ve tried
Steps taken and what changed

Don’t include login passwords, private keys, original signing certificates or CI registration tokens. If support needs more information to diagnose the issue, provide only what’s necessary as requested in the ticket.

Track replies in your ticket; submitting a request doesn’t mean it’s been resolved.

Support is primarily available during Asia-Pacific business hours. We don’t guarantee a fixed response or resolution time in minutes or hours; check your ticket in the console for replies and updates. Add information by replying to the same ticket, and keep the issue reproducible in its current environment. If your machine is nearing expiry, export important files first, then confirm your renewal plans.

Billing checks cover USD payments via USDT-TRC20 or, through Stripe, Visa / Mastercard / Amex. Actual gateway availability depends on the backend response. Payment confirmation may be affected by on-chain confirmations or card issuer processing; a screenshot alone doesn’t confirm payment.

Check the service details too

Beyond the technical steps, check your rental term and node.

Connection, build and order issues are different. Check the relevant documentation to confirm prerequisites, then decide whether to keep troubleshooting, submit a ticket or rent another machine.

Troubleshoot

Check the one-day minimum, browser versus VNC connections, add-on billing, signing materials and how data is handled when your rental ends.

Browse the FAQ

Choose a node

Compare all 5 nodes based on your location and workflow. Reference latency can help guide your choice, but your actual experience also depends on your connection.

Compare nodes

Review the service terms

Before a long build, check billing periods, renewals, expiry procedures and usage limits. Export irreplaceable files in advance.

Read the service terms

Check your environment before building; keep a record if something gets stuck.

If you already have an order, continue in the console. If you haven’t rented a machine yet, choose a configuration and node for your project. Back up your project and artifacts; use a support ticket for machine and order issues.