pymobiledevice3 5.0.1__py3-none-any.whl → 5.0.3__py3-none-any.whl

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.

Potentially problematic release.


This version of pymobiledevice3 might be problematic. Click here for more details.

Files changed (143) hide show
  1. misc/plist_sniffer.py +15 -15
  2. misc/remotexpc_sniffer.py +29 -28
  3. pymobiledevice3/__main__.py +128 -102
  4. pymobiledevice3/_version.py +2 -2
  5. pymobiledevice3/bonjour.py +36 -59
  6. pymobiledevice3/ca.py +32 -24
  7. pymobiledevice3/cli/activation.py +7 -7
  8. pymobiledevice3/cli/afc.py +19 -19
  9. pymobiledevice3/cli/amfi.py +4 -4
  10. pymobiledevice3/cli/apps.py +51 -39
  11. pymobiledevice3/cli/backup.py +58 -32
  12. pymobiledevice3/cli/bonjour.py +25 -18
  13. pymobiledevice3/cli/cli_common.py +112 -81
  14. pymobiledevice3/cli/companion_proxy.py +4 -4
  15. pymobiledevice3/cli/completions.py +10 -10
  16. pymobiledevice3/cli/crash.py +37 -31
  17. pymobiledevice3/cli/developer.py +602 -520
  18. pymobiledevice3/cli/diagnostics.py +38 -33
  19. pymobiledevice3/cli/lockdown.py +79 -74
  20. pymobiledevice3/cli/mounter.py +85 -68
  21. pymobiledevice3/cli/notification.py +10 -10
  22. pymobiledevice3/cli/pcap.py +19 -14
  23. pymobiledevice3/cli/power_assertion.py +12 -10
  24. pymobiledevice3/cli/processes.py +10 -10
  25. pymobiledevice3/cli/profile.py +88 -77
  26. pymobiledevice3/cli/provision.py +17 -17
  27. pymobiledevice3/cli/remote.py +186 -110
  28. pymobiledevice3/cli/restore.py +43 -40
  29. pymobiledevice3/cli/springboard.py +30 -28
  30. pymobiledevice3/cli/syslog.py +85 -58
  31. pymobiledevice3/cli/usbmux.py +21 -20
  32. pymobiledevice3/cli/version.py +3 -2
  33. pymobiledevice3/cli/webinspector.py +157 -79
  34. pymobiledevice3/common.py +1 -1
  35. pymobiledevice3/exceptions.py +154 -60
  36. pymobiledevice3/irecv.py +49 -53
  37. pymobiledevice3/irecv_devices.py +1489 -492
  38. pymobiledevice3/lockdown.py +396 -242
  39. pymobiledevice3/lockdown_service_provider.py +5 -7
  40. pymobiledevice3/osu/os_utils.py +18 -9
  41. pymobiledevice3/osu/posix_util.py +28 -15
  42. pymobiledevice3/osu/win_util.py +14 -8
  43. pymobiledevice3/pair_records.py +19 -19
  44. pymobiledevice3/remote/common.py +4 -4
  45. pymobiledevice3/remote/core_device/app_service.py +94 -67
  46. pymobiledevice3/remote/core_device/core_device_service.py +17 -14
  47. pymobiledevice3/remote/core_device/device_info.py +5 -5
  48. pymobiledevice3/remote/core_device/diagnostics_service.py +10 -8
  49. pymobiledevice3/remote/core_device/file_service.py +47 -33
  50. pymobiledevice3/remote/remote_service_discovery.py +53 -35
  51. pymobiledevice3/remote/remotexpc.py +64 -42
  52. pymobiledevice3/remote/tunnel_service.py +371 -293
  53. pymobiledevice3/remote/utils.py +12 -11
  54. pymobiledevice3/remote/xpc_message.py +145 -125
  55. pymobiledevice3/resources/dsc_uuid_map.py +19 -19
  56. pymobiledevice3/resources/firmware_notifications.py +16 -16
  57. pymobiledevice3/restore/asr.py +27 -27
  58. pymobiledevice3/restore/base_restore.py +90 -47
  59. pymobiledevice3/restore/consts.py +87 -66
  60. pymobiledevice3/restore/device.py +11 -11
  61. pymobiledevice3/restore/fdr.py +46 -46
  62. pymobiledevice3/restore/ftab.py +19 -19
  63. pymobiledevice3/restore/img4.py +130 -133
  64. pymobiledevice3/restore/mbn.py +35 -54
  65. pymobiledevice3/restore/recovery.py +125 -135
  66. pymobiledevice3/restore/restore.py +524 -523
  67. pymobiledevice3/restore/restore_options.py +122 -115
  68. pymobiledevice3/restore/restored_client.py +25 -22
  69. pymobiledevice3/restore/tss.py +378 -270
  70. pymobiledevice3/service_connection.py +50 -46
  71. pymobiledevice3/services/accessibilityaudit.py +137 -127
  72. pymobiledevice3/services/afc.py +350 -291
  73. pymobiledevice3/services/amfi.py +21 -18
  74. pymobiledevice3/services/companion.py +23 -19
  75. pymobiledevice3/services/crash_reports.py +60 -46
  76. pymobiledevice3/services/debugserver_applist.py +3 -3
  77. pymobiledevice3/services/device_arbitration.py +8 -8
  78. pymobiledevice3/services/device_link.py +56 -48
  79. pymobiledevice3/services/diagnostics.py +971 -968
  80. pymobiledevice3/services/dtfetchsymbols.py +8 -8
  81. pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +4 -4
  82. pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +4 -4
  83. pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +85 -74
  84. pymobiledevice3/services/dvt/instruments/application_listing.py +2 -3
  85. pymobiledevice3/services/dvt/instruments/condition_inducer.py +7 -6
  86. pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +442 -421
  87. pymobiledevice3/services/dvt/instruments/device_info.py +11 -11
  88. pymobiledevice3/services/dvt/instruments/energy_monitor.py +1 -1
  89. pymobiledevice3/services/dvt/instruments/graphics.py +1 -1
  90. pymobiledevice3/services/dvt/instruments/location_simulation.py +1 -1
  91. pymobiledevice3/services/dvt/instruments/location_simulation_base.py +10 -10
  92. pymobiledevice3/services/dvt/instruments/network_monitor.py +17 -17
  93. pymobiledevice3/services/dvt/instruments/notifications.py +1 -1
  94. pymobiledevice3/services/dvt/instruments/process_control.py +25 -10
  95. pymobiledevice3/services/dvt/instruments/screenshot.py +2 -2
  96. pymobiledevice3/services/dvt/instruments/sysmontap.py +15 -15
  97. pymobiledevice3/services/dvt/testmanaged/xcuitest.py +42 -52
  98. pymobiledevice3/services/file_relay.py +10 -10
  99. pymobiledevice3/services/heartbeat.py +8 -7
  100. pymobiledevice3/services/house_arrest.py +12 -15
  101. pymobiledevice3/services/installation_proxy.py +119 -100
  102. pymobiledevice3/services/lockdown_service.py +12 -5
  103. pymobiledevice3/services/misagent.py +22 -19
  104. pymobiledevice3/services/mobile_activation.py +84 -72
  105. pymobiledevice3/services/mobile_config.py +330 -301
  106. pymobiledevice3/services/mobile_image_mounter.py +137 -116
  107. pymobiledevice3/services/mobilebackup2.py +188 -150
  108. pymobiledevice3/services/notification_proxy.py +11 -11
  109. pymobiledevice3/services/os_trace.py +69 -51
  110. pymobiledevice3/services/pcapd.py +306 -306
  111. pymobiledevice3/services/power_assertion.py +10 -9
  112. pymobiledevice3/services/preboard.py +4 -4
  113. pymobiledevice3/services/remote_fetch_symbols.py +16 -14
  114. pymobiledevice3/services/remote_server.py +176 -146
  115. pymobiledevice3/services/restore_service.py +16 -16
  116. pymobiledevice3/services/screenshot.py +13 -10
  117. pymobiledevice3/services/simulate_location.py +7 -7
  118. pymobiledevice3/services/springboard.py +15 -15
  119. pymobiledevice3/services/syslog.py +5 -5
  120. pymobiledevice3/services/web_protocol/alert.py +3 -3
  121. pymobiledevice3/services/web_protocol/automation_session.py +183 -179
  122. pymobiledevice3/services/web_protocol/cdp_screencast.py +44 -36
  123. pymobiledevice3/services/web_protocol/cdp_server.py +19 -19
  124. pymobiledevice3/services/web_protocol/cdp_target.py +411 -373
  125. pymobiledevice3/services/web_protocol/driver.py +47 -45
  126. pymobiledevice3/services/web_protocol/element.py +74 -63
  127. pymobiledevice3/services/web_protocol/inspector_session.py +106 -102
  128. pymobiledevice3/services/web_protocol/selenium_api.py +3 -3
  129. pymobiledevice3/services/web_protocol/session_protocol.py +15 -10
  130. pymobiledevice3/services/web_protocol/switch_to.py +11 -12
  131. pymobiledevice3/services/webinspector.py +129 -117
  132. pymobiledevice3/tcp_forwarder.py +35 -22
  133. pymobiledevice3/tunneld/api.py +20 -15
  134. pymobiledevice3/tunneld/server.py +212 -133
  135. pymobiledevice3/usbmux.py +183 -138
  136. pymobiledevice3/utils.py +14 -11
  137. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.3.dist-info}/METADATA +1 -1
  138. pymobiledevice3-5.0.3.dist-info/RECORD +173 -0
  139. pymobiledevice3-5.0.1.dist-info/RECORD +0 -173
  140. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.3.dist-info}/WHEEL +0 -0
  141. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.3.dist-info}/entry_points.txt +0 -0
  142. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.3.dist-info}/licenses/LICENSE +0 -0
  143. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.3.dist-info}/top_level.txt +0 -0
@@ -1,21 +1,74 @@
1
1
  __all__ = [
2
- 'PyMobileDevice3Exception', 'DeviceVersionNotSupportedError', 'IncorrectModeError',
3
- 'NotTrustedError', 'PairingError', 'NotPairedError', 'CannotStopSessionError',
4
- 'PasswordRequiredError', 'StartServiceError', 'FatalPairingError', 'NoDeviceConnectedError', 'DeviceNotFoundError',
5
- 'TunneldConnectionError', 'ConnectionFailedToUsbmuxdError', 'MuxException', 'InvalidConnectionError',
6
- 'MuxVersionError', 'ArgumentError', 'AfcException', 'AfcFileNotFoundError', 'DvtException', 'DvtDirListError',
7
- 'NotMountedError', 'AlreadyMountedError', 'UnsupportedCommandError', 'ExtractingStackshotError',
8
- 'ConnectionTerminatedError', 'WirError', 'WebInspectorNotEnabledError', 'RemoteAutomationNotEnabledError',
9
- 'ArbitrationError', 'InternalError', 'DeveloperModeIsNotEnabledError', 'DeviceAlreadyInUseError', 'LockdownError',
10
- 'PairingDialogResponsePendingError', 'UserDeniedPairingError', 'InvalidHostIDError', 'SetProhibitedError',
11
- 'MissingValueError', 'PasscodeRequiredError', 'AmfiError', 'DeviceHasPasscodeSetError', 'NotificationTimeoutError',
12
- 'DeveloperModeError', 'ProfileError', 'IRecvError', 'IRecvNoDeviceConnectedError', 'UnrecognizedSelectorError',
13
- 'MessageNotSupportedError', 'InvalidServiceError', 'InspectorEvaluateError',
14
- 'LaunchingApplicationError', 'BadCommandError', 'BadDevError', 'ConnectionFailedError', 'CoreDeviceError',
15
- 'AccessDeniedError', 'RSDRequiredError', 'SysdiagnoseTimeoutError', 'GetProhibitedError',
16
- 'FeatureNotSupportedError', 'OSNotSupportedError', 'DeprecationError', 'NotEnoughDiskSpaceError',
17
- 'CloudConfigurationAlreadyPresentError', 'QuicProtocolNotSupportedError', 'RemotePairingCompletedError',
18
- 'DisableMemoryLimitError',
2
+ "AccessDeniedError",
3
+ "AfcException",
4
+ "AfcFileNotFoundError",
5
+ "AlreadyMountedError",
6
+ "AmfiError",
7
+ "ArbitrationError",
8
+ "ArgumentError",
9
+ "BadCommandError",
10
+ "BadDevError",
11
+ "CannotStopSessionError",
12
+ "CloudConfigurationAlreadyPresentError",
13
+ "ConnectionFailedError",
14
+ "ConnectionFailedToUsbmuxdError",
15
+ "ConnectionTerminatedError",
16
+ "CoreDeviceError",
17
+ "DeprecationError",
18
+ "DeveloperModeError",
19
+ "DeveloperModeIsNotEnabledError",
20
+ "DeviceAlreadyInUseError",
21
+ "DeviceHasPasscodeSetError",
22
+ "DeviceNotFoundError",
23
+ "DeviceVersionNotSupportedError",
24
+ "DisableMemoryLimitError",
25
+ "DvtDirListError",
26
+ "DvtException",
27
+ "ExtractingStackshotError",
28
+ "FatalPairingError",
29
+ "FeatureNotSupportedError",
30
+ "GetProhibitedError",
31
+ "IRecvError",
32
+ "IRecvNoDeviceConnectedError",
33
+ "IncorrectModeError",
34
+ "InspectorEvaluateError",
35
+ "InternalError",
36
+ "InvalidConnectionError",
37
+ "InvalidHostIDError",
38
+ "InvalidServiceError",
39
+ "LaunchingApplicationError",
40
+ "LockdownError",
41
+ "MessageNotSupportedError",
42
+ "MissingValueError",
43
+ "MuxException",
44
+ "MuxVersionError",
45
+ "NoDeviceConnectedError",
46
+ "NotEnoughDiskSpaceError",
47
+ "NotMountedError",
48
+ "NotPairedError",
49
+ "NotTrustedError",
50
+ "NotificationTimeoutError",
51
+ "OSNotSupportedError",
52
+ "PairingDialogResponsePendingError",
53
+ "PairingError",
54
+ "PasscodeRequiredError",
55
+ "PasswordRequiredError",
56
+ "ProfileError",
57
+ "PyMobileDevice3Exception",
58
+ "QuicProtocolNotSupportedError",
59
+ "RSDRequiredError",
60
+ "RemoteAutomationNotEnabledError",
61
+ "RemotePairingCompletedError",
62
+ "SetProhibitedError",
63
+ "StartServiceError",
64
+ "SysdiagnoseTimeoutError",
65
+ "TSSError",
66
+ "TunneldConnectionError",
67
+ "UnrecognizedSelectorError",
68
+ "UnsupportedCommandError",
69
+ "UserDeniedPairingError",
70
+ "WebInspectorNotEnabledError",
71
+ "WirError",
19
72
  ]
20
73
 
21
74
  from typing import Optional
@@ -120,113 +173,131 @@ class AfcFileNotFoundError(AfcException):
120
173
 
121
174
 
122
175
  class DvtException(PyMobileDevice3Exception):
123
- """ Domain exception for DVT operations. """
176
+ """Domain exception for DVT operations."""
177
+
124
178
  pass
125
179
 
126
180
 
127
181
  class UnrecognizedSelectorError(DvtException):
128
- """ Attempted to call an unrecognized selector from DVT. """
182
+ """Attempted to call an unrecognized selector from DVT."""
183
+
129
184
  pass
130
185
 
131
186
 
132
187
  class DvtDirListError(DvtException):
133
- """ Raise when directory listing fails. """
188
+ """Raise when directory listing fails."""
189
+
134
190
  pass
135
191
 
136
192
 
137
193
  class NotMountedError(PyMobileDevice3Exception):
138
- """ Given image for umount wasn't mounted in the first place """
194
+ """Given image for umount wasn't mounted in the first place"""
195
+
139
196
  pass
140
197
 
141
198
 
142
199
  class AlreadyMountedError(PyMobileDevice3Exception):
143
- """ Given image for mount has already been mounted in the first place """
200
+ """Given image for mount has already been mounted in the first place"""
201
+
144
202
  pass
145
203
 
146
204
 
147
205
  class MissingManifestError(PyMobileDevice3Exception):
148
- """ No manifest could be found """
206
+ """No manifest could be found"""
207
+
149
208
  pass
150
209
 
151
210
 
152
211
  class UnsupportedCommandError(PyMobileDevice3Exception):
153
- """ Given command isn't supported for this iOS version """
212
+ """Given command isn't supported for this iOS version"""
213
+
154
214
  pass
155
215
 
156
216
 
157
217
  class ExtractingStackshotError(PyMobileDevice3Exception):
158
- """ Raise when stackshot is not received in the core profile session. """
218
+ """Raise when stackshot is not received in the core profile session."""
219
+
159
220
  pass
160
221
 
161
222
 
162
223
  class ConnectionTerminatedError(PyMobileDevice3Exception):
163
- """ Raise when a connection is terminated abruptly. """
224
+ """Raise when a connection is terminated abruptly."""
225
+
164
226
  pass
165
227
 
166
228
 
167
229
  class StreamClosedError(ConnectionTerminatedError):
168
- """ Raise when trying to send a message on a closed stream. """
230
+ """Raise when trying to send a message on a closed stream."""
231
+
169
232
  pass
170
233
 
171
234
 
172
235
  class WebInspectorNotEnabledError(PyMobileDevice3Exception):
173
- """ Raise when Web Inspector is not enabled. """
236
+ """Raise when Web Inspector is not enabled."""
237
+
174
238
  pass
175
239
 
176
240
 
177
241
  class RemoteAutomationNotEnabledError(PyMobileDevice3Exception):
178
- """ Raise when Web Inspector remote automation is not enabled. """
242
+ """Raise when Web Inspector remote automation is not enabled."""
243
+
179
244
  pass
180
245
 
181
246
 
182
247
  class WirError(PyMobileDevice3Exception):
183
- """ Raise when Webinspector WIR command fails. """
248
+ """Raise when Webinspector WIR command fails."""
249
+
184
250
  pass
185
251
 
186
252
 
187
253
  class InternalError(PyMobileDevice3Exception):
188
- """ Some internal Apple error """
254
+ """Some internal Apple error"""
255
+
189
256
  pass
190
257
 
191
258
 
192
259
  class ArbitrationError(PyMobileDevice3Exception):
193
- """ Arbitration failed """
260
+ """Arbitration failed"""
261
+
194
262
  pass
195
263
 
196
264
 
197
265
  class DeviceAlreadyInUseError(ArbitrationError):
198
- """ Device is already checked-in by someone """
266
+ """Device is already checked-in by someone"""
199
267
 
200
268
  @property
201
269
  def message(self):
202
- return self.args[0].get('message')
270
+ return self.args[0].get("message")
203
271
 
204
272
  @property
205
273
  def owner(self):
206
- return self.args[0].get('owner')
274
+ return self.args[0].get("owner")
207
275
 
208
276
  @property
209
277
  def result(self):
210
- return self.args[0].get('result')
278
+ return self.args[0].get("result")
211
279
 
212
280
 
213
281
  class DeveloperModeIsNotEnabledError(PyMobileDevice3Exception):
214
- """ Raise when mounting failed because developer mode is not enabled. """
282
+ """Raise when mounting failed because developer mode is not enabled."""
283
+
215
284
  pass
216
285
 
217
286
 
218
287
  class DeveloperDiskImageNotFoundError(PyMobileDevice3Exception):
219
- """ Failed to locate the correct DeveloperDiskImage.dmg """
288
+ """Failed to locate the correct DeveloperDiskImage.dmg"""
289
+
220
290
  pass
221
291
 
222
292
 
223
293
  class DeveloperModeError(PyMobileDevice3Exception):
224
- """ Raise when amfid failed to enable developer mode. """
294
+ """Raise when amfid failed to enable developer mode."""
295
+
225
296
  pass
226
297
 
227
298
 
228
299
  class LockdownError(PyMobileDevice3Exception):
229
- """ lockdown general error """
300
+ """lockdown general error"""
230
301
 
231
302
  def __init__(self, message: str, identifier: Optional[str] = None) -> None:
232
303
  super().__init__(message)
@@ -242,7 +313,8 @@ class SetProhibitedError(LockdownError):
242
313
 
243
314
 
244
315
  class PairingDialogResponsePendingError(PairingError):
245
- """ User hasn't yet confirmed the device is trusted """
316
+ """User hasn't yet confirmed the device is trusted"""
317
+
246
318
  pass
247
319
 
248
320
 
@@ -255,7 +327,8 @@ class InvalidHostIDError(PairingError):
255
327
 
256
328
 
257
329
  class MissingValueError(LockdownError):
258
- """ raised when attempting to query non-existent domain/key """
330
+ """raised when attempting to query non-existent domain/key"""
331
+
259
332
  pass
260
333
 
261
334
 
@@ -264,7 +337,8 @@ class InvalidConnectionError(LockdownError):
264
337
 
265
338
 
266
339
  class PasscodeRequiredError(LockdownError):
267
- """ passcode must be present for this action """
340
+ """passcode must be present for this action"""
341
+
268
342
  pass
269
343
 
270
344
 
@@ -305,8 +379,14 @@ class InvalidServiceError(LockdownError):
305
379
 
306
380
 
307
381
  class InspectorEvaluateError(PyMobileDevice3Exception):
308
- def __init__(self, class_name: str, message: str, line: Optional[int] = None, column: Optional[int] = None,
309
- stack: Optional[list[str]] = None):
382
+ def __init__(
383
+ self,
384
+ class_name: str,
385
+ message: str,
386
+ line: Optional[int] = None,
387
+ column: Optional[int] = None,
388
+ stack: Optional[list[str]] = None,
389
+ ):
310
390
  super().__init__()
311
391
  self.class_name = class_name
312
392
  self.message = message
@@ -315,10 +395,8 @@ class InspectorEvaluateError(PyMobileDevice3Exception):
315
395
  self.stack = stack
316
396
 
317
397
  def __str__(self) -> str:
318
- stack_trace = '\n'.join([f'\t - {frame}' for frame in self.stack])
319
- return (f'{self.class_name}: {self.message}.\n'
320
- f'Line: {self.line} Column: {self.column}\n'
321
- f'Stack: {stack_trace}')
398
+ stack_trace = "\n".join([f"\t - {frame}" for frame in self.stack])
399
+ return f"{self.class_name}: {self.message}.\nLine: {self.line} Column: {self.column}\nStack: {stack_trace}"
322
400
 
323
401
 
324
402
  class LaunchingApplicationError(PyMobileDevice3Exception):
@@ -338,7 +416,8 @@ class CoreDeviceError(PyMobileDevice3Exception):
338
416
 
339
417
 
340
418
  class AccessDeniedError(PyMobileDevice3Exception):
341
- """ Need extra permissions to execute this command """
419
+ """Need extra permissions to execute this command"""
420
+
342
421
  pass
343
422
 
344
423
 
@@ -347,22 +426,25 @@ class NoSuchBuildIdentityError(PyMobileDevice3Exception):
347
426
 
348
427
 
349
428
  class MobileActivationException(PyMobileDevice3Exception):
350
- """ Mobile activation can not be done """
429
+ """Mobile activation can not be done"""
430
+
351
431
  pass
352
432
 
353
433
 
354
434
  class NotEnoughDiskSpaceError(PyMobileDevice3Exception):
355
- """ Computer does not have enough disk space for the intended operation """
435
+ """Computer does not have enough disk space for the intended operation"""
436
+
356
437
  pass
357
438
 
358
439
 
359
440
  class DeprecationError(PyMobileDevice3Exception):
360
- """ The requested action/service/method is deprecated """
441
+ """The requested action/service/method is deprecated"""
442
+
361
443
  pass
362
444
 
363
445
 
364
446
  class RSDRequiredError(PyMobileDevice3Exception):
365
- """ The requested action requires an RSD object """
447
+ """The requested action requires an RSD object"""
366
448
 
367
449
  def __init__(self, identifier: str) -> None:
368
450
  self.identifier = identifier
@@ -370,7 +452,8 @@ class RSDRequiredError(PyMobileDevice3Exception):
370
452
 
371
453
 
372
454
  class SysdiagnoseTimeoutError(PyMobileDevice3Exception, TimeoutError):
373
- """ Timeout collecting new sysdiagnose archive """
455
+ """Timeout collecting new sysdiagnose archive"""
456
+
374
457
  pass
375
458
 
376
459
 
@@ -381,12 +464,13 @@ class SupportError(PyMobileDevice3Exception):
381
464
 
382
465
 
383
466
  class OSNotSupportedError(SupportError):
384
- """ Operating system is not supported. """
467
+ """Operating system is not supported."""
468
+
385
469
  pass
386
470
 
387
471
 
388
472
  class FeatureNotSupportedError(SupportError):
389
- """ Feature has not been implemented for OS. """
473
+ """Feature has not been implemented for OS."""
390
474
 
391
475
  def __init__(self, os_name, feature):
392
476
  super().__init__(os_name)
@@ -394,7 +478,8 @@ class FeatureNotSupportedError(SupportError):
394
478
 
395
479
 
396
480
  class QuicProtocolNotSupportedError(PyMobileDevice3Exception):
397
- """ QUIC tunnel support was removed on iOS 18.2+ """
481
+ """QUIC tunnel support was removed on iOS 18.2+"""
482
+
398
483
  pass
399
484
 
400
485
 
@@ -405,14 +490,23 @@ class RemotePairingCompletedError(PyMobileDevice3Exception):
405
490
  remotepairingdeviced closes connection after pairing, so client must re-establish it after pairing is
406
491
  completed.
407
492
  """
493
+
408
494
  pass
409
495
 
410
496
 
411
497
  class DisableMemoryLimitError(PyMobileDevice3Exception):
412
- """ Disabling memory limit fails. """
498
+ """Disabling memory limit fails."""
499
+
413
500
  pass
414
501
 
415
502
 
416
503
  class ProtocolError(PyMobileDevice3Exception):
417
- """ An unexpected protocol message was received """
504
+ """An unexpected protocol message was received"""
505
+
506
+ pass
507
+
508
+
509
+ class TSSError(PyMobileDevice3Exception):
510
+ """An unexpected message was received from apple ticket server"""
511
+
418
512
  pass