A simple, cross-platform GUI file explorer for iOS devices, built with Rust.
AFC Finder is a desktop utility that provides a graphical interface for the Apple File Conduit (AFC) protocol. This allows you to browse the filesystem of a connected iPhone or iPad, transfer files, and manage directories.
It is built entirely in Rust using egui for the interface and idevice for device communication.
- Device Discovery: Automatically detects and lists connected iOS devices by name.
- Multiple Connection Modes:
- Root: Access the full AFC jail.
- App Documents: Browse the
/Documentsdirectory of a specific user application. - App Container: Browse the entire sandboxed container of a specific user application.
- Crash Reports: Access the device's crash log directory.
- Application Lister: Fetches and displays a searchable list of installed user applications to easily select a
bundle_idfor "Documents" or "Container" mode. - File Operations:
- Download files and folders (recursively).
- Upload files and folders (recursively).
- Create new directories.
- Delete files and directories.
- Modern UI:
- Intuitive file explorer with an editable path bar.
- Sortable columns (name, size, modified date).
- Progress bars for active file transfers.
- Status bar for feedback on operations.
- In-app log viewer for debugging.
To connect to an iOS device, you must have the necessary Apple mobile device drivers installed on your system.
- macOS: Comes pre-installed.
- Windows: Installed with iTunes from Apple's website (not the Microsoft Store).
- Linux: Requires
usbmuxdto be installed and running.
- Ensure you have the Rust toolchain installed.
- Clone the repository:
git clone https://github.com/jkcoxson/afc_finder.git cd afc_finder - Build and run the project:
# For a debug build cargo run # For a release build cargo build --release ./target/release/afc_finder
The application uses a multi-threaded, asynchronous architecture:
- The
eguiGUI runs on the main thread. - A
tokiomulti-thread runtime is spawned to handle all blocking I/O and device communication. - Separate
tokiotasks are dedicated to:- Device discovery (
usbmuxd,lockdown). - Application listing (
installation_proxy). - File operations (
afc,house_arrest,crashreportcopymobile).
- Device discovery (
- Communication between the GUI and the async tasks is managed using
tokio::sync::mpsc::unbounded_channels, following a command/event pattern.
eframe/egui: For the cross-platform GUI.tokio: Asynchronous runtime.idevice: For all iOS device communication (AFC, Lockdown, etc.).rfd: (Rust File Dialog) For native "Open/Save" dialogs.egui_logger: For the in-app log viewer.
MIT