pymobiledevice3 6.1.0__tar.gz → 6.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/PKG-INFO +1 -1
  2. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/_version.py +3 -3
  3. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/syslog.py +1 -1
  4. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/service_connection.py +10 -10
  5. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/device_link.py +45 -31
  6. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/PKG-INFO +1 -1
  7. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/SOURCES.txt +1 -0
  8. pymobiledevice3-6.1.2/tests/services/test_house_arrest.py +26 -0
  9. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.gitattributes +0 -0
  10. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/FUNDING.yml +0 -0
  11. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/pull_request_template.md +0 -0
  15. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/workflows/codeql.yml +0 -0
  16. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/workflows/generate-executable.py +0 -0
  17. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/workflows/markdown-lint.yml +0 -0
  18. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/workflows/python-app.yml +0 -0
  19. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.github/workflows/python-publish.yml +0 -0
  20. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.gitignore +0 -0
  21. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/.pre-commit-config.yaml +0 -0
  22. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/CODE_OF_CONDUCT.md +0 -0
  23. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/CONTRIBUTING.md +0 -0
  24. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/LICENSE +0 -0
  25. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/README.md +0 -0
  26. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/example.gif +0 -0
  27. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/markdownlint-config.json +0 -0
  28. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/DTServices-14.2.txt +0 -0
  29. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/DTServices-14.5.txt +0 -0
  30. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/RemoteXPC.md +0 -0
  31. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/plist_sniffer.py +0 -0
  32. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/pyinstaller.md +0 -0
  33. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/remotexpc_sniffer.py +0 -0
  34. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/understanding_idevice_protocol_layers.md +0 -0
  35. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/misc/usbmux_sniff.sh +0 -0
  36. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/__init__.py +0 -0
  37. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/__main__.py +0 -0
  38. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/bonjour.py +0 -0
  39. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/ca.py +0 -0
  40. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/__init__.py +0 -0
  41. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/activation.py +0 -0
  42. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/afc.py +0 -0
  43. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/amfi.py +0 -0
  44. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/apps.py +0 -0
  45. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/backup.py +0 -0
  46. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/bonjour.py +0 -0
  47. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/cli_common.py +0 -0
  48. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/companion_proxy.py +0 -0
  49. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/completions.py +0 -0
  50. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/crash.py +0 -0
  51. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/developer.py +0 -0
  52. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/diagnostics.py +0 -0
  53. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/idam.py +0 -0
  54. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/lockdown.py +0 -0
  55. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/mounter.py +0 -0
  56. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/notification.py +0 -0
  57. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/pcap.py +0 -0
  58. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/power_assertion.py +0 -0
  59. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/processes.py +0 -0
  60. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/profile.py +0 -0
  61. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/provision.py +0 -0
  62. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/remote.py +0 -0
  63. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/restore.py +0 -0
  64. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/springboard.py +0 -0
  65. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/usbmux.py +0 -0
  66. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/version.py +0 -0
  67. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/cli/webinspector.py +0 -0
  68. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/common.py +0 -0
  69. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/exceptions.py +0 -0
  70. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/irecv.py +0 -0
  71. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/irecv_devices.py +0 -0
  72. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/lockdown.py +0 -0
  73. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/lockdown_service_provider.py +0 -0
  74. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/osu/__init__.py +0 -0
  75. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/osu/os_utils.py +0 -0
  76. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/osu/posix_util.py +0 -0
  77. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/osu/win_util.py +0 -0
  78. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/pair_records.py +0 -0
  79. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/__init__.py +0 -0
  80. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/common.py +0 -0
  81. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/__init__.py +0 -0
  82. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/app_service.py +0 -0
  83. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/core_device_service.py +0 -0
  84. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/device_info.py +0 -0
  85. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/diagnostics_service.py +0 -0
  86. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/core_device/file_service.py +0 -0
  87. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/module_imports.py +0 -0
  88. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/remote_service.py +0 -0
  89. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/remote_service_discovery.py +0 -0
  90. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/remotexpc.py +0 -0
  91. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/tunnel_service.py +0 -0
  92. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/utils.py +0 -0
  93. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/remote/xpc_message.py +0 -0
  94. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/__init__.py +0 -0
  95. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/dsc_uuid_map.json +0 -0
  96. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/dsc_uuid_map.py +0 -0
  97. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/firmware_notifications.py +0 -0
  98. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/notifications.txt +0 -0
  99. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/element_attribute.js +0 -0
  100. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/element_clear.js +0 -0
  101. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/enter_fullscreen.js +0 -0
  102. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/find_nodes.js +0 -0
  103. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/focus.js +0 -0
  104. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/get_attribute.js +0 -0
  105. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/is_displayed.js +0 -0
  106. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/is_editable.js +0 -0
  107. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/resources/webinspector/is_enabled.js +0 -0
  108. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/__init__.py +0 -0
  109. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/asr.py +0 -0
  110. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/base_restore.py +0 -0
  111. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/consts.py +0 -0
  112. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/device.py +0 -0
  113. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/fdr.py +0 -0
  114. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/ftab.py +0 -0
  115. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/img4.py +0 -0
  116. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/mbn.py +0 -0
  117. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/recovery.py +0 -0
  118. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/restore.py +0 -0
  119. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/restore_options.py +0 -0
  120. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/restored_client.py +0 -0
  121. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/restore/tss.py +0 -0
  122. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/__init__.py +0 -0
  123. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/accessibilityaudit.py +0 -0
  124. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/afc.py +0 -0
  125. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/amfi.py +0 -0
  126. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/companion.py +0 -0
  127. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/crash_reports.py +0 -0
  128. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/debugserver_applist.py +0 -0
  129. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/device_arbitration.py +0 -0
  130. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/diagnostics.py +0 -0
  131. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dtfetchsymbols.py +0 -0
  132. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/__init__.py +0 -0
  133. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +0 -0
  134. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +0 -0
  135. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/__init__.py +0 -0
  136. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +0 -0
  137. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/application_listing.py +0 -0
  138. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/condition_inducer.py +0 -0
  139. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +0 -0
  140. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/device_info.py +0 -0
  141. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/energy_monitor.py +0 -0
  142. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/graphics.py +0 -0
  143. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/location_simulation.py +0 -0
  144. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/location_simulation_base.py +0 -0
  145. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/network_monitor.py +0 -0
  146. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/notifications.py +0 -0
  147. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/process_control.py +0 -0
  148. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/screenshot.py +0 -0
  149. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/instruments/sysmontap.py +0 -0
  150. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/dvt/testmanaged/xcuitest.py +0 -0
  151. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/file_relay.py +0 -0
  152. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/heartbeat.py +0 -0
  153. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/house_arrest.py +0 -0
  154. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/idam.py +0 -0
  155. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/installation_proxy.py +0 -0
  156. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/lockdown_service.py +0 -0
  157. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/misagent.py +0 -0
  158. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/mobile_activation.py +0 -0
  159. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/mobile_config.py +0 -0
  160. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/mobile_image_mounter.py +0 -0
  161. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/mobilebackup2.py +0 -0
  162. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/notification_proxy.py +0 -0
  163. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/os_trace.py +0 -0
  164. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/pcapd.py +0 -0
  165. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/power_assertion.py +0 -0
  166. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/preboard.py +0 -0
  167. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/remote_fetch_symbols.py +0 -0
  168. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/remote_server.py +0 -0
  169. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/restore_service.py +0 -0
  170. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/screenshot.py +0 -0
  171. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/simulate_location.py +0 -0
  172. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/springboard.py +0 -0
  173. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/syslog.py +0 -0
  174. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/__init__.py +0 -0
  175. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/alert.py +0 -0
  176. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/automation_session.py +0 -0
  177. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/cdp_screencast.py +0 -0
  178. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/cdp_server.py +0 -0
  179. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/cdp_target.py +0 -0
  180. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/driver.py +0 -0
  181. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/element.py +0 -0
  182. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/inspector_session.py +0 -0
  183. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/selenium_api.py +0 -0
  184. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/session_protocol.py +0 -0
  185. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/web_protocol/switch_to.py +0 -0
  186. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/services/webinspector.py +0 -0
  187. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/tcp_forwarder.py +0 -0
  188. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/tunneld/__init__.py +0 -0
  189. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/tunneld/api.py +0 -0
  190. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/tunneld/server.py +0 -0
  191. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/usbmux.py +0 -0
  192. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3/utils.py +0 -0
  193. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/dependency_links.txt +0 -0
  194. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/entry_points.txt +0 -0
  195. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/requires.txt +0 -0
  196. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pymobiledevice3.egg-info/top_level.txt +0 -0
  197. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pyproject.toml +0 -0
  198. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/pytest.ini +0 -0
  199. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/requirements.txt +0 -0
  200. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/setup.cfg +0 -0
  201. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/__init__.py +0 -0
  202. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/cli/__init__.py +0 -0
  203. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/cli/test_cli.py +0 -0
  204. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/conftest.py +0 -0
  205. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/__init__.py +0 -0
  206. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/__init__.py +0 -0
  207. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/test_core_profile_session.py +0 -0
  208. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/test_dvt_secure_socket_proxy.py +0 -0
  209. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/test_fetch_symbols.py +0 -0
  210. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/test_location.py +0 -0
  211. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/instruments/test_screenshot.py +0 -0
  212. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_accessibility.py +0 -0
  213. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_afc.py +0 -0
  214. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_apps.py +0 -0
  215. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_backup2.py +0 -0
  216. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_bonjour.py +0 -0
  217. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_crash_reports.py +0 -0
  218. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_list_devices.py +0 -0
  219. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_lockdown.py +0 -0
  220. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_pcapd.py +0 -0
  221. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_springboard_services_relay.py +0 -0
  222. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_start_tunnel.py +0 -0
  223. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_syslog_relay.py +0 -0
  224. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_tcp_forwarder.py +0 -0
  225. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_web_protocol/__init__.py +0 -0
  226. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_web_protocol/common.py +0 -0
  227. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_web_protocol/conftest.py +0 -0
  228. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_web_protocol/test_driver.py +0 -0
  229. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_web_protocol/test_element.py +0 -0
  230. {pymobiledevice3-6.1.0 → pymobiledevice3-6.1.2}/tests/services/test_webinspector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymobiledevice3
3
- Version: 6.1.0
3
+ Version: 6.1.2
4
4
  Summary: Pure python3 implementation for working with iDevices (iPhone, etc...)
5
5
  Author-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
6
6
  Maintainer-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '6.1.0'
32
- __version_tuple__ = version_tuple = (6, 1, 0)
31
+ __version__ = version = '6.1.2'
32
+ __version_tuple__ = version_tuple = (6, 1, 2)
33
33
 
34
- __commit_id__ = commit_id = 'g2021dd3c3'
34
+ __commit_id__ = commit_id = 'gc81d511cb'
@@ -50,7 +50,7 @@ def format_line(color, pid, syslog_entry, include_label: bool, image_offset: boo
50
50
  image_name = posixpath.basename(syslog_entry.image_name)
51
51
  message = syslog_entry.message
52
52
  process_name = posixpath.basename(filename)
53
- image_offset_str = f"+0x{syslog_entry.image_offset:x}" if image_offset else ""
53
+ image_offset_str = f"+0x{syslog_entry.image_offset:x}" if image_offset and image_name else ""
54
54
  label = ""
55
55
 
56
56
  if (pid != -1) and (syslog_pid != pid):
@@ -8,7 +8,7 @@ import struct
8
8
  import time
9
9
  import xml
10
10
  from enum import Enum
11
- from typing import Any, Optional
11
+ from typing import Any, Optional, Union
12
12
 
13
13
  import IPython
14
14
  from pygments import formatters, highlight, lexers
@@ -282,29 +282,29 @@ class ServiceConnection:
282
282
  msg = b"".join([hdr, data])
283
283
  return self.sendall(msg)
284
284
 
285
- def recv_plist(self, endianity: str = ">") -> dict:
285
+ def recv_plist(self, endianity: str = ">") -> Union[dict, list]:
286
286
  """
287
- Receive a plist from the socket and parse it into a dictionary.
287
+ Receive a plist from the socket and parse it into a native type.
288
288
 
289
289
  :param endianity: The byte order ('>' for big-endian, '<' for little-endian).
290
- :return: The received plist as a dictionary.
290
+ :return: The received plist as a native type.
291
291
  """
292
292
  return parse_plist(self.recv_prefixed(endianity=endianity))
293
293
 
294
294
  async def aio_recv_plist(self, endianity: str = ">") -> dict:
295
295
  """
296
- Asynchronously receive a plist from the socket and parse it into a dictionary.
296
+ Asynchronously receive a plist from the socket and parse it into a native type.
297
297
 
298
298
  :param endianity: The byte order ('>' for big-endian, '<' for little-endian).
299
- :return: The received plist as a dictionary.
299
+ :return: The received plist as a native type.
300
300
  """
301
301
  return parse_plist(await self.aio_recv_prefixed(endianity))
302
302
 
303
- def send_plist(self, d: dict, endianity: str = ">", fmt: Enum = plistlib.FMT_XML) -> None:
303
+ def send_plist(self, d: Union[dict, list], endianity: str = ">", fmt: Enum = plistlib.FMT_XML) -> None:
304
304
  """
305
- Send a dictionary as a plist to the socket.
305
+ Send a native type as a plist to the socket.
306
306
 
307
- :param d: The dictionary to send.
307
+ :param d: The native type to send.
308
308
  :param endianity: The byte order ('>' for big-endian, '<' for little-endian).
309
309
  :param fmt: The plist format (e.g., plistlib.FMT_XML).
310
310
  """
@@ -319,7 +319,7 @@ class ServiceConnection:
319
319
  self.writer.write(payload)
320
320
  await self.writer.drain()
321
321
 
322
- async def aio_send_plist(self, d: dict, endianity: str = ">", fmt: Enum = plistlib.FMT_XML) -> None:
322
+ async def aio_send_plist(self, d: Union[dict, list], endianity: str = ">", fmt: Enum = plistlib.FMT_XML) -> None:
323
323
  """
324
324
  Asynchronously send a dictionary as a plist to the socket.
325
325
 
@@ -3,9 +3,12 @@ import datetime
3
3
  import shutil
4
4
  import struct
5
5
  import warnings
6
+ from collections.abc import Iterable, Mapping, Sequence
6
7
  from pathlib import Path
8
+ from typing import Any, Callable, Optional, cast
7
9
 
8
10
  from pymobiledevice3.exceptions import NotEnoughDiskSpaceError, PyMobileDevice3Exception
11
+ from pymobiledevice3.service_connection import ServiceConnection
9
12
 
10
13
  SIZE_FORMAT = ">I"
11
14
  CODE_FORMAT = ">B"
@@ -26,12 +29,16 @@ ERRNO_TO_DEVICE_ERROR = {
26
29
  28: -15,
27
30
  }
28
31
 
32
+ DLMessage = Sequence[Any]
33
+ ProgressCallback = Callable[[Any], None]
34
+ DLHandler = Callable[[DLMessage], None]
35
+
29
36
 
30
37
  class DeviceLink:
31
- def __init__(self, service, root_path: Path):
32
- self.service = service
33
- self.root_path = root_path
34
- self._dl_handlers = {
38
+ def __init__(self, service: ServiceConnection, root_path: Path) -> None:
39
+ self.service: ServiceConnection = service
40
+ self.root_path: Path = root_path
41
+ self._dl_handlers: dict[str, DLHandler] = {
35
42
  "DLMessageCreateDirectory": self.create_directory,
36
43
  "DLMessageUploadFiles": self.upload_files,
37
44
  "DLMessageGetFreeDiskSpace": self.get_free_disk_space,
@@ -43,7 +50,12 @@ class DeviceLink:
43
50
  "DLMessagePurgeDiskSpace": self.purge_disk_space,
44
51
  }
45
52
 
46
- def dl_loop(self, progress_callback=lambda x: None):
53
+ def dl_loop(self, progress_callback: Optional[ProgressCallback] = None) -> Any:
54
+ def _noop(_: Any) -> None:
55
+ return None
56
+
57
+ callback: ProgressCallback = progress_callback if progress_callback is not None else _noop
58
+
47
59
  while True:
48
60
  message = self.receive_message()
49
61
  command = message[0]
@@ -55,9 +67,9 @@ class DeviceLink:
55
67
  "DLMessageRemoveFiles",
56
68
  "DLMessageRemoveItems",
57
69
  ):
58
- progress_callback(message[3])
70
+ callback(message[3])
59
71
  elif command == "DLMessageUploadFiles":
60
- progress_callback(message[2])
72
+ callback(message[2])
61
73
 
62
74
  if command == "DLMessageProcessMessage":
63
75
  if not message[1]["ErrorCode"]:
@@ -66,7 +78,7 @@ class DeviceLink:
66
78
  raise PyMobileDevice3Exception(f"Device link error: {message[1]}")
67
79
  self._dl_handlers[command](message)
68
80
 
69
- def version_exchange(self):
81
+ def version_exchange(self) -> None:
70
82
  dl_message_version_exchange = self.receive_message()
71
83
  version_major = dl_message_version_exchange[1]
72
84
  self.service.send_plist(["DLMessageVersionExchange", "DLVersionsOk", version_major])
@@ -74,12 +86,13 @@ class DeviceLink:
74
86
  if dl_message_device_ready[0] != "DLMessageDeviceReady":
75
87
  raise PyMobileDevice3Exception("Device link didn't return ready state")
76
88
 
77
- def send_process_message(self, message):
89
+ def send_process_message(self, message: Mapping[str, Any]) -> None:
78
90
  self.service.send_plist(["DLMessageProcessMessage", message])
79
91
 
80
- def download_files(self, message):
81
- status = {}
82
- for file in message[1]:
92
+ def download_files(self, message: DLMessage) -> None:
93
+ status: dict[str, dict[str, Any]] = {}
94
+ files = cast(Iterable[str], message[1])
95
+ for file in files:
83
96
  self.service.sendall(struct.pack(SIZE_FORMAT, len(file)))
84
97
  self.service.sendall(file.encode())
85
98
 
@@ -114,9 +127,9 @@ class DeviceLink:
114
127
  else:
115
128
  self.status_response(0)
116
129
 
117
- def contents_of_directory(self, message):
130
+ def contents_of_directory(self, message: DLMessage) -> None:
118
131
  data = {}
119
- path = self.root_path / message[1]
132
+ path = self.root_path / cast(str, message[1])
120
133
  for file in path.iterdir():
121
134
  ftype = "DLFileTypeUnknown"
122
135
  if file.is_dir():
@@ -132,7 +145,7 @@ class DeviceLink:
132
145
  }
133
146
  self.status_response(0, status_dict=data)
134
147
 
135
- def upload_files(self, message):
148
+ def upload_files(self, _message: DLMessage) -> None:
136
149
  while True:
137
150
  device_name = self._prefixed_recv()
138
151
  if not device_name:
@@ -158,20 +171,21 @@ class DeviceLink:
158
171
  assert code == CODE_SUCCESS
159
172
  self.status_response(0)
160
173
 
161
- def get_free_disk_space(self, message):
174
+ def get_free_disk_space(self, _message: DLMessage) -> None:
162
175
  freespace = shutil.disk_usage(self.root_path).free
163
176
  self.status_response(0, status_dict=freespace)
164
177
 
165
- def move_items(self, message):
166
- for src, dst in message[1].items():
178
+ def move_items(self, message: DLMessage) -> None:
179
+ items = cast(Mapping[str, str], message[1])
180
+ for src, dst in items.items():
167
181
  dest = self.root_path / dst
168
182
  dest.parent.mkdir(parents=True, exist_ok=True)
169
183
  shutil.move(self.root_path / src, dest)
170
184
  self.status_response(0)
171
185
 
172
- def copy_item(self, message):
173
- src = self.root_path / message[1]
174
- dest = self.root_path / message[2]
186
+ def copy_item(self, message: DLMessage) -> None:
187
+ src = self.root_path / cast(str, message[1])
188
+ dest = self.root_path / cast(str, message[2])
175
189
  dest.parent.mkdir(parents=True, exist_ok=True)
176
190
  if src.is_dir():
177
191
  shutil.copytree(src, dest)
@@ -179,11 +193,11 @@ class DeviceLink:
179
193
  shutil.copy(src, dest)
180
194
  self.status_response(0)
181
195
 
182
- def purge_disk_space(self, message) -> None:
196
+ def purge_disk_space(self, _message: DLMessage) -> None:
183
197
  raise NotEnoughDiskSpaceError()
184
198
 
185
- def remove_items(self, message):
186
- for path in message[1]:
199
+ def remove_items(self, message: DLMessage) -> None:
200
+ for path in cast(Iterable[str], message[1]):
187
201
  rm_path = self.root_path / path
188
202
  if rm_path.is_dir():
189
203
  shutil.rmtree(rm_path)
@@ -191,12 +205,12 @@ class DeviceLink:
191
205
  rm_path.unlink(missing_ok=True)
192
206
  self.status_response(0)
193
207
 
194
- def create_directory(self, message):
195
- path = message[1]
208
+ def create_directory(self, message: DLMessage) -> None:
209
+ path = cast(str, message[1])
196
210
  (self.root_path / path).mkdir(parents=True, exist_ok=True)
197
211
  self.status_response(0)
198
212
 
199
- def status_response(self, status_code, status_str="", status_dict=None):
213
+ def status_response(self, status_code: int, status_str: str = "", status_dict: Any = None) -> None:
200
214
  self.service.send_plist([
201
215
  "DLMessageStatusResponse",
202
216
  ctypes.c_uint64(status_code).value,
@@ -204,12 +218,12 @@ class DeviceLink:
204
218
  status_dict if status_dict is not None else {},
205
219
  ])
206
220
 
207
- def receive_message(self):
208
- return self.service.recv_plist()
221
+ def receive_message(self) -> DLMessage:
222
+ return cast(DLMessage, self.service.recv_plist())
209
223
 
210
- def disconnect(self):
224
+ def disconnect(self) -> None:
211
225
  self.service.send_plist(["DLMessageDisconnect", "___EmptyParameterString___"])
212
226
 
213
- def _prefixed_recv(self):
227
+ def _prefixed_recv(self) -> str:
214
228
  (size,) = struct.unpack(SIZE_FORMAT, self.service.recvall(struct.calcsize(SIZE_FORMAT)))
215
229
  return self.service.recvall(size).decode()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymobiledevice3
3
- Version: 6.1.0
3
+ Version: 6.1.2
4
4
  Summary: Pure python3 implementation for working with iDevices (iPhone, etc...)
5
5
  Author-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
6
6
  Maintainer-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
@@ -206,6 +206,7 @@ tests/services/test_apps.py
206
206
  tests/services/test_backup2.py
207
207
  tests/services/test_bonjour.py
208
208
  tests/services/test_crash_reports.py
209
+ tests/services/test_house_arrest.py
209
210
  tests/services/test_list_devices.py
210
211
  tests/services/test_lockdown.py
211
212
  tests/services/test_pcapd.py
@@ -0,0 +1,26 @@
1
+ import pytest
2
+
3
+ from pymobiledevice3.exceptions import AppNotInstalledError
4
+ from pymobiledevice3.lockdown import LockdownClient
5
+ from pymobiledevice3.services.house_arrest import HouseArrestService
6
+ from pymobiledevice3.services.installation_proxy import InstallationProxyService
7
+
8
+
9
+ @pytest.fixture(scope="function")
10
+ def user_bundle_id(lockdown: LockdownClient) -> str:
11
+ with InstallationProxyService(lockdown=lockdown) as installation_proxy:
12
+ user_apps = installation_proxy.get_apps(application_type="User")
13
+ if not user_apps:
14
+ pytest.skip("No user apps installed to exercise house arrest")
15
+ return next(iter(user_apps))
16
+
17
+
18
+ def test_missing_bundle_id(lockdown: LockdownClient):
19
+ with pytest.raises(AppNotInstalledError):
20
+ HouseArrestService(lockdown=lockdown, bundle_id="com.pymobiledevice3.missing.app")
21
+
22
+
23
+ def test_vend_container_lists_app_root(lockdown: LockdownClient, user_bundle_id: str) -> None:
24
+ with HouseArrestService(lockdown=lockdown, bundle_id=user_bundle_id, documents_only=False) as service:
25
+ entries = set(service.listdir("/"))
26
+ assert "Documents" in entries
File without changes