<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mahdi Salek</title>
    <description>The latest articles on DEV Community by Mahdi Salek (@mahdi_s24).</description>
    <link>https://dev.to/mahdi_s24</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F125589%2F5834a7a5-b26c-4166-9998-a025ff7bede5.jpg</url>
      <title>DEV Community: Mahdi Salek</title>
      <link>https://dev.to/mahdi_s24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mahdi_s24"/>
    <language>en</language>
    <item>
      <title>How I Built an Incremental iPhone Backup Tool for Windows Using Tauri and Rust</title>
      <dc:creator>Mahdi Salek</dc:creator>
      <pubDate>Sat, 14 Nov 2026 10:48:03 +0000</pubDate>
      <link>https://dev.to/mahdi_s24/how-i-built-an-incremental-iphone-backup-tool-for-windows-using-tauri-and-rust-37e1</link>
      <guid>https://dev.to/mahdi_s24/how-i-built-an-incremental-iphone-backup-tool-for-windows-using-tauri-and-rust-37e1</guid>
      <description>&lt;p&gt;If you shoot high-bitrate 4K videos on an iPhone and edit them on a Windows PC, you already know the pain: transferring gigabytes of footage via Windows File Explorer over MTP is unreliable. Connections randomly drop mid-transfer, transfers freeze, and resuming requires manually checking which files already made it to your external drive.&lt;/p&gt;

&lt;p&gt;I wanted a lightweight, single-purpose, local-first utility without iTunes bloat or cloud subscriptions. So I built &lt;strong&gt;iphone-backup-sync&lt;/strong&gt;, an open-source desktop application powered by &lt;strong&gt;Tauri v2&lt;/strong&gt;, &lt;strong&gt;Rust&lt;/strong&gt;, and &lt;strong&gt;Vue 3&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;Instead of relying on Windows' built-in MTP layer, the Rust backend interfaces directly with the device over USB using &lt;code&gt;libimobiledevice&lt;/code&gt; and &lt;code&gt;ifuse&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;The frontend is built with Vue 3 and TypeScript, keeping the UI minimal and responsive while Rust handles the heavy lifting of file system scanning and byte-level comparisons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Engineering Decisions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Incremental Syncing:&lt;/strong&gt; Before transferring anything, the backend scans the target directory on your Windows drive and compares it against the iPhone's DCIM structure. Already-backed-up files are skipped automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Destructive Conflict Handling:&lt;/strong&gt; Interrupted transfers often leave behind partial or corrupted files. If the app finds an existing file with the same name but a different byte size, it never overwrites your existing backup. Instead, it saves the incoming file with a &lt;code&gt;_new&lt;/code&gt; suffix so you can inspect both safely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated CI/CD Releases:&lt;/strong&gt; Every version tag (&lt;code&gt;v*&lt;/code&gt;) triggers a GitHub Actions workflow that compiles and attaches clean Windows &lt;code&gt;.exe&lt;/code&gt; installers directly to the GitHub Releases page.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It Out or Contribute
&lt;/h2&gt;

&lt;p&gt;The project is 100% open-source. You can inspect the Rust/Tauri source code or grab the latest Windows binary directly from GitHub:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/mahdis24/iphone-backup-sync" rel="noopener noreferrer"&gt;github.com/mahdis24/iphone-backup-sync&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am currently working on automatic USB plug-in detection and expanding support for Android devices. If you run into Windows driver edge cases or have ideas for improvements, feel free to open an issue or drop a comment below!&lt;/p&gt;

</description>
      <category>windows</category>
      <category>opensource</category>
      <category>tauri</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
