mirror of
https://github.com/jkcoxson/idevice.git
synced 2026-03-02 14:36:16 +01:00
Update readme
This commit is contained in:
131
README.md
131
README.md
@@ -6,53 +6,124 @@ and [pymobiledevice3](https://github.com/doronz88/pymobiledevice3),
|
||||
this library interfaces with lockdownd and usbmuxd to perform actions
|
||||
on an iOS device that a Mac normally would.
|
||||
|
||||
For help and information, join the [idevice Discord](https://discord.gg/qtgv6QtYbV)
|
||||
|
||||
## State
|
||||
|
||||
**IMPORTANT**: Breaking changes will happen at each point release until 0.2.0.
|
||||
The library is still in the development and brainstorming stage.
|
||||
Pin your `Cargo.toml` to a specific version to avoid breakage.
|
||||
|
||||
This library is in development and research stage.
|
||||
Releases are being published to crates.io for use in other projects,
|
||||
but the API and feature-set are far from final or even planned.
|
||||
|
||||
- [x] lockdownd connection
|
||||
- [x] SSL support
|
||||
- [x] Heartbeat
|
||||
- [x] Pairing file
|
||||
- [ ] Instproxy (partial support)
|
||||
- [ ] afc
|
||||
- [ ] amfi
|
||||
- [ ] companion proxy
|
||||
- [ ] diagnostics
|
||||
- [ ] file relay
|
||||
- [ ] house arrest
|
||||
- [ ] misagent (certificates)
|
||||
- [x] RemoteXPC
|
||||
- [ ] mobile backup
|
||||
- [ ] notification proxy
|
||||
- [x] DVT protocol
|
||||
- [ ] screenshot
|
||||
- [ ] simulate location
|
||||
- [x] process control
|
||||
- [ ] web inspector
|
||||
- [ ] usbmuxd connection
|
||||
- [ ] Documentation
|
||||
|
||||
## Features
|
||||
|
||||
To keep dependency bloat and compile time down, everything is contained in features.
|
||||
|
||||
- core_device_proxy
|
||||
- heartbeat
|
||||
- afc - Apple File Conduit, partial/in-progress support
|
||||
- core_device_proxy - Start a secure tunnel to access protected services
|
||||
- debug_proxy - Send GDB commands
|
||||
- dvt - Developer tools/instruments
|
||||
- heartbeat - Heartbeat the device
|
||||
- installation_proxy - Install/manage apps, partial support
|
||||
- springboardservices - Manage the sprinboard, partial support
|
||||
- misagent - Manage provisioning profiles
|
||||
- mobile_image_mounter - Manage the DDI mounted on the device
|
||||
- location_simulation - Simulate the GPS location
|
||||
- tcp - Connect to devices over TCP
|
||||
- tunnel_tcp_stack - Naive software TCP stack for core_device_proxy
|
||||
- tss - Requests to Apple's TSS servers, partial support
|
||||
- tunneld - Interface with pymobiledevice3's tunneld
|
||||
- usbmuxd - Connect to devices over usbmuxd daemon
|
||||
- xpc - Get protected services over RSD via XPC
|
||||
- full (all features)
|
||||
|
||||
### Planned/TODO
|
||||
|
||||
Finish the following:
|
||||
|
||||
- lockdown support
|
||||
- afc
|
||||
- installation_proxy
|
||||
- mounter
|
||||
- xpc
|
||||
- full
|
||||
- sprinboard
|
||||
|
||||
Implement the following:
|
||||
|
||||
- amfi
|
||||
- companion_proxy
|
||||
- crash_reports
|
||||
- diagnostics
|
||||
- house_arrest
|
||||
- mobilebackup2
|
||||
- notification_proxy
|
||||
- screenshot
|
||||
- syslog_relay
|
||||
- webinspector
|
||||
|
||||
As this project is done in my free time within my busy schedule, there
|
||||
is no ETA for any of these. Feel free to contribute or donate!
|
||||
|
||||
## Usage
|
||||
|
||||
idevice is purposefully verbose to allow for powerful configurations.
|
||||
No size fits all, but effort is made to reduce boilerplate via providers.
|
||||
|
||||
```rust
|
||||
// enable the usbmuxd feature
|
||||
use idevice::{lockdown::LockdowndClient, IdeviceService};
|
||||
use idevice::usbmuxd::{UsbmuxdAddr, UsbmuxdConnection},
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// usbmuxd is Apple's daemon for connecting to devices over USB.
|
||||
// We'll ask usbmuxd for a device
|
||||
let mut usbmuxd = UsbmuxdConnection::default()
|
||||
.await
|
||||
.expect("Unable to connect to usbmxud")
|
||||
let devs = usbmuxd.get_devices().unwrap();
|
||||
if devs.is_empty() {
|
||||
eprintln!("No devices connected!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a provider to automatically create connections to the device.
|
||||
// Many services require opening multiple connections to get where you want.
|
||||
let provider = devs[0].to_provider(UsbmuxdAddr::from_env_var().unwrap(), 0, "example-program")
|
||||
|
||||
// ``connect`` takes an object with the provider trait
|
||||
let mut lockdown_client = match LockdowndClient::connect(&provider).await {
|
||||
Ok(l) => l,
|
||||
Err(e) => {
|
||||
eprintln!("Unable to connect to lockdown: {e:?}");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
println!("{:?}", lockdown_client.get_value("ProductVersion").await);
|
||||
println!(
|
||||
"{:?}",
|
||||
lockdown_client
|
||||
.start_session(
|
||||
&provider
|
||||
.get_pairing_file()
|
||||
.await
|
||||
.expect("failed to get pairing file")
|
||||
)
|
||||
.await
|
||||
);
|
||||
println!("{:?}", lockdown_client.idevice.get_type().await.unwrap());
|
||||
println!("{:#?}", lockdown_client.get_all_values().await);
|
||||
}
|
||||
```
|
||||
|
||||
More examples are in the ``tools`` crate and in the crate documentation.
|
||||
|
||||
## FFI
|
||||
|
||||
For use in other languages, a small FFI crate has been created to start exposing
|
||||
idevice. Example C programs can be found in this repository.
|
||||
|
||||
## Version Policy
|
||||
|
||||
As Apple prohibits downgrading to older versions, this library will
|
||||
@@ -62,7 +133,7 @@ not keep compatibility for older versions than the current stable release.
|
||||
|
||||
doronz88 is kind enough to maintain a [repo](https://github.com/doronz88/DeveloperDiskImage)
|
||||
for disk images and personalized images.
|
||||
On MacOS, you can find them at ``~/Library/Developer/DeveloperDiskImages`` on a Mac.
|
||||
On MacOS, you can find them at ``~/Library/Developer/DeveloperDiskImages``.
|
||||
|
||||
## License
|
||||
|
||||
|
||||
Reference in New Issue
Block a user