Files & Apps
Installation Proxy
Query and manage installed applications.
InstallationProxyClient connects to com.apple.mobile.installation_proxy.
It can look up installed apps, browse apps, install packages already staged in
the AFC jail, upgrade packages, uninstall apps, and check capabilities.
Use It For
- Listing installed applications.
- Installing or upgrading an app package staged through AFC.
- Uninstalling an app by bundle ID.
- Checking installation capabilities.
Feature Flag
[dependencies]
idevice = { version = "0.1.64", features = ["usbmuxd", "installation_proxy"] }Service Names
| Path | Value |
|---|---|
| Lockdown service | com.apple.mobile.installation_proxy |
| RSD service | com.apple.mobile.installation_proxy.shim.remote |
Rust Example
use idevice::{IdeviceService, installation_proxy::InstallationProxyClient};
let provider = first_provider().await?;
let mut instproxy = InstallationProxyClient::connect(&provider).await?;
let apps = instproxy.get_apps(Some("User"), None).await?;
for bundle_id in apps.keys() {
println!("{bundle_id}");
}Install a package already uploaded to the AFC jail:
instproxy
.install_with_callback(
"PublicStaging/App.ipa",
None,
|(percentage, _)| async move {
println!("Installing: {percentage}%");
},
(),
)
.await?;For local .ipa files, use the high-level helper in idevice::utils::installation;
it handles AFC staging and Installation Proxy.
CLI Equivalent
idevice-tools instproxy lookup
idevice-tools instproxy browse
idevice-tools instproxy install PublicStaging/App.ipaHigh-level local install:
idevice-tools ideviceinstaller install ./App.ipa
idevice-tools ideviceinstaller upgrade ./App.ipaCommon Errors
| Error | What to check |
|---|---|
| Missing package path | install expects a path inside the AFC jail, not a host path. |
| Installation failed | Check the package signature, provisioning, and device trust state. |
Missing LookupResult | The response did not match the expected Installation Proxy plist shape. |