Skip to content

Manual setup (advanced)

Mirrage isn’t on the App Store, so it’s installed (“sideloaded”) with your Apple ID.

  1. Download the Mirrage .ipa from the download page.
  2. Install it with the sideloading tool you prefer - Sideloadly, AltStore or SideStore all work. Sign in with your Apple ID when the tool asks.
  3. On the iPhone, open Settings → General → VPN & Device Management, tap your Apple ID under Developer App and tap Trust.
  1. Open Settings → Privacy & Security, scroll to the bottom and tap Developer Mode.
  2. Switch it on and tap Restart.
  3. After the restart, unlock your iPhone and tap Turn On.

Can’t see it? It only appears once a developer-signed app (step 1) is installed - see Developer Mode is missing.

Mirrage needs a remote pairing file - a small .plist with three keys: identifier, public_key and private_key. It must be made on a computer with the iPhone plugged in.

With Python 3.10+:

Terminal window
pip install pymobiledevice3

Save this as make_pairing_file.py, plug in and unlock your iPhone, and run it:

import asyncio, plistlib
from pathlib import Path
from pymobiledevice3.exceptions import RemotePairingCompletedError
from pymobiledevice3.lockdown import create_using_usbmux
from pymobiledevice3.pair_records import generate_host_id, get_home_folder
from pymobiledevice3.remote.tunnel_service import RemotePairingLockdownService
async def main():
lockdown = await create_using_usbmux()
udid = await lockdown.get_value(key="UniqueDeviceID")
service = await RemotePairingLockdownService.create(lockdown)
try:
try:
await service.connect(autopair=True)
except RemotePairingCompletedError:
# The phone drops the connection the moment pairing completes.
await service.close()
service = await RemotePairingLockdownService.create(lockdown)
await service.connect(autopair=False)
finally:
await service.close()
record = plistlib.loads(Path(get_home_folder(), f"remote_{udid}.plist").read_bytes())
Path("pairingFile.plist").write_bytes(plistlib.dumps({
"public_key": record["public_key"],
"private_key": record["private_key"],
"identifier": generate_host_id(),
}))
print("Saved pairingFile.plist")
asyncio.run(main())
Terminal window
python make_pairing_file.py

Send pairingFile.plist to your iPhone (AirDrop, or save it in Files), then in Mirrage open Settings → Connection → Replace setup file and pick it. Mirrage confirms with “Setup file added”.

Install LocalDevVPN from the App Store (free), open it and tap Connect. Mirrage uses it to reach your iPhone’s location settings - keep it on while you use Mirrage.

In Mirrage, start a teleport - the subscription sheet appears. Paste your key, or point your iPhone camera at the QR code on your purchase page. Done.