# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

<!-- %% CHANGELOG_ENTRIES %% -->

## 0.9.0 - 2026-02-18

### Changed

- Replaced dynamic version resolution with a static `@version` module attribute
- Extracted `@source_url` module attribute and updated to public GitLab URL
- Fixed all `credo --strict` issues: snake_case naming, alias ordering,
  zero-arity parens, and reduced cyclomatic complexity in WebInspector,
  Lockdown, and ImageMounter
- Fixed documentation errors across modules (wrong arities, typos,
  incorrect callback references, missing parameters in typespecs)
- Set internal modules (Diagnostics.Monitor, Diagnostics.RestartManager)
  to `@moduledoc false`

### Added

- `expublish` dependency with `mix publish` alias
- `mix precommit` alias (compile --warnings-as-errors, format, credo --strict, test)
- CLAUDE.md for Claude Code guidance


## 0.8.3 - 2026-01-19

- Updated library dependencies to latest

- Minor updates for Elixir 1.19.5 and OTP 28.3 compatibility

## 0.8.2 - 2025-11-27

- ImageMounter: Correctly handle errors when failing to query an existing personalization manifest on a device

## 0.8.1 - 2025-11-25

- Do not log key details when `ExMobileDevice.Ssl` fails to connect with a host key mismatch

## 0.8.0 - 2025-11-20

- `ExMobileDevice.ImageMounter` now allows applications to provide their own mechanism for retrieving signing DDI manifests.

  To override, the application needs to to set the following config item:
    ```elixir
    config :exmobiledevice, manifest_provider: <MODULE_NAME>
  ```
  where `<MODULE_NAME>` implements the `ExMobileDevice.ImageMounter.PersonalizedManifestProvider` behaviour.

## 0.7.0 - 2025-10-29

- Expose DDI-signing related functions

- Introduced `RestartManager`

  When a device first connects to the host, the `RestartManager` will make a preemptive TLS connection to the
  `com.apple.mobile.diagnostics_relay` service on the device.

  If a subsequent attempt to make a request to the Diagnostics service fails, an additional retry of the
  request will be made using the pre-connected SSL socket.

  This aims to work around an issue where a device fails the TLS handshake with the device, preventing all
  further attempts to reboot the device using the diagnostics service.

## 0.6.0 - 2025-08-07

- `WebInspector.start_link/1` can take a `fail_if_safari_running` option.

  If mobile Safari is already running on the device when the WebInspector session is
  created, and `fail_if_safari_running` is `true`, then `wait_for_session/2` will fail
  with `{:error, :running}`. It is expected that the client will terminate the mobile Safari
  process themselves, and reattempt to start the session with `fail_if_safari_running` set
  to `false`

## 0.5.0  - 2025-07-17

- `ExMobileDevice.Lockdown.start_session/2` can take a `timeout` option
  that will determine how long the caller will wait for a successful
  session establishment

## 0.4.1  - 2025-06-10

- Move websession connection out of init to avoid blocking in start_link/1

- Websession will wait 30s for tls-upgrade before timing out

- Diagnostics calls - sleep, restart and shutdown now all take an optional
  timeout parameter which defaults to 30s

## 0.4.0  - 2025-02-24

- Vendor in this package
- Replace `GenStateMachine` with `:gen_statem`
- Bump minimum Elixir to 1.17

## 0.3.1  - 2025-01-19

### Fixes

- Replace uuid with uniq
- Replace plist with pealist

## 0.2.23 - 2025-01-16

### Fixes

- Updated deps

## 0.2.22 - 2024-12-03

### Fixes

- Fix restrictive typespec in WebInspector
- Fix incorrect match in FileConduit.do_write

## 0.2.19 - 2024-06-24

### Fixes

- Fix error handling in FileConduit so that it passes through socket errors
- Fix zero-length file handling in CrashReporter

## 0.2.18 - 2024-06-20

### Fixes

- Ignore individual errors in recursive file deletion

## 0.2.17 - 2024-06-13

### Fixes

- Handle Permission Denied error in FileConduit

## 0.2.16 - 2024-05-09

### Fixes

- Return error on ssl connection failure in `ExMobileDevice.Lockdown.start_session/1`.

## 0.2.15 - 2024-04-05

### Fixes

- Fix web session creation when Safari is already running

## 0.2.14 - 2024-04-03

### Fixes

- Fix bug in disk-signing.

## 0.2.13 - 2024-04-02

### Enhancements

- Improve error handling on disk-signing failures.

## 0.2.12 - 2024-03-06

### Enhancements

- Support for mounting developer disks on iOS16 and below.

## 0.2.11 - 2024-03-05

### Enhancements

- Support for copying and clearing crash logs

## 0.2.10 - 2024-03-01

### Fixes

- Drop unhandled (pairing) messages from usbmuxd
- Improve web-inspector state machine

## 0.2.9 - 2024-02-28

### Fixes

- More github action shenanighans

## 0.2.8 - 2024-02-28

### Fixes

- Switch to more recent action

## 0.2.7 - 2024-02-28

### Fixes

- Publish from github

## 0.2.6 - 2024-02-27

### Enhancements

- Add DDI mounting support

### Fixes

- Fix muxd framing issue

## 0.2.5 - 2024-02-22

### Fixes

- Fix controlling process handling

## 0.2.4 - 2024-02-22

### Fixes

- Fix state management in ExMobileDevice.WebInspector

## 0.2.3 - 2024-02-20

### Fixes

- Fix call to ExMobileDevice.Muxd.connect/0

## 0.2.2 - 2024-02-20

### Fixes

- Fix default configuration

## 0.2.1 - 2024-02-17

### Fixes

- Fix root page in docs

## 0.2.0 - 2024-02-17

### Enhancements

- [ExMobileDevice.WebInspector] Automate web-browsing

## 0.1.0 - 2024-02-05

### Initial revision

- [ExMobileDevice.Muxd] Device enumeration and notification of attach/detach
- [ExMobileDevice.Lockdown] Retrieval of device configuration
- [ExMobileDevice.Diagnostics] Device reboot and shutdown
- [ExMobileDevice.Syslog] Syslog streaming
