Workspace structure
The project uses Cargo workspace with Rust edition 2024:Applications
Impactor provides two frontend applications:plumeimpactor
GUI applicationThe main graphical interface built with Iced. Provides a user-friendly interface for sideloading apps with visual feedback.
- Built with Iced for cross-platform GUI
- System tray integration
- File dialogs and notifications
- Single instance enforcement
- Auto-launch on startup support
plumesign
CLI applicationSimple command-line interface for signing, using
clap for argument parsing. Ideal for automation and scripting.- Command-line argument parsing with clap
- Interactive prompts with dialoguer
- Scriptable workflow support
Core libraries
The functionality is split across four core crates:plume_core
Apple API communication and authentication Handles all API requests for communicating with Apple developer services, along with providing auth for Apple’s Grandslam.Key responsibilities
Key responsibilities
- Apple Developer API: Certificate management, provisioning profiles, device registration
- Grandslam authentication: Apple ID authentication using Omnisette
- Cryptography: AES, RSA, HMAC, SHA for secure communication
- Code signing: Integration with apple-codesign-rs (forked and extended)
- Certificate handling: P12, PEM, X.509 certificate management
Major dependencies
Major dependencies
plume_utils
Signing and modification logic Shared code between GUI and CLI, containing signing and modification logic, and helper functions.Key responsibilities
Key responsibilities
- IPA handling: ZIP extraction and compression
- Binary modification: App customization and tweak injection
- Signing workflow: Coordinating the signing process
- Image processing: Icon and asset handling
- Device communication: Using idevice for installation
Major dependencies
Major dependencies
plume_store
Data storage layer Handles persistent data storage for certificates, credentials, and application state.Key responsibilities
Key responsibilities
- Certificate storage: Local certificate and key management
- Configuration persistence: User settings and preferences
- Cache management: Temporary data and downloads
- Keychain integration: Secure credential storage
plume_gestalt
macOS UDID retrieval (macOS only) Wrapper forlibMobileGestalt.dylib, used for obtaining your Mac’s UDID for Apple Silicon sideloading.
Platform support
Platform support
This crate is only included on macOS builds:It provides essential functionality for signing apps to run on Apple Silicon Macs.
Module dependency graph
How Impactor works
Understanding the sideloading workflow helps when contributing:Certificate creation
Create or reuse an Apple Developer certificate (lasts 365 days). The private key is stored locally in the keychain.
App modification
Perform necessary modifications:
- Inject tweaks (using ElleKit)
- Change app name/bundle ID
- Add frameworks, bundles, or app extensions
- Handle entitlements
Free Apple Developer accounts are limited to 7-day signatures and a limited number of app IDs and provisioning profiles.
Key technologies
Frontend (plumeimpactor)
- Iced: Cross-platform GUI framework
- tray-icon: System tray integration
- rfd: Native file dialogs
- notify-rust: Desktop notifications
Backend (shared)
- idevice: Communication with installd for sideloading
- apple-codesign-rs: Code signing (forked and extended)
- Omnisette: Apple authentication (Grandslam)
- goblin: Binary parsing for entitlement extraction
Platform-specific
- macOS: objc2 for native API access, MobileGestalt for UDID
- Linux: gtk for system tray, usbmuxd for device communication
- Windows: winresource for app resources, iTunes drivers required
Contributing to modules
When contributing, identify which module your changes affect:- Apple API changes →
plume_core - Signing/modification logic →
plume_utils - Storage/persistence →
plume_store - GUI features →
apps/plumeimpactor - CLI features →
apps/plumesign - macOS UDID →
plume_gestalt