
When a project that built on MacinCloud fails on a new remote Mac, the cause is almost always a build setting mismatch: wrong ARCHS, a hard-coded SDKROOT, a stale VALID_ARCHS, or a deployment target that diverges across targets. The worksheet below finds those mismatches target by target, and the plan comparison tells you which hosted Mac to run it on.
If you want the short answer: use Figment's $29 virtual Intel macOS for CLI builds, signing, notarization, and cross-compiling universal/arm64 archives, and move to M-series from $95/month for the iOS simulator, SwiftUI previews, Metal, or Xcode 27. Start a configuration.
MacinCloud's managed plans publish, as of 2026-11-10 on macincloud.com/pages/managed.html: M1 from $25, M2 from $26, and M4 from $29 per month, with 8/16/32 GB RAM options and a 120 GB user quota upgradable to 4 TB. Managed plans are a user account on the host: the vendor runs admin tasks on request, and root/admin is reserved for their dedicated plans. macOS versions listed range from Tahoe (26.x) back to earlier releases.
Figment's $29 tier is a different product. It is a virtual Intel macOS environment (2 vCPU, 8 GiB RAM, 80 GiB disk) reached through a browser console. It runs supported Intel macOS toolchains, including Xcode 26 or earlier per Apple's guidance on porting apps to Apple silicon, so it can cross-compile arm64 iOS archives, build universal macOS binaries, sign, and notarize. It cannot execute ARM-only binaries, run the ARM iOS simulator, drive Metal GPU work, or run Xcode 27 — those need Apple silicon.
| Figment plan | Hardware | Monthly | Access |
|---|---|---|---|
| Virtual Intel macOS | 2 vCPU Intel, 8 GiB RAM, 80 GiB disk | $29 | Browser console |
| i3 Mac | Physical Intel | $49 | Request (collecting) |
| M-series Mac | Apple silicon, config in quote | from $95 | Request a quote |
| Managed Build Mac | One M-series + CI setup, backups, monitoring, 30 min/mo support | $249 | Quoted |
| Managed Mac Team | Two M-series + two CI runners, team setup, backups, monitoring, 1 hr/mo support | $999 | Quoted |
At $29, MacinCloud's managed M4 shares a price with Figment's Intel VM, not a hardware class. That's an entry-price comparison, not equal silicon. If your work specifically needs Apple silicon, compare MacinCloud's managed M4 at $29 (shared, pre-installed Xcode, no admin) against Figment M-series from $95 — exact chip, RAM, storage, and term are confirmed in the quote. The Managed Build Mac at $249 is the right choice when you want the CI pipeline migrated, not just a login.
Three things usually move when you re-home an Xcode project:
.p12, not a bare .cer.VALID_ARCHS, machine-specific absolute paths in OTHER_SWIFT_FLAGS, or an EXCLUDED_ARCHS = arm64 left over from Intel simulator testing all travel with the project and bite on a new host.The audit targets the third category.
Open the project on the remote Mac and fill this in for every app and framework target. Values come from Target → Build Settings → All; the Resolved column is what Xcode reports in the Resolved tab, which is what actually reaches the compiler.
Target: ___________________________ Config: Debug | Release
SETTING | Project | Target | xcconfig | Resolved
--------------------------------|----------|----------|----------|---------
ARCHS | | | |
EXCLUDED_ARCHS | | | |
VALID_ARCHS (deprecated) | | | |
SDKROOT | | | |
IPHONEOS_DEPLOYMENT_TARGET | | | |
SWIFT_VERSION | | | |
CODE_SIGN_IDENTITY | | | |
PROVISIONING_PROFILE_SPECIFIER | | | |
OTHER_SWIFT_FLAGS | | | |
GCC_PREPROCESSOR_DEFINITIONS | | | |
Red flags to chase first:
VALID_ARCHS set anywhere. It is deprecated; delete it from targets and xcconfigs.EXCLUDED_ARCHS = arm64 on a target, which silently blocks the ARM simulator on M-series.ARCHS hard-coded to "arm64 x86_64" instead of $(ARCHS_STANDARD).SDKROOT set to iphonesimulator on the app target — Distribution archives will fail signing.IPHONEOS_DEPLOYMENT_TARGET that differs between the app and an embedded framework (linker warning about embedded binary OS range).SWIFT_VERSION mismatched across targets./Users/jane/... in OTHER_SWIFT_FLAGS, OTHER_CFLAGS, or xcconfig #include lines.DEBUG=1 in the Release row of GCC_PREPROCESSOR_DEFINITIONS.Both hosts expose the same xcodebuild output. Run this on each machine and diff the results:
xcodebuild -project MyApp.xcodeproj \
-scheme "$SCHEME_FROM_YOUR_PROJECT" \
-configuration Release \
-destination 'generic/platform=iOS' \
-showBuildSettings \
| grep -E '^\s+(ARCHS|EXCLUDED_ARCHS|VALID_ARCHS|SDKROOT|IPHONEOS_DEPLOYMENT_TARGET|SWIFT_VERSION|CODE_SIGN_IDENTITY|PROVISIONING_PROFILE_SPECIFIER) ='
Use your project's real scheme name. -showBuildSettings resolves the full stack (project, target, xcconfig, scheme env), so any line that differs between local and remote is a setting you need to reconcile. Common fixes:
VALID_ARCHS project-wide.EXCLUDED_ARCHS = arm64 from any target that needs the ARM simulator.CODE_SIGN_IDENTITY = - on unit test targets that don't ship.$(SRCROOT).Signing identities live in the keychain and travel as an encrypted .p12:
.p12, set a strong password..p12 and the password through separate channels (file via your artifact store, password via your secret manager).login.keychain-db, and restore the search list when the job ends:KC="build.$(uuidgen).keychain-db"
security create-keychain -p "$KC_PASSWORD" "$KC"
ORIG_LIST=$(security list-keychains -d user | tr -d '"')
security list-keychains -d user -s "$KC" $ORIG_LIST
trap 'security delete-keychain "$KC"; security list-keychains -d user -s '"$ORIG_LIST"'' EXIT
security unlock-keychain -p "$KC_PASSWORD" "$KC"
security import signing.p12 -k "$KC" -P "$P12_PASSWORD" -T /usr/bin/codesign
Provisioning profiles are plain files; copy them to ~/Library/MobileDevice/Provisioning Profiles/. Do not export the host's environment to a plaintext file during the move — it almost certainly contains API tokens. Keep secret values in your CI service's secret manager (GitHub Actions secrets, Buildkite agent hooks, etc.) and list only the required secret names in migration notes.
Ready to pick a tier and run the audit on your own project? Start a configuration at /mac-hosting/start.
Related reading: