CI covers a lot — unit and integration tests with several real devices in one process, browser tests, the desktop apps opening their window on macOS and Windows, and the Android app receiving a real transfer in an emulator. What it can’t cover is your actual Wi‑Fi, firewalls, OS permission prompts and hardware. This checklist does. It takes about 20 minutes.
You need: a Windows PC and/or a Mac, an Android phone, a Samsung tablet (or a second Android device), all on the same Wi‑Fi (not a guest network). An iPhone/iPad is a bonus for the browser-only path.
Install from the latest release
— or, before a release exists, from a green CI run’s Artifacts (bottom of the
run page, signed in to GitHub; each download is a .zip): open-transfer-windows-x64.exe,
open-transfer-macos-<arch>.dmg, open-transfer-android.apk on both Android
devices. First launch: allow Private networks (Windows firewall), Local
Network (macOS), notifications (Android).
scripts/device_check.py drives the real apps over your Wi‑Fi and fills in most
of sections 1–4 and 6 by itself: discovery, names/types, rename, an Android app
leaving and coming back, pairing by code in both directions (and exactly what a
QR scan sends), a photo and a 1 GB file in every direction between every two
devices (checked byte for byte, and on Android in Download/Open Transfer),
one / two / every device, decline, 2‑minute expiry, cancel, too big, a receiver
leaving mid‑transfer and Send now.
You need Python 3.10+ and adb (platform-tools)
on the computer. Then:
adb pair 192.168.1.23:37000 # the IP:port and code the phone shows
adb connect 192.168.1.23:41000 # the IP:port on the Wireless debugging screen
adb devices # each device listed as "device"
python scripts/device_check.py --apk open-transfer-android.zip
--apk takes the .apk or the CI artifact .zip and installs it on every connected
device first. --quick uses a 100 MB file and skips the 2‑minute wait;
--serial <id> limits it to some devices. With one Android device the
one-to-many checks are skipped — connect the tablet too and run it again.
It writes device-check-<time>.md (✅ / ❌ per check + the checks that need a
person) and, if anything failed, Android logs next to it — send those files back.
Run it once on the Windows PC and once on the Mac. Notes:
--keep.adb for the button press, so with wireless
debugging that direction is slower than real use.Then do the rest by hand: everything marked 👤 in the results file, which are the on-screen parts below (prompts, the 🔗 badge, the QR camera, drag and drop, confirmation dialog, notifications, Wi‑Fi off/on, browsers, Windows ↔ Mac).
Copy the tables into an issue and fill in ✅ / ❌ (+ a note or screenshot for ❌).
| # | Check | Win | Mac | Phone | Tab |
|---|---|---|---|---|---|
| 1.1 | Each device lists every other one under Nearby devices within ~5 s | ||||
| 1.2 | Names, icons (computer / phone / tablet) and platforms are right | ||||
| 1.3 | Rename a device (✎ next to its name) → others show the new name within ~10 s | ||||
| 1.4 | Close the app on one device → it disappears (or shows Not nearby if paired) on the others | ||||
| 1.5 | Reopen it → it comes back without restarting the others |
| # | Check | Result |
|---|---|---|
| 2.1 | On the Mac/PC: Add device shows a QR code and a 6-digit code | |
| 2.2 | On the phone app: Add device → Enter a code → type the PC’s code → Paired with … on both | |
| 2.3 | On the tablet app: Add device → Scan its QR code → scan the Mac’s QR → paired | |
| 2.4 | A wrong code is refused; 5 wrong codes in a minute are rate-limited | |
| 2.5 | Paired devices show the 🔗 badge; sending between them doesn’t ask to accept | |
| 2.6 | Pair the other way round (start from the phone, enter the code on the PC) |
Send a photo and a large file (≥ 1 GB video). For each row: the receiver gets an Accept / Decline prompt (unless paired), progress shows on both sides, the file opens correctly afterwards, and it’s in Downloads/Open Transfer.
| From → To | Photo | 1 GB file | Notes |
|---|---|---|---|
| Windows → Android phone | |||
| Android phone → Windows | |||
| Windows → Mac | |||
| Mac → Windows | |||
| Windows → Samsung Tab | |||
| Samsung Tab → Windows | |||
| Mac → Android phone | |||
| Android phone → Mac | |||
| Mac → Samsung Tab | |||
| Samsung Tab → Mac | |||
| Android phone → Samsung Tab | |||
| Samsung Tab → Android phone |
| # | Check | Result |
|---|---|---|
| 4.1 | One device selected → only that device is asked; nobody else gets anything | |
| 4.2 | Select 2 of 3 devices → only those two are asked; per-device progress for each | |
| 4.3 | Select all → Send to N asks Send to everyone nearby? first; Cancel sends nothing | |
| 4.4 | Confirm → every device gets it; one declining doesn’t stop the others | |
| 4.5 | Drop a file onto a device tile (desktop) → goes only to that device | |
| 4.6 | One receiver leaves (close app / Wi‑Fi off) mid-transfer → others still finish; that one shows Failed with Retry | |
| 4.7 | Send now while one device hasn’t answered → the accepted ones get it |
| # | Check | Result |
|---|---|---|
| 5.1 | Scan a device’s QR code with the iPhone camera → the page opens and shows the other devices | |
| 5.2 | iPhone → Windows app; Windows app → iPhone (Sent to you → Save) | |
| 5.3 | Two browsers (iPhone + another phone’s browser) → transfer says Delivered directly | |
| 5.4 | Add the page to the home screen; it opens like an app | |
| 5.5 | A browser that only opened the link can’t see the device’s own files |
| # | Check | Result |
|---|---|---|
| 6.1 | Turn Wi‑Fi off on a device → Reconnecting…; back on → Reconnected, list refreshes | |
| 6.2 | Decline → sender sees Declined; let an offer sit 2 min → Didn’t answer | |
| 6.3 | Cancel from the sender mid-transfer → receiver shows it stopped; no half file in the folder | |
| 6.4 | Not enough space / file too big → declined up front with a reason | |
| 6.5 | Android: switch apps during a transfer → it keeps going (notification shown) | |
| 6.6 | Android: incoming offer while the app is in the background → notification |
…/Open Transfer/.open-transfer/open-transfer.log;
Android adb logcat -d | grep -iE "python|open_transfer|AndroidRuntime".