
An App Clip has to launch in seconds from an NFC tap, QR scan, or Safari banner, and it has to clear Apple's per-variant size limit or App Store Connect will refuse the upload. If you do not own a Mac — or you need a build host that a CI runner can talk to — a remote Mac lets you reproduce the invocation flow without buying hardware.
The direct recommendation: for current iOS 18 simulator work, request a Figment M-series Mac from $95/month and confirm the exact chip, RAM, and disk in the quote. The $29 plan is a virtual Intel macOS environment on Linux/KVM; it runs compatible Intel toolchains (Xcode 26 or earlier per Apple's porting guide) and can host an outbound CI agent, but ARM-only simulator runtimes will not execute on it. Physical Intel and M-series plans collect requests until supply is confirmed. Start your request.
Pricing checked on vendor pages on 2026-11-10 — compare the entry rate, not identical hardware:
| Offer | Rate | Notes |
|---|---|---|
| Figment virtual Intel macOS | $29/month | 2 vCPU, 8 GiB RAM, 80 GiB disk; Intel toolchains; browser-console access |
| Figment M-series (entry) | from $95/month | Exact chip/RAM/disk confirmed in quote |
| Figment Managed Build Mac | $249/month | One M-series Mac, CI setup, backups, monitoring, 30 min monthly support |
| CloudMac M4, 16 GB, 256 GB | $99.99/month | 256 GB "Reserve now"; 512 GB and 1 TB listed as fully reserved |
| CloudMac M4, 16 GB, 256 GB annual | $999/year ≈ $83.25/month | Cheaper than 12 × $95 = $1,140 on the Figment M-series entry |
CloudMac's published annual rate is the lower entry price if all you need is one M4-class Mac you drive yourself. Figment's $249 Managed Build Mac is a different line item: one M-series Mac plus the CI setup, backups, monitoring, and 30 minutes of monthly support — useful when the App Clip pipeline is one of several you do not want to wire up yourself. Pick on the specific work, not on a chip-for-chip claim.
An App Clip is a separate target (often MyAppClip) with its own Info.plist and .entitlements, usually sharing code with the full app through a Swift package or a shared framework. Per Apple's App Store Connect reference on maximum build file sizes, the limit applies to the uncompressed main bundle of any App Clip variant after App Thinning:
| Minimum deployment target | Maximum variant size | Invocation |
|---|---|---|
| Earlier than iOS 16 | 10 MB | Any |
| iOS 16+ | 15 MB | Physical (NFC, QR, App Clip Code) or digital |
| iOS 17+ | 100 MB | Digital only; physical invocations still cap at 15 MB |
If your clip supports any physical invocation path, assume the 15 MB cap. Lean on SF Symbols, defer heavy images to the network, and avoid pulling full frameworks for one call. See Apple's App Clips documentation for the current entitlement set.
Build and install the clip against a booted simulator on the remote Mac:
xcrun simctl boot "iPhone 16"
xcodebuild \
-project MyApp.xcodeproj \
-scheme MyAppClip \
-destination 'platform=iOS Simulator,name=iPhone 16' \
-configuration Debug \
CONFIGURATION_BUILD_DIR="$(pwd)/build/clip" \
build
xcrun simctl install booted "$(pwd)/build/clip/MyAppClip.app"
Replace MyApp.xcodeproj and MyAppClip with your own project path and the exact clip scheme name you defined in Xcode. This is an unexecuted example; run it against your own project and check the output.
_XCAppClipURLXcode's documented way to simulate an App Clip invocation is the _XCAppClipURL environment variable on the scheme's Run action. From the command line, pass it through simctl launch --console-pty:
xcrun simctl launch --console-pty booted \
com.example.MyAppClip \
_XCAppClipURL=https://example.com/menu?table=12
The simulator synthesises an NSUserActivity of type NSUserActivityTypeBrowsingWeb whose webpageURL matches that value, which is what your scene delegate sees in scene(_:continue:). Test every URL prefix you will register in App Store Connect — a ?table=12 vs ?table=0 branch, a locale segment, a tracking suffix. Mismatches between the registered prefix and the URL your handler actually receives are the usual cause of invocations that only break in production.
Use this worksheet beside a one-time Release build on the remote Mac. Replace the numbers with du -sm output from your own .app bundle.
| Item | Measured | Notes |
|---|---|---|
| Main executable | 2.4 MB | arm64 slice only after thinning |
Assets.car (thinned) | 6.1 MB | Export from Xcode Organizer's size report |
| Localised resources | 0.8 MB | Only shipped locales |
| Third-party XCFrameworks | 3.9 MB | Drop any used once at launch |
| Other bundle contents | 0.6 MB | Fonts, JSON, nib |
| Total | 13.8 MB | Under the 15 MB physical-invocation cap |
Headroom is 15 − 13.8 = 1.2 MB. If a planned feature adds a 2 MB asset, you are over; move it behind a Background Assets download or trim Assets.car. Xcode's Organizer "App Thinning Size Report" is the authoritative source for the per-variant number App Store Connect will enforce; du -sm is a quick upper bound you can run on the remote Mac between full archives.
The card UI — header image, subtitle, action label — is configured on the App Clip Experience in App Store Connect and does not require a new binary. The prefix you register there must match the URLs you fed into _XCAppClipURL during testing. Register a default experience early so the simulator URLs, the physical NFC payload, and the production card all resolve to the same code path.
If the simulator target is an ARM-only iOS 17/18 runtime, request the M-series Mac. If you also need a cheap always-on build worker for Intel-compatible tasks, the $29 virtual Intel macOS plan pairs with it. If the App Clip pipeline is part of a larger CI setup you would rather not babysit, Managed Build Mac ($249/month) covers one M-series Mac, CI setup, backups, monitoring, and 30 minutes of monthly support; Managed Mac Team ($999/month) covers two M-series Macs, two CI runners, team setup, backups, monitoring, and one hour of monthly support. Taxes and fees are as stated in the final offer.
Start your Mac hosting request.
Related reading: