pymobiledevice3 4.21.8__py3-none-any.whl → 4.22.0__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.

@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '4.21.8'
21
- __version_tuple__ = version_tuple = (4, 21, 8)
20
+ __version__ = version = '4.22.0'
21
+ __version_tuple__ = version_tuple = (4, 22, 0)
@@ -4,7 +4,7 @@ import time
4
4
  import click
5
5
 
6
6
  from pymobiledevice3.cli.cli_common import Command, print_json
7
- from pymobiledevice3.lockdown import LockdownClient
7
+ from pymobiledevice3.lockdown import LockdownClient, retry_create_using_usbmux
8
8
  from pymobiledevice3.lockdown_service_provider import LockdownServiceProvider
9
9
  from pymobiledevice3.services.diagnostics import DiagnosticsService
10
10
 
@@ -23,9 +23,15 @@ def diagnostics() -> None:
23
23
 
24
24
 
25
25
  @diagnostics.command('restart', cls=Command)
26
- def diagnostics_restart(service_provider: LockdownClient):
26
+ @click.option('-r', '--reconnect', is_flag=True, default=False,
27
+ help='Wait until the device reconnects before finishing the operation.')
28
+ def diagnostics_restart(service_provider: LockdownClient, reconnect):
27
29
  """ Restart device """
28
30
  DiagnosticsService(lockdown=service_provider).restart()
31
+ if reconnect:
32
+ # Wait for the device to be available again
33
+ with retry_create_using_usbmux(None, serial=service_provider.udid):
34
+ print(f'Device Reconnected ({service_provider.udid}).')
29
35
 
30
36
 
31
37
  @diagnostics.command('shutdown', cls=Command)
