What Xtend does and doesn't collect.
Sign in with Apple to pair your devices. Your code, your terminal and your Simulator stay between your iPhone and your Mac, what we do collect is listed below, in full.
- Sign in with Apple is required so the iPhone can find your Mac. We store your Apple user ID, name, and email (or hide-my-email proxy), plus which Mac is yours, the full list is below.
- Your simulator stream, touches, terminal data, and build commands flow directly between your iPhone and your Mac over end-to-end encrypted WebRTC (DTLS-SRTP). We never see them.
- Usage analytics and crash reporting only (Firebase Crashlytics + Mixpanel). Before you sign in they are tied to a random install UUID; after sign-in they are keyed to your Apple user identifier, never your name, email, or payment details. No advertising. No cross-app tracking. No IDFA. One toggle turns both off, on the iPhone and on the Mac.
- You can delete your account from inside the app at any time.
- GDPR & CCPA compliant.
Data we collect
To sign you in, pair your iPhone with your Mac, and keep your subscription and notifications working across your devices, our server stores a small record per account:
- Apple user identifier (sub), a stable opaque ID Apple gives us when you sign in. Not your Apple ID email, not your name.
- Email address, your real email if you allowed it during Sign in with Apple, or Apple's hide-my-email proxy otherwise. Used only to identify your account; we don't send marketing.
- Display name, only the name you choose to share at first sign-in. Apple discloses the name once; we keep it so the app can greet you.
- Apple refresh token, issued by Apple. Used to revoke your session if you delete your account, and never sent anywhere except Apple.
- Signup date, the date your account was first created. Kept so we can understand how the app serves accounts of different ages; it never changes after your first sign-in.
- Mac registration info, a Mac identifier (a UUID), the Mac's display name (e.g. "Mendy's MacBook Air"), and when it was last seen, so the iPhone knows which Mac to pair with. One Mac per account. This record is stored on the server so your Mac is still known to your iPhone after the server restarts.
- Push notification token, if you allow notifications, the Apple-issued device token for each of your devices, so we can tell you a long build or command has finished. Tokens are pruned automatically: at most five per account, and any token unused for 60 days is dropped.
- Subscription record, if you subscribe, your App Store transaction's identifiers and dates (expiry date, original transaction ID, sandbox-or-production flag, and an app-scoped token derived from your Apple user identifier). This is what lets one subscription unlock all of your devices. See "Subscriptions and payments" below.
- IP address (transient), your IP is visible to the signaling and TURN servers during a connection. We do not store full IPs; server logs record only a masked prefix (the first 4 IPv6 groups), retained for a short rolling window for operational diagnostics. Your email address and display name are never written to our server logs.
We do not collect: contacts, photos, location, advertising identifiers (IDFA), keystrokes, terminal output, simulator frames, or browsing history. The signaling server never sees the contents of your WebRTC session, that traffic is end-to-end encrypted.
Usage analytics and crash reporting
To fix bugs and understand which features people use, Xtend sends diagnostic and usage events to two third-party services, from both the iPhone app and the Mac app.
What they are tied to. On first launch we generate a random install-scoped UUID and store it in the app's local preferences; until you sign in, that UUID is the only identifier attached to these events. Once you sign in, your Apple user identifier (the opaque sub) replaces it, which means events from your iPhone and your Mac are linked to the same account. It is still not your name, your email, or an identifier that follows you across other companies' apps, but it is stable across your devices and it is not anonymous. Signing out rotates the identifier back to a fresh random UUID.
- Firebase Crashlytics (Google), receives unhandled exceptions, native crashes, app hangs, app version, OS version, and device model. Each report includes a short rolling log of the most recent app events leading up to the crash (e.g. "WebRTC connected via host", "paywall shown"). No message contents, no terminal output, no code.
- Mixpanel, receives product events such as "app opened", "tab changed", "build started", "paywall shown", "subscription succeeded", each tagged with your account's signup date (day precision) so feature adoption can be compared across account ages, plus periodic WebRTC quality samples (bitrate, framerate, round-trip time, packets lost, ICE path type). Used to understand feature adoption and diagnose connection quality. Events never include credentials, terminal contents, file paths, project or folder names, or simulator frame data, where the location of something matters, we send a flag rather than the path (for example, whether Xcode sits at its default location, not where it actually is).
Turning it off. You can disable all of it at any time, and the toggle exists on both platforms:
- iPhone. Settings → Share Usage Data.
- Mac, the same Share Usage Data toggle in the menu-bar app's popover.
When you switch it off, Mixpanel is opted out, Crashlytics collection is disabled too, and the identifier attached to both, including the Apple user identifier written after sign-in, is cleared. Nothing further is sent from that device until you switch it back on.
Neither service is used to track you across other companies' apps or websites. We do not pass any data we hold to advertising networks. See Firebase Privacy & Security and Mixpanel's Privacy Policy for their own handling commitments.
How Xtend connects your iPhone and your Mac
Xtend establishes a direct peer-to-peer WebRTC connection between your devices. There are two reachability scenarios:
- Same Wi-Fi (LAN): the iPhone and Mac exchange ICE candidates through our signaling server, then try a direct device-to-device path. When that succeeds, media stays on your local network. When it does not, which can happen even on the same Wi-Fi, the connection falls back to the same encrypted TURN relay described below. Bonjour/mDNS only tells the app that your Mac is on the same network; your Mac is found through your account, not through the local network.
- Different network (e.g. cellular): ICE selects a NAT-traversal path. When direct UDP is not possible, the WebRTC stack falls back to a TURN relay. We use Cloudflare TURN with ephemeral credentials. The TURN relay forwards encrypted bytes only, it cannot decrypt your media, touches, or terminal data.
In both cases, the media (video, touches, terminal, build commands) is protected by DTLS-SRTP. The encryption keys are negotiated directly between your iPhone and your Mac, nothing in the middle (signaling server, TURN relay) holds them.
Permissions Xtend asks for
- Local Network (iOS): used to discover your Mac via Bonjour when both devices are on the same Wi-Fi, which is what lets pairing work without typing an IP address. If you deny it, Xtend falls back to reaching your Mac over the internet path instead. It has no effect on your free-tier allowance, the daily limits are the same on every network.
- Sign in with Apple (iOS & macOS): required to identify your account so the iPhone and Mac can pair.
- Screen Recording (macOS): required so the Mac companion can capture the iOS Simulator window for streaming. Granted via System Settings → Privacy & Security; revocable at any time.
- Accessibility (macOS): required to forward touch and keyboard events from your iPhone into the Simulator.
Subscriptions and payments
Xtend Premium is a subscription managed entirely by Apple via the App Store. We never see your credit card, billing address, or payment details. Apple handles all of that.
Subscription status is checked on-device by Apple's StoreKit framework. So that one subscription unlocks your iPhone, your iPad and your Mac rather than only the device that bought it, the app also sends your signed App Store transaction to our server, which verifies Apple's signature and then keeps a small record against your account: the expiry date, the original transaction ID, whether the purchase came from the sandbox or production, and an app-scoped token derived from your Apple user identifier. What leaves your device is transaction identifiers and dates, no name, no payment method, no billing address. If that record goes stale we ask Apple's App Store Server API to refresh it.
Subscription billing, renewals, refunds, and cancellation are governed by Apple's Media Services Terms. To cancel auto-renewal, open Settings → your Apple Account → Subscriptions on your iPhone.
Daily usage limits
The free tier meters a few activities per day. Simulator streaming time, installs to your iPhone, and upload size. To count them across your devices and reset them daily, the app reports running totals to our signaling server: how many seconds of Simulator video and how many installs your account has used today, tied to your account identifier.
These are plain counters. They contain no filenames, no project names, no chat or terminal content, and nothing about what you were doing, only how much. The server stores the current day's totals and knows nothing about the limits themselves; the app decides what your allowance is. Totals are kept only as long as needed to enforce the daily reset, and are deleted with your account.
Premium subscribers are still counted for the same reset mechanism, but no limit is applied.
Third-party services
We use the following external services, each scoped to a specific function:
- Apple Sign in with Apple, authenticates your account. Governed by Apple's Privacy Policy.
- Apple StoreKit / App Store, handles subscription billing. We also query Apple's App Store Server API to confirm a subscription is still active when our own record has gone stale.
- Apple Push Notification service, delivers the notification that a build or long-running command has finished. Apple sees the device token and the notification payload.
- Fly.io, hosts our signaling server (matches your iPhone with your Mac, shuttles WebRTC handshake messages between them, and holds the daily usage counters described above). Logs include masked IPs and operational metadata only; never WebRTC payload.
- Cloudflare, provides the TURN relay used as a fallback for WebRTC when direct P2P is not possible. Relay packets are encrypted with DTLS-SRTP. Cloudflare cannot decrypt them. Cloudflare Web Analytics also measures page views on this website: it is cookieless, stores no personal data, and does not identify individual visitors.
- Firebase Crashlytics (Google), crash reports, hangs, and diagnostics. See the "Usage analytics and crash reporting" section above for what they are keyed to and how to turn them off.
- Mixpanel, product analytics, received on Mixpanel's EU servers. Opt-out via the Share Usage Data toggle on either app.
No advertising networks. No social-login providers other than Apple. No IDFA.
Data retention & deletion
Account records (Apple user ID, name, email, signup date, Mac registration, subscription record) and the current day's usage counters are retained for as long as your Xtend account exists. Push notification tokens are dropped automatically once unused for 60 days, and we keep at most five per account. WebRTC media and terminal traffic is never stored, it flows live between your devices and is gone when the connection closes.
You can delete your Xtend account at any time from inside the iOS app: Settings → Account → Delete Account. Deletion permanently removes your account record from our authentication server, evicts any paired Mac, and revokes your Sign in with Apple grant with Apple. Active subscriptions are managed separately by Apple, to also stop subscription billing, cancel auto-renewal in Settings → your Apple Account → Subscriptions.
Your privacy rights (GDPR, CCPA & others)
If you're in the EU, UK, or California, you have rights under the GDPR and CCPA to access, correct, port, restrict, or delete the personal data we hold about you, and to object to certain processing.
How to exercise your rights: the fastest path for deletion is the in-app Delete Account button. For access, correction, portability, or other requests, email support@getxtend.com with the subject "Data Rights Request" and a description of what you want. We will respond within 30 days. Because we only store the minimal account record described above, most requests result in a copy of that record or a confirmation of deletion.
Legal basis (GDPR Art. 6): performance of the contract with you (account creation and the paired-device service you signed up for), and our legitimate interest in preventing fraud and abuse of the service.
"Do Not Track": Xtend does not use tracking technologies regardless of DNT signal. This website uses Cloudflare Web Analytics, which sets no cookies, stores no personal data, and does not track individual visitors.
International transfers: our signaling server runs on Fly.io in the Frankfurt region (EU), and Mixpanel events are sent to Mixpanel's EU endpoint. Cloudflare TURN routes via Cloudflare's global edge, and Firebase Crashlytics is operated by Google. Apple services (Sign in with Apple, StoreKit, push notifications) are operated by Apple under their own terms and may transit to Apple-controlled regions, including under EU Standard Contractual Clauses where applicable.
Security
All client-to-server traffic uses TLS 1.2+ (HTTPS for auth and management endpoints, WSS for signaling). All WebRTC media uses DTLS-SRTP, the encryption keys are negotiated end-to-end between your iPhone and your Mac, not held by any intermediary. Session tokens are stored on-device in the iOS Keychain with kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly (survives reboot, never syncs, never leaves the device). The Apple refresh token is held server-side, used only to revoke your session on account deletion, and never exposed to the client.
Cookies & tracking technologies
Xtend's iOS and macOS apps do not use cookies, web beacons, fingerprinting, or any tracking technology. This website uses Cloudflare Web Analytics, which sets no cookies, stores no personal data, and does not track individual visitors.
Children's privacy
Xtend is a developer tool intended for users 17 and older, matching its App Store age rating. We do not knowingly collect data from children.
Changes to this policy
If this policy changes, the new version will be posted on this page with a revised effective date. Material changes will be flagged in the iOS app's release notes.
Contact
Privacy questions: support@getxtend.com.
Effective date: 2026-08-04.
← Back to Xtend