Highlights
✨ Streaming app install
apps install --streaming sends an app through com.apple.streaming_zip_conduit, the way Xcode installs: the device extracts it while it arrives, instead of unpacking an .ipa uploaded over AFC. It takes an .ipa or an .app directory, and works over USB and over a tunnel.
pymobiledevice3 apps install --streaming MyApp.ipa
pymobiledevice3 apps install --streaming --developer build/MyApp.appThe library side is StreamingZipConduitService.
✨ Notification state (iOS 27.2+)
Since iOS 27.2 the notification proxy can read and write a notification's 64-bit notify(3) state, which system daemons use to publish a current value such as the lock state, the orientation or low power mode. Reading needs an RSD tunnel.
# Read current values
pymobiledevice3 notification get-state com.apple.springboard.lockstate com.apple.backboardd.orientation
# Set a value and post the notification; the device keeps it until you hit Ctrl+C
pymobiledevice3 notification set-state com.example.notification 1The device holds a value that was set only while the setting connection stays open, and resets it to 0 afterwards.
✨ App console output
launch-application --console attaches to the launched app's stdout and stderr and prints them until the app exits, through the new OpenStdioSocketService (com.apple.coredevice.openstdiosocket). launch-application also no longer requires at least one app argument.
pymobiledevice3 developer core-device launch-application com.example.app --console🐛 diagnostics restart --reconnect waits for the restart
The command printed "Device Reconnected" at once, before the device had gone down. The device only restarts when the connection that asked for it is closed, and the command kept that connection open while it waited. It now closes the connection, waits for the device to drop off usbmuxd, and returns once the device is back.
pymobiledevice3 diagnostics restart -r🐛 Userspace tunnel closes its connections on the device
Over the userspace tunnel, the last connection a command closed never reached the device: the network stack stopped before the close left, so the device kept the connection open after the command had exited. Teardown now waits until the closes are sent, which adds about 20 ms to a command.
✨ StorageMounterBridgeService
com.apple.mobile.storage_mounter_proxy.bridge is the image mounter over RemoteXPC. It reports what MobileImageMounterService already does, so it is available as a library service with the read-only queries, without a CLI command.
What's Changed
- ede8769 diagnostics: Make restart --reconnect wait for the restart (#2005) (@doronz88)
- 970a5aa apps: Add a streaming install through streaming_zip_conduit (#2005) (@doronz88)
- 1bedc32 storage_mounter_bridge: Add the RemoteXPC image mounter queries (#2005) (@doronz88)
- 4b34f17 core-device: Attach to a launched app's stdout and stderr (#2005) (@doronz88)
- 5943485 core-device: Let launch-application run without app arguments (#2005) (@doronz88)
- a62f9e4 notification_proxy: Get and set notification state (#2005) (@doronz88)
- bfcc15e userspace: Let closed connections send their FIN before the tunnel stops (#2005) (@doronz88)
Full Changelog: v11.24.0...v11.25.0