@@ -135,8 +135,8 @@ async def mounter_auto_mount_task(service_provider: LockdownServiceProvider, xco
135
135
  @mounter.command('auto-mount', cls=Command)
136
136
  @click.option('-x', '--xcode', type=click.Path(exists=True, dir_okay=True, file_okay=False),
137
137
  help='Xcode application path used to figure out automatically the DeveloperDiskImage path')
138
- @click.option('-v', '--version', help='use a different DeveloperDiskImage version from the one retrieved by lockdown'
139
- 'connection')
138
+ @click.option('--version', help='use a different DeveloperDiskImage version from the one retrieved by lockdown'
139
+ 'connection')
140
140
  def mounter_auto_mount(service_provider: LockdownServiceProvider, xcode: str, version: str) -> None:
141
141
  """ auto-detect correct DeveloperDiskImage and mount it """
142
142
  asyncio.run(mounter_auto_mount_task(service_provider, xcode, version), debug=True)
@@ -105,7 +105,6 @@ def create_webinspector_and_launch_app(lockdown: LockdownClient, timeout: float,
105
105
 
106
106
 
107
107
  @webinspector.command(cls=Command)
108
- @click.option('-v', '--verbose', is_flag=True)
109
108
  @click.option('-t', '--timeout', default=3, show_default=True, type=float)
110
109
  @catch_errors
111
110
  def opened_tabs(service_provider: LockdownClient, verbose, timeout):
@@ -56,7 +56,7 @@ class TSSResponse(dict):
56
56
 
57
57
  class TSSRequest:
58
58
  def __init__(self):
59
- self._request = {
59
+ self._request: dict[str, typing.Any] = {
60
60
  '@HostPlatformInfo': 'mac',
61
61
  '@VersionInfo': TSS_CLIENT_VERSION_STRING,
62
62
  '@UUID': str(uuid4()).upper(),
@@ -361,16 +361,21 @@ class TSSRequest:
361
361
  k = 'Ap,SikaFuse'
362
362
  self._request[k] = v
363
363
 
364
- uid_mode = parameters.get('UID_MODE', False)
364
+ uid_mode = parameters.get('UID_MODE')
365
365
 
366
366
  if 'NeRDEpoch' in parameters:
367
367
  self._request['PermitNeRDPivot'] = b''
368
368
 
369
- self._request['UID_MODE'] = uid_mode
369
+ if uid_mode is not None:
370
+ self._request['UID_MODE'] = uid_mode
370
371
  self._request['@ApImg4Ticket'] = True
371
372
  self._request['@BBTicket'] = True
372
373
 
373
374
  if parameters.get('RequiresUIDMode'):
375
+ # The logic here is missing why this value is expected to be 'false'
376
+ self._request['UID_MODE'] = False
377
+
378
+ # Workaround: We have only seen Ap,SikaFuse together with UID_MODE
374
379
  self._request['Ap,SikaFuse'] = 0
375
380
 
376
381
  def add_se_tags(self, parameters: dict, overrides=None):
@@ -1,4 +1,5 @@
1
1
  import hashlib
2
+ import logging
2
3
  import plistlib
3
4
  from pathlib import Path
4
5
  from typing import Optional
@@ -15,7 +16,9 @@ from pymobiledevice3.lockdown_service_provider import LockdownServiceProvider
15
16
  from pymobiledevice3.restore.tss import TSSRequest
16
17
  from pymobiledevice3.services.lockdown_service import LockdownService
17
18
 
18
- LATEST_DDI_BUILD_ID = '16A242d'
19
+ logger = logging.getLogger(__name__)
20
+
21
+ LATEST_DDI_BUILD_ID = '16E5121h'
19
22
 
20
23
 
21
24
  class MobileImageMounterService(LockdownService):
@@ -355,6 +358,10 @@ async def auto_mount_personalized(lockdown: LockdownServiceProvider) -> None:
355
358
  image.write_bytes(personalized_image.image)
356
359
  build_manifest.write_bytes(personalized_image.build_manifest)
357
360
  trustcache.write_bytes(personalized_image.trustcache)
361
+ downloaded_ddi_build_id = plistlib.loads(personalized_image.build_manifest).get('ProductBuildVersion')
362
+ if downloaded_ddi_build_id != LATEST_DDI_BUILD_ID:
363
+ logger.warning('Downloaded personalized image has unexpected ProductBuildVersion '
364
+ f'{downloaded_ddi_build_id}. Please update pymobiledevice3!')
358
365
 
359
366
  await PersonalizedImageMounter(lockdown=lockdown).mount(image, build_manifest, trustcache)
360
367
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymobiledevice3
3
- Version: 4.21.8
3
+ Version: 4.22.0
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>
@@ -8,7 +8,7 @@ misc/understanding_idevice_protocol_layers.md,sha256=8tEqRXWOUPoxOJLZVh7C7H9JGCh
8
8
  misc/usbmux_sniff.sh,sha256=iWtbucOEQ9_UEFXk9x-2VNt48Jg5zrPsnUbZ_LfZxwA,212
9
9
  pymobiledevice3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  pymobiledevice3/__main__.py,sha256=nwUgfXBMii2MSXLUls2uMTG88uC13s4haPBM4LuGcaU,11530
11
- pymobiledevice3/_version.py,sha256=fN2o3W2zI_Gu2Ba3jnR9bIOjM9Nc67Zbt1_9YRVZe1s,513
11
+ pymobiledevice3/_version.py,sha256=orvHwmO-r_x_VgHSM3aH7L9XDQWnlhDlDhFDhwlMiOk,513
12
12
  pymobiledevice3/bonjour.py,sha256=FXa_x0Zdo6ims7N7F61hnnZEyn1tc2it3mQpHRMY0Kk,5560
13
13
  pymobiledevice3/ca.py,sha256=Ho0NaOtATe5hdruUSlVDRpfR9ltEYXjL3MoKwEvEJjw,2296
14
14
  pymobiledevice3/common.py,sha256=-PG6oaUkNFlB3jb7E0finMrX8wqhkS-cuTAfmLvZUmc,329
@@ -34,9 +34,9 @@ pymobiledevice3/cli/companion_proxy.py,sha256=ey0X3moJ49zVJoNCpRMMHmf9fBZfdqimhz
34
34
  pymobiledevice3/cli/completions.py,sha256=t8oryezQTcWDno_E2Cch7o1f-qURVL9M1Z4o6uLA_kM,1722
35
35
  pymobiledevice3/cli/crash.py,sha256=m1vs0_KUy4cxu8vHYjn7olay8oPQGTFZqMCHspnGpVs,3181
36
36
  pymobiledevice3/cli/developer.py,sha256=9ZAvy7nqX4vPjx-2peqjuhaeEK5iYHTmWgevcvglbXM,55075
37
- pymobiledevice3/cli/diagnostics.py,sha256=g22i0bRpfbrsFR0ql3fqTE65dw7qYfBhidoeCbO3mrg,3238
37
+ pymobiledevice3/cli/diagnostics.py,sha256=VDWr41ryIZcpuQp47nQSzCiSuIILExqGSrwFizXCIkI,3641
38
38
  pymobiledevice3/cli/lockdown.py,sha256=498SgKdIC_YaoEjVtQQvo8bvv8GDeUTY8yWh4isy_qc,6941
39
- pymobiledevice3/cli/mounter.py,sha256=Z4nyh3vn1oFuQKaQfs3nFwqHP85uxEUmWD9TxazbMmk,7736
39
+ pymobiledevice3/cli/mounter.py,sha256=AnNneNF_kW7XnBMe4V5cvlbLYd_mAP4tuB3PXLQpeiA,7724
40
40
  pymobiledevice3/cli/notification.py,sha256=vqn8uPslr7A9HiZ4yrs7YKF2VLS7Nk4G7ab5ELljpVQ,1962
41
41
  pymobiledevice3/cli/pcap.py,sha256=KzFxXWFRYWNOEJE1XAuMF2cG8I4k5wFVcMRhSdY4GQg,2188
42
42
  pymobiledevice3/cli/power_assertion.py,sha256=aTlesowRyrbd9JXebEZe9SomTkDkZaAXIOyTIitRJ0c,880
@@ -49,7 +49,7 @@ pymobiledevice3/cli/springboard.py,sha256=pYMqnD0zN_ETIASPqxBohi54F2HMC9jCILW4ep
49
49
  pymobiledevice3/cli/syslog.py,sha256=JfLhjyVAeRx16VC4BsAu308rABjcIQX8DB7vbVKGiic,7462
50
50
  pymobiledevice3/cli/usbmux.py,sha256=f8T6Xt4ym9wfnxFIAyJ1W76YI0h1hqrRfKj4PxCoNRc,2365
51
51
  pymobiledevice3/cli/version.py,sha256=OtvxHV8JjLFNaiA1Q5Qll3bsw__hrij-9FUmkDmNS40,346
52
- pymobiledevice3/cli/webinspector.py,sha256=aSZQxYGKXZMbfPGUFP37wDNR_2FL8bt88rKywCXwZ5Y,15575
52
+ pymobiledevice3/cli/webinspector.py,sha256=BNXio0ATrpbMiLRLfrm9oq0pdGdbpH1QEZOzxy-PSgE,15528
53
53
  pymobiledevice3/osu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  pymobiledevice3/osu/os_utils.py,sha256=YwMTUT6o67xa-la8ElxdHQ1hBJM_u2gsoKW5RNxCEEU,3272
55
55
  pymobiledevice3/osu/posix_util.py,sha256=YllI2PH2VngvLs273Hi05C2pHfvwx5NNPdtbrlNYxaI,3370
@@ -95,7 +95,7 @@ pymobiledevice3/restore/recovery.py,sha256=YB2wZST3uhQMO1DwewfHb2VdEb-gH8nW58RbT
95
95
  pymobiledevice3/restore/restore.py,sha256=GE86M79jd6nnd5GyY4ZLiEyhMKe0GxLTKe_bDcqtpJg,57479
96
96
  pymobiledevice3/restore/restore_options.py,sha256=qeh_wRa_bi0Ccl0p0JuX9EChEQBqwJt94EBImWcEJ3E,7255
97
97
  pymobiledevice3/restore/restored_client.py,sha256=h_yBZ_e1wfaIzi0f9-R8Ky2x6xFTkvDlpWIV561uxoU,3638
98
- pymobiledevice3/restore/tss.py,sha256=TzvA1_FVZSotHG_vZykKa8v9Ja8Som5zgMH7AY0wFis,29593
98
+ pymobiledevice3/restore/tss.py,sha256=egguhU3aVt8yWba-MFa2aoL999bn61kty8ON0QcTKoE,29853
99
99
  pymobiledevice3/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
100
  pymobiledevice3/services/accessibilityaudit.py,sha256=PtQujwFLL3E1OgOSUjkKHvgmk2e8Ij2XZIp8JicAphs,15547
101
101
  pymobiledevice3/services/afc.py,sha256=9Ddc0emUrwLPOi0DLy1MZ5w7zqotYNxBB2OU0WyIWsk,36244
@@ -115,7 +115,7 @@ pymobiledevice3/services/lockdown_service.py,sha256=WP2l3qIdU7XtWDQMfNEPwSJZfS7D
115
115
  pymobiledevice3/services/misagent.py,sha256=YGLo2LhzyYWyICxKDhy3Ph7SewYk5I1VN3-LjKv_plo,2088
116
116
  pymobiledevice3/services/mobile_activation.py,sha256=NTxdiA39-XpN77OJAErVkGsxUZf_b1AOSd08URKu0MA,6139
117
117
  pymobiledevice3/services/mobile_config.py,sha256=Ev1AmJ6pzeZKnwMaSKIwWAOWVMqH2QgDbjD49Jc_l20,17419
118
- pymobiledevice3/services/mobile_image_mounter.py,sha256=SIibV5IoB570bqWoNwtYKmRTgXIuLUBaMJFlPwENbD4,14638
118
+ pymobiledevice3/services/mobile_image_mounter.py,sha256=_XjVGfhv7g9Ils5Q9AGi6i-lgakmDdN4e79UPdCZ4xA,15046
119
119
  pymobiledevice3/services/mobilebackup2.py,sha256=1Wo4IpLG5HUfkGJustsv2SoTBBax30PZyKOtEOz5Eac,18217
120
120
  pymobiledevice3/services/notification_proxy.py,sha256=VCOG8G0HNn8_tFKUdLs5BFkshQCtI_LNH-w4MuNF2MM,2109
121
121
  pymobiledevice3/services/os_trace.py,sha256=Vi_KGWK8hsvk6eMNuv-ae-iEn3UlUk3SF_niC8yBEmU,6465
@@ -164,9 +164,9 @@ pymobiledevice3/services/web_protocol/switch_to.py,sha256=hDddJUEePbRN-8xlllOeGh
164
164
  pymobiledevice3/tunneld/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
165
  pymobiledevice3/tunneld/api.py,sha256=EfGKXEWhsMSB__menPmRmL9R6dpazVJDUy7B3pn05MM,2357
166
166
  pymobiledevice3/tunneld/server.py,sha256=SvC57AV_R8YQhA0fCwGNUdhfy8TKMFWwL_fp_FmXrBI,22715
167
- pymobiledevice3-4.21.8.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
168
- pymobiledevice3-4.21.8.dist-info/METADATA,sha256=h_9eBcjfSZGl0bJX0v8IUvZ82Vqhei3jwImCKKWPRIM,17366
169
- pymobiledevice3-4.21.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
170
- pymobiledevice3-4.21.8.dist-info/entry_points.txt,sha256=jJMlOanHlVwUxcY__JwvKeWPrvBJr_wJyEq4oHIZNKE,66
171
- pymobiledevice3-4.21.8.dist-info/top_level.txt,sha256=MjZoRqcWPOh5banG-BbDOnKEfsS3kCxqV9cv-nzyg2Q,21
172
- pymobiledevice3-4.21.8.dist-info/RECORD,,
167
+ pymobiledevice3-4.22.0.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
168
+ pymobiledevice3-4.22.0.dist-info/METADATA,sha256=mm3AkE_Rn5KkOwr_RhT6qcMLTENzw--0VAycsdfQ0ic,17366
169
+ pymobiledevice3-4.22.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
170
+ pymobiledevice3-4.22.0.dist-info/entry_points.txt,sha256=jJMlOanHlVwUxcY__JwvKeWPrvBJr_wJyEq4oHIZNKE,66
171
+ pymobiledevice3-4.22.0.dist-info/top_level.txt,sha256=MjZoRqcWPOh5banG-BbDOnKEfsS3kCxqV9cv-nzyg2Q,21
172
+ pymobiledevice3-4.22.0.dist-info/RECORD,,