Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
4165441
Add Swift package foundation: core utilities, CoreDevice/simctl clien…
hideouts-io Sep 26, 2026
041cc74
Move Python tests to python-tests/ so Swift Tests/ is distinct on cas…
hideouts-io Sep 26, 2026
d114ba4
Add native lockdown services: syslog, Unified Logging, pcapd, diagnos…
hideouts-io Sep 26, 2026
465da9c
Add discovery coordinator, Location Lab, GPX playback, and native IPA…
hideouts-io Sep 26, 2026
df138e7
Add Live Logs capture, Actions catalog with safety policy, Capability…
hideouts-io Sep 26, 2026
fffc5b1
Add toolchain check, tool reference, workspace profiles, support bund…
hideouts-io Sep 26, 2026
fbce16a
Add idt command-line tool, simulator device-type names, and opt-in re…
hideouts-io Sep 26, 2026
294f486
Add native SwiftUI macOS app, XcodeGen project, UI tests, and screens…
hideouts-io Sep 26, 2026
4bfdc7a
Fix GUI layout at minimum size and add documentation screenshot mode
hideouts-io Sep 27, 2026
cc0f07b
Add standalone packet capture action and enforce warnings as errors
hideouts-io Sep 27, 2026
f6da21a
Rewrite README and documentation for the Swift app
hideouts-io Sep 27, 2026
90f4e60
Keep the sidebar connection summary readable when a source is unavail…
hideouts-io Sep 27, 2026
f9dff63
Replace GitHub Actions with Swift workflows and add release tooling
hideouts-io Sep 27, 2026
1c5afa8
Record migration test results, known limitations, and feature statuses
hideouts-io Sep 27, 2026
d570249
Remove the Python implementation and its tooling
hideouts-io Sep 27, 2026
9cc6731
Fix Swift 6 actor-isolation warnings in the UI tests and catch them i…
hideouts-io Sep 27, 2026
84d3b8b
Report a missing Xcode as the cause in the Toolchain Check
hideouts-io Sep 27, 2026
2af5d06
Keep identifiers and paths out of public unified-log fields
hideouts-io Sep 27, 2026
2ecded8
Record the final verification results
hideouts-io Sep 27, 2026
422ef86
Make Actions rows single accessibility elements
hideouts-io Sep 27, 2026
570e69e
Record passing UI tests
hideouts-io Sep 27, 2026
40603e0
Record the developer-image audit and gap list
hideouts-io Sep 27, 2026
f65026a
Restore developer image (DDI) detection and mounting natively
hideouts-io Sep 27, 2026
5c76878
Document the restored developer-image capability
hideouts-io Sep 27, 2026
3c0c72a
Record x86_64 verification under Rosetta 2
hideouts-io Sep 27, 2026
6ac68cd
Fix test build with Swift 6.3 (Xcode 26.6 CI runner)
hideouts-io Sep 27, 2026
112fd64
Wait for simulators to finish booting before using them
hideouts-io Sep 27, 2026
22e9f1e
Exercise simulator app installation end to end and record CI results
hideouts-io Sep 27, 2026
bec3aac
Record the full parity audit against the Python app
hideouts-io Sep 27, 2026
0de04e4
Handle older Xcode and machine-specific images found by CI
hideouts-io Sep 27, 2026
ade2168
Read the process list natively, without Xcode (parity gap G1)
hideouts-io Sep 27, 2026
89a2d94
List configuration profiles natively, without Xcode (parity gap G2)
hideouts-io Sep 27, 2026
b905c1c
List Safari and web view tabs natively (parity gap G3)
hideouts-io Sep 27, 2026
05bdecc
Capture Bluetooth HCI traffic natively (parity gap G4)
hideouts-io Sep 27, 2026
5dd1ef9
Fix CI: fake-device TLS race, release build errors, URL validation
hideouts-io Sep 27, 2026
a0d067c
Add a guided reconnect (parity gap G5)
hideouts-io Sep 28, 2026
6ba9873
Add opt-in read-only real-device tests and record the first hardware …
hideouts-io Sep 28, 2026
3a9687d
Accept idt collect --include-oslog (parity gap G7)
hideouts-io Sep 28, 2026
c69a531
Add an Instruments readiness row (parity gap G8)
hideouts-io Sep 28, 2026
683ceb4
Stop repeating “Needs attention” in the blocked developer-image row
hideouts-io Sep 28, 2026
3720c78
Import 0.3.x workspace profiles; save the action and image choices (p…
hideouts-io Sep 28, 2026
ba5bfa8
Add the current coordinate to a route (parity gap G9)
hideouts-io Sep 28, 2026
4d495d4
Copy the findings register (parity gap G10)
hideouts-io Sep 28, 2026
0eba857
Add a keyboard shortcut reference and workspace stepping (parity gap …
hideouts-io Sep 28, 2026
faa40a4
Add readiness shortcuts and “Use in Advanced Mode” (parity gap G12)
hideouts-io Sep 28, 2026
e555dea
Fix CI: idt release build on Swift 6.3, slow Xcode tools, URL taint
hideouts-io Sep 28, 2026
c9f96b3
Show UFADE's developer-image submodule status (parity gap G13)
hideouts-io Sep 28, 2026
44e2c3a
Record the parity work and final verification in MIGRATION.md
hideouts-io Sep 28, 2026
25ef72c
Rename the provisioning profile's certificate count (CodeQL false pos…
hideouts-io Sep 28, 2026
1e718ae
Record the UI test results after the parity work
hideouts-io Sep 28, 2026
ae65e46
Record that all UI tests pass locally after the parity work
hideouts-io Sep 28, 2026
6f5e6e4
Document the Rosetta notice for the universal build
hideouts-io Sep 28, 2026
f01caff
Give the developer-image readiness row the specific fix; render with …
hideouts-io Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@

/.github/ @hideouts-io
/scripts/ @hideouts-io
/packaging/ @hideouts-io
/project.yml @hideouts-io
/Package.swift @hideouts-io
/Package.resolved @hideouts-io
54 changes: 27 additions & 27 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Bug report
description: Report a reproducible problem with the toolkit.
description: Report a reproducible problem with the app or idt.
title: "[Bug]: "
labels:
- bug
Expand All @@ -8,7 +8,7 @@ body:
- type: markdown
attributes:
value: |
Thanks for helping improve iOS Developer Toolkit. Remove UDIDs, serial numbers, account data, coordinates, backup contents, packet payloads, and case evidence before posting.
Thanks for helping improve iOS Developer Toolkit. Remove UDIDs, serial numbers, device names, account data, coordinates, backup contents, packet payloads, and evidence before posting.

- type: checkboxes
id: prerequisites
Expand All @@ -26,8 +26,8 @@ body:
id: toolkit-version
attributes:
label: Toolkit version
description: For example, v0.3.1 or a commit SHA.
placeholder: v0.3.1
description: From iOS Developer Toolkit › About, or a commit SHA.
placeholder: 1.0.0
validations:
required: true

Expand All @@ -36,60 +36,60 @@ body:
attributes:
label: Installation type
options:
- Apple Silicon release
- Intel release
- Source checkout
- Release download
- Built from source (Xcode)
- idt command-line tool
validations:
required: true

- type: input
id: host
attributes:
label: Mac and macOS
description: Include Mac architecture and macOS version.
placeholder: Apple Silicon, macOS 26.3
label: Mac, macOS, and Xcode
description: Mac architecture, macOS version, and Xcode version (or "no Xcode").
placeholder: Apple silicon, macOS 26.3, Xcode 26.1
validations:
required: true

- type: input
id: device
attributes:
label: Device and iOS or iPadOS
description: Give only the product family and OS version. Do not include a UDID, serial number, phone number, or device name.
label: Device or simulator and iOS/iPadOS version
description: Product family and OS version only. No UDID, serial number, phone number, or device name.
placeholder: iPhone 16 family, iOS 26.3.1
validations:
required: true

- type: dropdown
id: connection
attributes:
label: Connection state
label: Connection
options:
- USB, trusted and unlocked
- USB, trust or pairing incomplete
- Wi-Fi or tunnel
- No device required
- USB, not trusted yet
- Wi-Fi sync or network (Xcode pairing)
- Simulator
- Demo Mode / no device
- Other or unknown
validations:
required: true

- type: input
id: workspace
attributes:
label: Workspace or command
placeholder: Live Logs / DVT OSLog
label: Page, action, or command
placeholder: Live Logs / Unified, or idt collect
validations:
required: true

- type: textarea
id: reproduction
attributes:
label: Reproduction steps
description: List the smallest reliable sequence, including the button or preset used.
label: Steps to reproduce
placeholder: |
1. Connect and select the device
2. Open ...
3. Press ...
3. Click ...
validations:
required: true

Expand All @@ -103,19 +103,19 @@ body:
- type: textarea
id: actual
attributes:
label: Actual behavior and sanitized error
description: Paste the complete error after removing private data. Do not attach raw backups, PCAPs, sysdiagnose archives, or evidence cases.
label: Actual behavior and message
description: The message shown, plus the technical details from Help › Diagnostic Log with private data removed. Do not attach backups, captures, sysdiagnose archives, or evidence.
validations:
required: true

- type: textarea
id: capability
id: readiness
attributes:
label: Relevant Capability Matrix result
description: Include the bounded state and remediation text, if the affected workflow has a capability row.
label: Readiness Check result
description: The rows that are not ready, with their explanation.

- type: textarea
id: additional
attributes:
label: Additional sanitized context
description: Add screenshots or logs only when they contain no sensitive identifiers or evidence.
description: Screenshots only if they contain no identifiers or evidence (Demo Mode or a simulator is ideal).
23 changes: 13 additions & 10 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ body:
attributes:
label: Before submitting
options:
- label: I searched existing issues and reviewed the current workspace guide.
- label: I searched existing issues and read the README.
required: true
- label: The request is for authorized device development, diagnostics, administration, backup, or evidence preservation.
required: true
Expand All @@ -36,15 +36,18 @@ body:
attributes:
label: Primary area
options:
- Device connection and pairing
- Developer Mode, DDI, or tunnel
- Capability Matrix
- Commands and Man Pages
- Live logs or packet capture
- Device connection and trust
- Developer Mode or developer services
- Readiness Check
- Actions, Advanced Mode, or Tool Reference
- Live Logs or packet capture
- Location Lab
- Installed apps or IPA handling
- Backup or UFADE
- Evidence capture and integrity
- Apps or app installation
- Backup
- Evidence Capture
- Simulators
- External tools (MVT, UFADE, idb)
- idt command-line tool
- Packaging or release
- Documentation
- Other
Expand All @@ -55,7 +58,7 @@ body:
id: upstream
attributes:
label: Upstream command or documentation
description: Link official Apple or upstream pymobiledevice3 documentation when the request depends on a specific service or command.
description: Link Apple documentation (for example devicectl, simctl, or xctrace help) when the request depends on a specific service or tool.

- type: textarea
id: safety
Expand Down
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: 2
updates:
- package-ecosystem: pip
- package-ecosystem: swift
directory: "/"
schedule:
interval: monthly
Expand Down
27 changes: 14 additions & 13 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,25 @@ Describe the user-visible problem and the smallest change that solves it.

## Verification

- [ ] `python -m unittest discover -s tests -v`
- [ ] `python -m compileall -q ios_developer_toolkit tests`
- [ ] `QT_QPA_PLATFORM=offscreen python -m ios_developer_toolkit --toolkit-internal-smoke-test`
- [ ] Relevant real-device or no-device behavior was exercised and is described below.
- [ ] `swift build -Xswiftc -warnings-as-errors`
- [ ] `swift test`
- [ ] `xcodebuild -project iOSDeveloperToolkit.xcodeproj -scheme iOSDeveloperToolkit -destination 'platform=macOS' build`
- [ ] UI changes: UI tests and a minimum-size (`-window-size 900x560`) render without `SQUEEZED`/`OVERFLOW`
- [ ] Relevant device, simulator, or no-device behavior was exercised and is described below.

Device and host coverage:

<!-- Use product family and OS versions only. Do not include UDIDs, serial numbers, device names, account data, coordinates, or case identifiers. -->
<!-- Device family and OS versions only. No UDIDs, serial numbers, device names, account data, coordinates, or case identifiers. -->

## Safety and publication
## Safety and privacy

- [ ] The change preserves explicit device selection and authorization boundaries.
- [ ] Mutating actions remain labeled, confirmed, bounded, and reversible where possible.
- [ ] Errors remain visible and actionable; unsupported states are not reported as success.
- [ ] No private device data, logs, PCAPs, backups, profiles, IPAs, DDIs, credentials, or evidence artifacts are included.
- [ ] New subprocess arguments avoid shell interpretation and are validated at the boundary.
- [ ] Documentation reflects current behavior without overstating iOS access or forensic coverage.
- [ ] Operations still take an explicit target; physical devices and simulators stay separate.
- [ ] Device-changing actions are classified correctly and confirmed.
- [ ] No `Process` outside `CommandRunner`; arguments are a vector; no shell; no `sudo`.
- [ ] Errors are actionable; unsupported states are not reported as success.
- [ ] No private device data, logs, captures, backups, profiles, IPAs, credentials, or evidence are included.
- [ ] Documentation matches the new behavior without overstating access or coverage.

## Notes

List any capability, iOS-version, signing, packaging, or follow-up limitations.
List limitations, iOS-version differences, or follow-up work.
127 changes: 103 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,113 @@ concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
# Optional repository variable, for example "26.2"; otherwise the newest non-beta Xcode.
XCODE_VERSION: ${{ vars.XCODE_VERSION }}

jobs:
tests:
name: Tests
runs-on: macos-15
timeout-minutes: 25
package:
name: Swift package tests
runs-on: macos-26
timeout-minutes: 30
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
- name: Select Xcode
run: scripts/ci-select-xcode.sh
- uses: actions/cache@v6
with:
python-version: "3.13"
cache: pip
- name: Install project
path: .build
key: spm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('Package.resolved') }}
restore-keys: |
spm-${{ runner.os }}-${{ runner.arch }}-
- name: Build with warnings as errors
run: swift build --build-tests -Xswiftc -warnings-as-errors
- name: Test
run: swift test -Xswiftc -warnings-as-errors
- name: Command-line tool smoke test
run: |
swift run idt --version
swift run idt toolchain
swift run idt devices --simulators
- name: Record the runner's devicectl syntax (diagnostic)
# Shows how this Xcode spells the commands whose syntax changed between Xcode versions.
if: always()
run: |
xcrun devicectl --version || true
for route in "device" "device capture" "device capture screenshot" "device process" "device process launch" "device profile" "device profile list" "device simulate location"; do
echo "::group::devicectl help $route"
xcrun devicectl help $route || true
echo "::endgroup::"
done

