DEV Community

Cover image for iPhone + Linux = pain. So I built Rollcopy ๐Ÿฆ€๐Ÿ“ธ
Ankur K
Ankur K

Posted on

iPhone + Linux = pain. So I built Rollcopy ๐Ÿฆ€๐Ÿ“ธ

The pain ๐Ÿ˜ฉ

If you use an iPhone and a Linux laptop, you know this one.

You plug the phone in. Ubuntu shows a folder called DCIM. Inside: 100APPLE, 101APPLE, 102APPLEโ€ฆ thousands of IMG_XXXX files with no dates, no albums, no idea which ones you already copied.

There's no iTunes for Linux. Apple's tools are for macOS and Windows only. So you end up with one of these:

  • ๐Ÿ“ง emailing photos to yourself, like it's 2009
  • โ˜๏ธ uploading everything to some cloud and downloading it again
  • ๐Ÿ”Œ borrowing a Windows laptop "just for a minute"

And even when the files land on your disk, the fun isn't over:

  • ๐Ÿ–ผ๏ธ HEIC photos won't open on older laptops, some photo viewers, smart TVs and many printing shops
  • ๐ŸŽž๏ธ MOV videos (HEVC, HDR) won't play on half the devices in the house, or play in black and white
  • โœ‚๏ธ edited photos and the originals get mixed up

Basically:

Me: *plugs iPhone into Ubuntu*
iPhone: "Trust This Computer?"
Me: *taps Trust*
Ubuntu: here's 4,000 files named IMG_0001 to IMG_9999 ๐Ÿซก
Me: *double-clicks IMG_0042.HEIC*
Ubuntu: "No app installed for HEIF image"
Me: ๐Ÿ™‚๐Ÿ”ซ
Enter fullscreen mode Exit fullscreen mode

Meet Rollcopy ๐Ÿ‘‹

Rollcopy is a Linux desktop app that copies photos and videos from an iPhone over a USB cable, as files any Android phone, PC or TV can open.

Plug in the phone, tap Trust, pick what you want, and Rollcopy copies it to:

~/Pictures/Rollcopy/<phone name>/YYYY/MM/images|videos/
Enter fullscreen mode Exit fullscreen mode

converting HEIC to JPG and MOV to MP4 on the way. No iTunes, no cloud, no account.

Rollcopy on Linux Mint: the iPhone's library by year and month, a thumbnail grid with copied badges, the preview pane with photo details, and the transfer queue

What it does โœจ

  • ๐Ÿ—‚๏ธ Browse your Photos library like on the phone: by year and month, or by album, with filters (photos, videos, edited, copied / not copied) and a full-window viewer.
  • ๐Ÿ”„ Converts while copying: HEIC โ†’ JPG (keeps colour profile and EXIF), MOV โ†’ MP4 (lossless by default, or H.264 with GPU acceleration for old devices).
  • โœ‚๏ธ Edited photos come out edited. Live Photos come out as the still.
  • โœ… Knows what you already copied, so you can copy "everything new" without duplicates. iPhones reuse names like IMG_0057 after 9,999 photos; Rollcopy saves a different photo as IMG_0057 (2).JPG instead of overwriting.
  • ๐Ÿ“‹ Transfer queue with progress, pause/resume, retry and an error report. Unplug or lock the phone mid-copy and the queue pauses, then carries on when it's back.
  • ๐Ÿ” Details for every item: date, camera and lens, the app that saved it (Camera, WhatsApp, โ€ฆ), place name and albums.
  • ๐Ÿ–ฅ๏ธ Tray icon and notifications, so you can close the window and let a big copy run.

Security and privacy ๐Ÿ”’

This was a hard rule from day one:

  • ๐Ÿ“ฑ Your phone is read-only. Rollcopy has no code to write, rename or delete anything on the iPhone. The only change is the trust record from tapping Trust, same as with a Mac or PC.
  • ๐Ÿ™ˆ Private by default. The Hidden album and Recently Deleted are not shown or copied unless you turn them on. Even then, Hidden items stay blurred until you click ๐Ÿ‘ on each one.
  • ๐ŸŒ No network, except a "Check for updates" call to GitHub. Nothing is uploaded, no telemetry.
  • ๐Ÿ’พ Safe writes: each file is written to a temp file, checked, then renamed, so a failed copy never damages an existing file.
  • ๐Ÿงน Caches are readable by you only, and the copied Photos database is deleted as soon as the library is read.

Built with Rust ๐Ÿฆ€ and gpui โšก

Rollcopy is written in Rust, with the UI in gpui (the GPU-accelerated UI framework behind the Zed editor) and gpui-component. It talks to the phone with the idevice crate, decodes HEIC with libheif, and uses FFmpeg for video.

The device access, Photos library reader, conversion and copy queue are all headless crates with their own tests; the app on top is a thin UI.

Yes, it's vibe coded ๐Ÿค– (but tested)

I'll be honest: a lot of Rollcopy was written with AI coding agents. But "vibe coded" doesn't mean "untested":

  • ๐Ÿ“ฑ tested with a real iPhone on iOS 27, copying a real photo library, on Linux Mint 22 (Cinnamon, X11) and Ubuntu 26.04 (GNOME, Wayland). The screenshot above is the real thing.
  • ๐Ÿงช unit tests for the headless crates (device access, Photos library, conversion, copy queue)
  • ๐ŸŸข CI with clippy (warnings as errors) on every push

Status: early, but stable enough ๐Ÿšง

Rollcopy is at v0.3.1. It's early, but it's been copying real photo libraries without drama. Expect rough edges, and please report them.

What's next ๐Ÿ›ฃ๏ธ

  • ๐ŸชŸ Windows 11 support
  • โ˜๏ธ AWS S3 sync
  • ๐ŸŸ  Cloudflare R2 sync

Try it ๐Ÿš€

Needs Ubuntu 24.04+ or something based on it (Linux Mint 22+, Pop!_OS 24.04, โ€ฆ).

Grab the .deb or .AppImage from Releases:

sudo apt install ./rollcopy_0.3.1-1_amd64.deb
Enter fullscreen mode Exit fullscreen mode
  • โญ Star it on GitHub
  • ๐Ÿ› Found a bug? Open an issue
  • ๐Ÿ’ฌ Using an iPhone with Linux? Tell me in the comments how you've been surviving so far ๐Ÿ‘‡

Top comments (0)