idb is a flexible command line interface for automating iOS simulators and devices
by facebookObjective-C
6 of 6 standards met
Motivation was not reliably returning accessibility elements inside embedded web content (WebView), even when those elements were present and VoiceOver-accessible. Root causes: The path did not enable remote-content discovery options. Remote discovery could be starved when native traversal reported near-total frame coverage (common with full-screen proxy/container elements), because covered points were skipped and same/frontmost PID hits were filtered out. Coverage accounting included container roles, which could overstate “already covered” area and suppress remote probing. Implemented changes: : enabled remote discovery for describe calls by setting and default . : excluded web container roles ( / ) from base frame coverage; added near-full-coverage fallback probing (); allowed seen/frontmost/unknown PID hits in that fallback path to recover hidden content; skipped near-fullscreen proxy hits to avoid duplicate wrappers; kept explicit unsigned index conversions needed for strict warning-as-error builds. and : added translation-to-element mapping support in the translator double so tests can model frontmost-tree vs hit-tested remote elements. : added targeted regression tests: : retained test-only casts needed to satisfy strict sign-compare checks in this toolchain. Compatibility: No gRPC interface changes. No CLI schema/flag changes. Behavior changes are scoped to accessibility describe discovery and supporting tests. Test Plan 1. Build tests target: 2. Run accessibility unit suite: Result: (includes all new regression tests). 3. Build companion libraries: 4. Manual runtime verification on booted simulator: Verified output includes embedded webview labels/element. Related PRs None. I accepted the CLA
Summary: Add an option to pass keyboard modifiers to the command to perform keyboard shortcuts. The command will support the following modifiers: , , , , and . (The key is used as a modifier in iOS Full Keyboard Access for shortcuts like Tab+H and Tab+ArrowLeft.) Here are the usage examples: Differential Revision: D92825007
Repository: facebook/idb. Description: idb is a flexible command line interface for automating iOS simulators and devices Stars: 4921, Forks: 477. Primary language: Objective-C. Languages: Objective-C (78.5%), Python (12.6%), Swift (5.6%), MDX (2.6%), Shell (0.4%). License: MIT. Homepage: https://fbidb.io Latest release: v1.1.8 (3y ago). Open PRs: 29, open issues: 167. Last activity: 13h ago. Community health: 87%. Top contributors: lawrencelomax, c-ryan747, jbardini, zeyadsalloum, thegreatwallfb, plu, ajbalik, fgasperij, stepanhruda, mark-cmd-alt and others.
Last 12 weeks · 85 commits
I recently updated my macbook air M4 to macOS 26 Tahoe and since then idb stream is broken. When I connect my iPhone 7 running on v15.8.3 and hit it gives below output. "idb video-stream --udid Running stream until ^C 2025-10-28 10:22:18,439 [ERROR] - root - Exception thrown in main Traceback (most recent call last): File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/cli/main.py", line 313, in gen_main await root_command.run(args) File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/common/command.py", line 90, in run return await self.resolve_command_from_args(args).run(args) File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/cli/__init__.py", line 106, in run await self._run_impl(args) File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/cli/__init__.py", line 128, in _run_impl await self.run_with_client(args=args, client=client) File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/cli/commands/video.py", line 88, in run_with_client async for data in signal_handler_generator( File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/common/signal.py", line 57, in signal_handler_generator yield consume.result() File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/grpc/client.py", line 1060, in stream_video async for data in iterator: File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/idb/grpc/stream.py", line 51, in generate_bytes async for item in stream: File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/grpclib/stream.py", line 61, in __anext__ message = await self.recv_message() File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/grpclib/client.py", line 426, in recv_message await self.recv_initial_metadata() File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/grpclib/client.py", line 394, in recv_initial_metadata self._raise_for_grpc_status(status, message, details) File "/Users/admin/.pyenv/versions/3.9.23/lib/python3.9/site-packages/grpclib/client.py", line 346, in _raise_for_grpc_status raise GRPCError(status, message, details) grpclib.exceptions.GRPCError: (, "Timed out after 10.000000 seconds waiting for Device arm64 to have an associated capture device appear", None) 2025-10-28 10:22:20,461 [ERROR] - asyncio - Task was destroyed but it is pending! task: wait_for=()]> cb=[_gather.._done_callback() at /Users/kishandasani/.pyenv/versions/3.9.23/lib/python3.9/asyncio/tasks.py:767]>" the same command was working fine till I had macOS 15.7. Current system details: MacOS: 26 Xcode: 16.4 pyenv: 2.6.3 which idb: /Users/admin/.pyenv/shims/idb
Summary Upgrade GitHub Actions to their latest versions to ensure compatibility with Node 24, as Node 20 will reach end-of-life in April 2026. Changes Context Per GitHub's announcement, Node 20 is being deprecated and runners will begin using Node 24 by default starting March 4th, 2026. Why this matters Node 20 EOL: April 2026 Node 24 default: March 4th, 2026 Action**: Update to latest action versions that support Node 24 Security Note Actions that were previously pinned to commit SHAs remain pinned to SHAs (updated to the latest release SHA) to maintain the security benefits of immutable references. Testing These changes only affect CI/CD workflow configurations and should not impact application functionality. The workflows should be tested by running them on a branch before merging.
Traceback (most recent call last): File "/Users/mine/.local/bin/idb", line 7, in sys.exit(main()) ~~~~^^ File "/Users/mine/.local/pipx/venvs/fb-idb/lib/python3.14/site-packages/idb/cli/main.py", line 353, in main loop = asyncio.get_event_loop() File "/opt/homebrew/Cellar/python@3.14/3.14.0_1/Frameworks/Python.framework/Versions/3.14/lib/python3.14/asyncio/events.py", line 715, in get_event_loop raise RuntimeError('There is no current event loop in thread %r.' % threading.current_thread().name) RuntimeError: There is no current event loop in thread 'MainThread'.
Arrow key support Add ArrowUpCommand, ArrowDownCommand, ArrowLeftCommand, ArrowRightCommand Integrate arrow key commands into CLI main interface Add arrow key helper functions in common.hid module Add arrow key methods to gRPC client Fixing compilation errors Remove outdated parameter documentation in FBArchiveOperatioations Make simulator headers public in Xcode project Fix double semicolon syntax error in FBiOSTargetProvider Motivation The tvOS simulator crashes when trying to navigate via tapping or swiping. It needs to be controlled with the arrow keys. Test Plan