app:
name: App build, UI tests, and layout
runs-on: macos-26
timeout-minutes: 45
steps:
- uses: actions/checkout@v7
- name: Select Xcode
run: scripts/ci-select-xcode.sh
- name: Build the app and UI tests with zero warnings
# project.yml makes warnings errors, but Swift does not promote every diagnostic (for
# example actor-isolation warnings involving XCTest), so also fail on any warning in
# this repository's sources.
run: |
python -m pip install --disable-pip-version-check --upgrade pip
python -m pip install --disable-pip-version-check --editable .
- name: Run test suite
run: python -m unittest discover -s tests -v
- name: Validate Python modules
run: python -m compileall -q ios_developer_toolkit tests
- name: Validate command entry points
set -o pipefail
xcodebuild -project iOSDeveloperToolkit.xcodeproj -scheme iOSDeveloperToolkit \
-configuration Debug -destination 'platform=macOS' \
-derivedDataPath "$RUNNER_TEMP/dd" build-for-testing 2>&1 | tee "$RUNNER_TEMP/build.log"
if grep -E "\.swift:[0-9]+:[0-9]+: warning:" "$RUNNER_TEMP/build.log" | grep -v -e /SourcePackages/ -e /checkouts/; then
echo "::error::The build has warnings."
exit 1
fi
- name: UI tests
run: |
python -m ios_developer_toolkit.collector --help
python -m ios_developer_toolkit.local_ddi --help
python -m ios_developer_toolkit.ipa_inspector --help
python -m ios_developer_toolkit --toolkit-internal-pymobiledevice3 version
- name: Verify guided command catalog
run: python scripts/verify_command_catalog.py
- name: Validate GUI actions
xcodebuild -project iOSDeveloperToolkit.xcodeproj -scheme iOSDeveloperToolkit \
-configuration Debug -destination 'platform=macOS' \
-derivedDataPath "$RUNNER_TEMP/dd" -resultBundlePath "$RUNNER_TEMP/UITests.xcresult" \
test-without-building
- name: Render every page at the default and minimum window sizes
run: |
scripts/check-layout.sh \
"$RUNNER_TEMP/dd/Build/Products/Debug/iOS Developer Toolkit.app/Contents/MacOS/iOS Developer Toolkit" \
"$RUNNER_TEMP/layout"
- uses: actions/upload-artifact@v7
if: always()
with:
name: ui-test-results
path: |
${{ runner.temp }}/UITests.xcresult
${{ runner.temp }}/layout
if-no-files-found: ignore

simulator:
name: Real simulator end-to-end test
runs-on: macos-26
timeout-minutes: 45
steps:
- uses: actions/checkout@v7
- name: Select Xcode
run: scripts/ci-select-xcode.sh
- uses: actions/cache@v6
with:
path: .build
key: spm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('Package.resolved') }}
restore-keys: |
spm-${{ runner.os }}-${{ runner.arch }}-
- name: Boot, use, and shut down a simulator
env:
QT_QPA_PLATFORM: offscreen
run: python -m ios_developer_toolkit --toolkit-internal-smoke-test
IDT_SIMULATOR_TESTS: "1"
run: swift test --filter RealSimulator

release-build:
name: Release packaging
runs-on: macos-26
timeout-minutes: 45
steps:
- uses: actions/checkout@v7
- name: Select Xcode
run: scripts/ci-select-xcode.sh
- name: Build, sign, and verify a release (not published)
# An empty VERSION means the version in ToolkitVersion.swift.
run: scripts/build-release.sh "" "$RUNNER_TEMP/release"
Loading
Loading