Repository navigation
Releases
ipb 0.6.0
ipb 0.6.0 adds a host-side MCP bridge and versioned machine-readable failure/support contracts. It uses Apple-provided device services without installing a phone Runner or starting XCTest.
ipb mcp: bounded stdio tools for fresh compact native observations, exact element operations and explicit coordinate/Home/launch actions. Device tools require a full CoreDevice UUID. Cancellation does not replay actions; MCP servers sharing one state root serialize device calls and persist uncertain-cleanup isolation.ipb support --json: static implementation/prerequisite inventory, separate from Apple's advertisedcapabilities. It does not query a device or certify availability.IPB_ERROR_FORMAT=json: opt-inipb.error/v1receipts for handled Python AX failures. Default errors/exit codes and successful ordinary schema1/native deep schema2 output remain compatible; complete native results retained on failure appear underresult.- The CLI, Python modules, completion, installation and CI archive checks include these additions. AX dependencies remain pinned to pymobiledevice3 11.10.2.
Requires macOS 27 ARM64, compatible Xcode 27/CoreDevice development components at runtime and paired iOS 27+ for device operations. MCP needs Python 3.11+; GUI MCP clients should set IPB_MCP_PYTHON to an absolute interpreter path. AX tools additionally need the optional host environment documented in docs/ui.md. No Apple framework, DDI or Python package is bundled.
The maintainer explicitly deferred physical-device testing for this version. The supported phone matrix, device-facing MCP effects and actual phone input/cleanup acceptance remain unverified. Manual CLI/mirror and MCP servers using different state roots are outside the MCP lock. Distribution uses the existing ad-hoc signatures, without Developer ID notarization.
Opus 5.5 accepted PR #11 and the corrected PR #12. The tagged candidate passed macOS 27 ARM64 native build, 89 AX/42 MCP and other host regressions, package checks and precompiled Homebrew install/test. Independent download verification matched the archive SHA256, all 18 payload hashes and the tagged source. Physical testing was explicitly deferred by the maintainer for this version.
After the stable tap update, existing stable Homebrew installs can run ipb update or brew update && brew upgrade ipbtools/ipb/ipb. HEAD installs retain their source/main update channel.
A CI-only follow-up on main gives the successful-cancellation fixture the production cleanup budget; runtime code and the release payload are unchanged.
ipb 0.5.0 — runner-free element automation
ipb 0.5.0 adds runner-free element automation over Apple's existing device services.
- Locate and wait for elements using exact identifier, label, value and native class selectors; qualified press resolves a fresh unique target.
- Replace focused text through the existing clipboard/HID path, with native first-responder checks for element input. A blocked or uncertain input is never automatically repeated.
- Scroll an existing native element into view with one native action and a separately verified postcondition.
- Explicitly select a SpringBoard modal title and button, then verify disappearance; ordinary press keeps its point-hit guard.
- Preserve structured
timed_outJSON when a wait deadline interrupts a read, without treating independent request failures as successful observations. - Preserve proven terminal AXRemoteElement references in system modal trees without inventing remote descendants or making foreign references actionable.
Existing ordinary/deep dump contracts and identifier-only press output are retained. The product installs no Runner or phone App and starts no XCTest session. A temporary user-approved read-only state diagnostic used during earlier research was removed.
Requires macOS 27 ARM64, compatible Apple CoreDevice/Xcode 27 development components and a paired iOS 27+ device. UI additionally needs the optional pinned host Python dependencies. Apple components and Python packages are not installed or bundled automatically. Signatures are ad-hoc, not Developer ID notarized.
The maintainer explicitly waived further physical-device testing for this version. Existing iPhone 12 mini controls are scoped to iOS 27.0/24A437 on supplementary macOS 26.5.1; native reads/actions were observed with current Automation Mode disabled. Never-authorized first use and the full native macOS 27 HID/media matrix remain unverified. Review, host/package/Homebrew checks and earlier device controls do not imply complete WDA parity or universal app coverage.
Opus 5.5 independent source review and focused follow-up both returned ACCEPT. The follow-up confirms the wait-timeout correction and publication documentation are resolved. All 89 AX host tests pass; actual device controls retain their earlier commit and host scope.
Source: merged PR #9, commit c59ac002223ec5e6e72a557c2b3f66b36127473f. Release candidate checks and merged-main CI passed on macOS 27.0.1 / Xcode 27.0 / CoreDevice 651.19, including actual precompiled Homebrew installation and tests. An independent download verified all five candidate assets, all 14 product payload hashes and packaged source identity. Archive SHA256: 7dfd6122943261ba30192329f2775faf5050370504a2fb1c394da87264846d0f.
ipb 0.4.0 — reliable native deep AX snapshots
ipb v0.4.0 fixes deep AX collection failures on dynamic login overlays and keyboards.
ipb ui --deepnow takes the complete tree and rectangles from one native snapshot, without reconciling a separately collected ordinary AX graph.- Deep JSON changes to schema 2.
--deep --full-statereports later state/role fields under each node'ssupplementalAX, with a separate status/count/error summary. Native fields are preserved. Consumers should checkschemaVersionand the supplemental status. - An individual supplemental read failure returns nonzero (1, or 5 for a request timeout), but preserves a complete validated native tree after successful cleanup. Native/global-budget/cancellation/cleanup failures still produce no result. A nonzero exit is never full-state success.
- Default ordinary
ipb uiand element actions retain schema 1. Deep remains opt-in; observations are non-atomic and node IDs belong to one snapshot. No XCTest Runner or phone-side third-party app is required.
On iPhone 13 Pro / iOS 27.0, ten interleaved Bilibili login-overlay/numeric-keyboard trials improved from v0.3.0 deep 6/10 to native-only 10/10 and separated full-state 10/10, preserving all ten digit-key rectangles. A live close-overlay control returned AX error 8 during supplementation, exited 1 and retained the complete 170-node native tree.
The release candidate passes macOS 27 ARM64 native builds, 52 AX regressions and the host suite, archive/signature/startup/hash checks, and an actual precompiled Homebrew install/test. These package checks and the scoped local/USB-forwarded AX device results do not close the full supported native HID/media/interactive device matrix, which remains open. This release is published under the maintainer's explicit scoped authorization.
Requires macOS 27 ARM64 with compatible Xcode 27/CoreDevice development components and a paired iOS 27+ device. Optional AX Python dependencies remain separate. No Apple framework or DDI is bundled; signatures are ad-hoc, without Developer ID notarization.
See UI setup and schema, verification scope, and changes since v0.3.0.
Build/package/Homebrew verification: release run 38522264753. Tagged source: 61ac445eac29f173888766446f0450af999f1eb1.
ipb 0.3.0 — deep AX and element operations
Adds native deep accessibility snapshots and direct element operations over the existing paired USB / DevicesApp AX connection. The product installs no phone server and starts no XCTest session.
New commands
ipb ui --deep: native ordered hierarchy, logical-point rectangles, identifiers, hints and AX visibility; repeated native handles retain their real paths.ipb ui --deep --full-state: additional structural enabled/focused/selected and role/placeholder reads. This mode costs extra requests and is opt-in.ipb ui hit-test --point X Y: the actual native element at a normalized point.ipb ui press --identifier ID: resolve a fresh exact identifier, verify state/geometry/centre hit and foreground, then submit one native press. No automatic replay or HID fallback. Failure after submission uses exit 6 and preserves accepted/refused/unknown status; native acceptance is separate from UI-effect proof.
Default ui retains ordinary AXChildren. See the UI guide for setup, output and limits.
Validation and requirements
Native build, 59 AX regressions, existing host checks, archive/hash checks and a real precompiled Homebrew install/test pass on macOS 27 CI. Same-page iPhone 13 Pro / iOS 27 controls match every ordered path against XCTest on Calculator (45), History (99) and Settings (171), with matching usable rectangles. Guarded Calculator actions have independent tree/screenshot effects, including after the reference Runner is removed. The current local tag build reads Settings 138 after the reference stops and successfully presses Three; counts are session/page scoped.
Stable precompiled package: macOS 27 ARM64 with compatible Apple Xcode 27 development components, paired iOS 27+, Developer Mode and an unlocked device. AX additionally needs Python 3.11+ with pymobiledevice3==11.10.2; install the optional host environment separately. No Apple frameworks/DDI or Python dependencies are bundled. Signatures are ad-hoc, without Developer ID notarization.
Known limits
AX visibility/focus are distinct from XCTest semantics, native classes are not a complete XCTest type mapper, and output remains non-atomic. Changing Bilibili login/keyboard backgrounds can fail strict reconciliation. Press effects are Calculator-validated; prior Automation Mode dependence on a never-automated device is unresolved. The complete supported native macOS 27 device/HID/media/interactive gate remains open. The maintainer authorizes this scoped validation release using the recorded AX controls and CI/package/Homebrew checks; it does not certify universal page or device acceptance.
Install with brew install ipbtools/ipb/ipb; update stable installations with ipb update or brew upgrade ipbtools/ipb/ipb. macOS 26 development hosts can build the same tag locally as supplemental testing; the stable formula retains its macOS 27 guard.
Build/package/Homebrew verification: release run 38402750792. Tagged source: 59d850254c5d6c3417e113b07776ce2d80d20816.
ipb 0.2.0
ipb 0.2.0 is the first packaged validation release, built from merged main at ac19b3f.
Changes
- Runner-free application AX child graphs, logical-point element rectangles and state through
ipb ui; no XCTest Runner or phone server. - Mirror keyboard forwarding, held keys/repeat, host input methods, text clipboard and numeric keypad controls.
- Description-first text reads address the reproduced Bilibili rich-Label encoding failure.
- Media/input lifetime fixes, display/orientation handling, and host-only
ipb updatewith separate stable and HEAD update paths. - Prebuilt macOS 27 ARM64 archive, SHA256 sidecar, BUILD_INFO.json and pinned Homebrew formula.
Requirements and validation
Requires macOS 27 ARM64, compatible Xcode 27/CoreDevice development components, and a paired iOS 27+ device with Developer Mode enabled. Stream/mirror require a GUI login session. The optional Python backend for ipb ui is installed separately; Apple frameworks/DDI and Python dependencies are not bundled.
Formal release build passed native build, host regressions, archive/signature/startup checks and actual precompiled Homebrew install/test with installed-file hashes on macOS 27.0.1 / Xcode 27.0 / CoreDevice 651.19.
This version is published at the maintainer's request as a simple validation build. The full supported physical HID/media/AX matrix was not rerun for this package. Existing page/device results retain their recorded scope; secure-field input, general app/rotation coverage and downloaded-copy quarantine behavior remain open. AX graphs may omit or merge UIKit views. Signatures are ad-hoc; the archive is not Developer ID notarized. See verification notes.
Installation
Homebrew stable now installs this exact archive. Published-package Homebrew verification passed public asset checks and actual install/test; the stable formula change is merged.
brew update
brew install ipbtools/ipb/ipbIf currently installed with --HEAD, switch channels with brew uninstall ipbtools/ipb/ipb followed by brew install ipbtools/ipb/ipb; plain reinstall retains HEAD. Update subsequent stable installs with ipb update or brew upgrade ipbtools/ipb/ipb. HEAD continues to track main.