mirror of
https://github.com/jkcoxson/idevice.git
synced 2026-03-02 06:26:15 +01:00
Update readme
This commit is contained in:
61
README.md
61
README.md
@@ -1,12 +1,14 @@
|
|||||||
# idevice
|
# idevice
|
||||||
|
|
||||||
A Rust library for interacting with iOS services.
|
A pure Rust library for interacting with iOS services.
|
||||||
Inspired by [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)
|
Inspired by [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)
|
||||||
and [pymobiledevice3](https://github.com/doronz88/pymobiledevice3),
|
[pymobiledevice3](https://github.com/doronz88/pymobiledevice3),
|
||||||
this library interfaces with lockdownd and usbmuxd to perform actions
|
and [go-ios](https://github.com/danielpaulus/go-ios)
|
||||||
|
this library interfaces with lockdownd, usbmuxd, and RSD to perform actions
|
||||||
on an iOS device that a Mac normally would.
|
on an iOS device that a Mac normally would.
|
||||||
|
|
||||||
For help and information, join the [idevice Discord](https://discord.gg/qtgv6QtYbV)
|
For help and information, join the [idevice Discord](https://discord.gg/qtgv6QtYbV)
|
||||||
|
|
||||||
[](https://deepwiki.com/jkcoxson/idevice)
|
[](https://deepwiki.com/jkcoxson/idevice)
|
||||||
|
|
||||||
## State
|
## State
|
||||||
@@ -18,6 +20,25 @@ This library is in development and research stage.
|
|||||||
Releases are being published to crates.io for use in other projects,
|
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.
|
but the API and feature-set are far from final or even planned.
|
||||||
|
|
||||||
|
## Why use this?
|
||||||
|
|
||||||
|
libimobiledevice is a groundbreaking library. Unfortunately, it hasn't
|
||||||
|
been seriously updated in a long time, and does not support many modern
|
||||||
|
iOS features.
|
||||||
|
|
||||||
|
Libraries such as pymobiledevice3 and go-ios have popped up to fill that
|
||||||
|
gap, but both lacked the support I needed for embedding into applications
|
||||||
|
and server programs. Python requires an interpreter, and Go's current
|
||||||
|
ability to be embedded in other languages is lacking.
|
||||||
|
|
||||||
|
This library is currently used in popular apps such as
|
||||||
|
[StikDebug](https://github.com/StephenDev0/StikDebug),
|
||||||
|
[CrossCode](https://github.com/nab138/CrossCode)
|
||||||
|
and
|
||||||
|
[Protokolle](https://github.com/khcrysalis/Protokolle).
|
||||||
|
``idevice`` has proven there is a need. It's currently deployed on tens of
|
||||||
|
thousands of devices, all across the world.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
To keep dependency bloat and compile time down, everything is contained in features.
|
To keep dependency bloat and compile time down, everything is contained in features.
|
||||||
@@ -126,16 +147,36 @@ More examples are in the [`tools`](tools/) crate and in the crate documentation.
|
|||||||
For use in other languages, a small FFI crate has been created to start exposing
|
For use in other languages, a small FFI crate has been created to start exposing
|
||||||
idevice. Example C programs can be found in the [`ffi/examples`](ffi/examples/) directory.
|
idevice. Example C programs can be found in the [`ffi/examples`](ffi/examples/) directory.
|
||||||
|
|
||||||
## Version Policy
|
### C++
|
||||||
|
|
||||||
As Apple prohibits downgrading to older versions, this library will
|
"Hey wait a second, there's a lot of C++ code in this library!!"
|
||||||
not keep compatibility for older versions than the current stable release.
|
C++ bindings have been made for many of idevice's features. This allows smooth
|
||||||
|
and safer usage in C++ and Swift codebases.
|
||||||
|
|
||||||
## Developer Disk Images
|
## Technical Explanation
|
||||||
|
|
||||||
doronz88 is kind enough to maintain a [repo](https://github.com/doronz88/DeveloperDiskImage)
|
There are so many layers and protocols in this library, many stacked on top of
|
||||||
for disk images and personalized images.
|
one another. It's difficult to describe the magnitude that is Apple's interfaces.
|
||||||
On MacOS, you can find them at ``~/Library/Developer/DeveloperDiskImages``.
|
|
||||||
|
I would recommend reading the DeepWiki explanations and overviews to get an idea
|
||||||
|
of how this library and their associated protocols work. But a general overview is:
|
||||||
|
|
||||||
|
### Lockdown
|
||||||
|
|
||||||
|
1. A lockdown service is accessible via a port given by lockdown
|
||||||
|
1. Lockdown is accessible by USB or TCP via TLS
|
||||||
|
1. USB is accessible via usbmuxd
|
||||||
|
1. usbmuxd is accessed through a unix socket
|
||||||
|
1. That Unix socket has its own protocol
|
||||||
|
|
||||||
|
### RemoteXPC/RSD
|
||||||
|
|
||||||
|
1. An RSD service is discovered through a RemoteXPC handshake response
|
||||||
|
1. RemoteXPC is transferred over non-compliant HTTP/2
|
||||||
|
1. That HTTP/2 is accessed through an NCM USB interface or CoreDeviceProxy
|
||||||
|
1. CoreDeviceProxy is a lockdown service, see above
|
||||||
|
|
||||||
|
This doesn't even touch RPPairing, which is still a mystery as of writing.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user