pymobiledevice3
pymobiledevice3 copied to clipboard
Backup creates an error after reaching 100%
Test environment
- macOS 15 DB 1
- iPhone 13 iOS 18 DB 1
Describe the bug When doing a full backup, an error occurs. The backup files are saved but something is off, see the additional context section
To Reproduce Steps to reproduce the behavior:
- Plug in the device
- Run
pymobiledevice3 backup2 backup -v --color --full . - Wait for the device to fully backup
Expected behavior The backup completes without any errors.
Logs
Traceback (most recent call last):
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/service_connection.py", line 120, in sendall
self.socket.sendall(data)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/ssl.py", line 1211, in sendall
v = self.send(byte_view[count:])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/ssl.py", line 1180, in send
return self._sslobj.write(data)
^^^^^^^^^^^^^^^^^^^^^^^^
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2406)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/mobilebackup2.py", line 365, in device_link
yield dl
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/mobilebackup2.py", line 91, in backup
dl.dl_loop(progress_callback)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/device_link.py", line 62, in dl_loop
self._dl_handlers[command](message)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/device_link.py", line 91, in download_files
self.service.sendall(struct.pack(CODE_FORMAT, CODE_FILE_DATA) + data)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/service_connection.py", line 122, in sendall
raise ConnectionTerminatedError from e
pymobiledevice3.exceptions.ConnectionTerminatedError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/homebrew/Caskroom/miniconda/base/bin/pymobiledevice3", line 8, in <module>
sys.exit(main())
^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/__main__.py", line 100, in main
cli()
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/hayes/.local/lib/python3.12/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/cli/cli_common.py", line 147, in wrap_callback_calling
callback(service_provider=service_provider, **kwargs)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/cli/backup.py", line 47, in backup
backup_client.backup(full=full, backup_directory=backup_directory, progress_callback=update_bar)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/mobilebackup2.py", line 60, in backup
with self.device_link(backup_directory) as dl, \
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/mobilebackup2.py", line 367, in device_link
dl.disconnect()
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/services/device_link.py", line 191, in disconnect
self.service.send_plist(['DLMessageDisconnect', '___EmptyParameterString___'])
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/service_connection.py", line 179, in send_plist
return self.sendall(build_plist(d, endianity, fmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages/pymobiledevice3/service_connection.py", line 120, in sendall
self.socket.sendall(data)
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/ssl.py", line 1211, in sendall
v = self.send(byte_view[count:])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.12/ssl.py", line 1180, in send
return self._sslobj.write(data)
^^^^^^^^^^^^^^^^^^^^^^^^
ssl.SSLError: [SSL: BAD_LENGTH] bad length (_ssl.c:2406)
Additional context When trying to use a tool like https://github.com/matan1008/pyiosbackup with the backup that was saved and unbacking the contents of the backup, errors occur, saying something about paddding bytes or missing bytes.
For community
⬇️ Please click the 👍 reaction instead of leaving a +1 or 👍 comment
Sorry but this works just fine on my own device:
If you get to resolve this issue, please submit a PR
This could be an issue with Python 3.12. I had decryption errors with pmd3 backups on Windows too. With 3.11 decryption is working solid.
I'm using python 3.12 as my default and have not encountered that error
Possibly it's not an issue on MacOS. On Windows it's hit an miss wether the backup is usable on 3.12. On 3.11 i have no problems. There may be other aspects but maybe it's worth a try.