{"id":13498894,"url":"https://github.com/google/ios-webkit-debug-proxy","last_synced_at":"2025-10-21T04:58:52.809Z","repository":{"id":6914640,"uuid":"8165161","full_name":"google/ios-webkit-debug-proxy","owner":"google","description":"A DevTools proxy (Chrome Remote Debugging Protocol) for iOS devices (Safari Remote Web Inspector).","archived":false,"fork":false,"pushed_at":"2025-07-02T07:34:34.000Z","size":688,"stargazers_count":6095,"open_issues_count":13,"forks_count":472,"subscribers_count":162,"default_branch":"master","last_synced_at":"2025-10-21T04:58:41.431Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2013-02-12T19:08:19.000Z","updated_at":"2025-10-16T07:27:01.000Z","dependencies_parsed_at":"2023-01-13T14:10:30.409Z","dependency_job_id":"3ebe2f1b-d26e-4973-8c79-9f8d4e6281ac","html_url":"https://github.com/google/ios-webkit-debug-proxy","commit_stats":{"total_commits":164,"total_committers":34,"mean_commits":4.823529411764706,"dds":0.6097560975609756,"last_synced_commit":"d06f8d6135421d72e1ff3d3d341738611d097f4d"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/google/ios-webkit-debug-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fios-webkit-debug-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fios-webkit-debug-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fios-webkit-debug-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fios-webkit-debug-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/ios-webkit-debug-proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fios-webkit-debug-proxy/sbom","scorecard":{"id":437265,"data":{"date":"2025-08-11","repo":{"name":"github.com/google/ios-webkit-debug-proxy","commit":"278bf4874e6d3d3599baa90e1c59f7ac48bb8b1b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 5/28 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.9.1 not signed: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/154952395","Warn: release artifact v1.9.0 not signed: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/96090659","Warn: release artifact v1.8.8 not signed: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/29473137","Warn: release artifact v1.9.1 does not have provenance: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/154952395","Warn: release artifact v1.9.0 does not have provenance: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/96090659","Warn: release artifact v1.8.8 does not have provenance: https://api.github.com/repos/google/ios-webkit-debug-proxy/releases/29473137"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 14 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T04:58:27.353Z","repository_id":6914640,"created_at":"2025-08-19T04:58:27.353Z","updated_at":"2025-08-19T04:58:27.353Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280207219,"owners_count":26290616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T22:00:20.776Z","updated_at":"2025-10-21T04:58:52.768Z","avatar_url":"https://github.com/google.png","language":"C","readme":"# iOS WebKit Debug Proxy\n\nThe ios_webkit_debug_proxy (aka _iwdp_) proxies requests from usbmuxd daemon over a websocket connection, allowing developers to send commands to MobileSafari and UIWebViews on real and simulated iOS devices.\n\n## Installation\n\niOS WebKit Debug Proxy works on Linux, MacOS \u0026 Windows.\n\n### MacOS\n\nIt's easiest to install with [homebrew](http://brew.sh/):\n\n```console\nbrew install ios-webkit-debug-proxy\n```\n### Windows\nIt's easiest to install with [scoop](http://scoop.sh/):\n```\nscoop bucket add extras\nscoop install ios-webkit-debug-proxy\n```\nNote: you also need the latest version of [iTunes](https://www.apple.com/il/itunes/download/) installed.\n\n### Linux\n\nInstall dependencies available in apt repository:\n```console\nsudo apt-get install autoconf automake libusb-dev libusb-1.0-0-dev libplist-dev libtool libssl-dev\n```\n\nBuild and install dependencies that require more recent versions:\n- [libplist](https://github.com/libimobiledevice/libplist)\n- [libimobiledevice-glue](https://github.com/libimobiledevice/libimobiledevice-glue)\n- [libusbmuxd](https://github.com/libimobiledevice/libusbmuxd)\n- [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)\n- [usbmuxd](https://github.com/libimobiledevice/usbmuxd)\n\n#### Fedora specific  \n\nInstall dependencies:  \n```console\nsudo dnf install autoconf automake libusb1-devel libusb-compat-0.1-devel libtool openssl-devel\n```\nIf you do not want to build and install the most recent versions of the noted libs:  \n```console\nsudo dnf install libplist-devel usbmuxd libimobiledevice-devel libimobiledevice-utils libimobiledevice-glue-devel\n```  \n\nBuild and install `ios-webkit-debug-proxy`:\n```console\ngit clone https://github.com/google/ios-webkit-debug-proxy.git\ncd ios-webkit-debug-proxy\n\n./autogen.sh\nmake\nsudo make install\n```\n\n## Usage\n\nOn Linux, you must run the `usbmuxd` daemon.  The above install adds a /lib/udev rule to start the daemon whenever a device is attached.\n\nTo verify that usbmuxd can list your attached device(s), ensure that `libimobiledevice-utils` is installed and then run `idevice_id -l`.\n\n### Start the simulator or device\n\nThe iOS Simulator is supported, but it must be started **before** the proxy.  The simulator can be started in XCode,  standalone, or via the command line:\n\n```sh\n# Xcode changes these paths frequently, so doublecheck them\nSDK_DIR=\"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs\"\nSIM_APP=\"/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator\"\n$SIM_APP -SimulateApplication $SDK_DIR/iPhoneSimulator8.4.sdk/Applications/MobileSafari.app/MobileSafari\n```\n\n#### Enable the inspector\n\nYour attached iOS devices must have ≥1 open browser tabs and the inspector enabled via:\n  `Settings \u003e Safari \u003e Advanced \u003e Web Inspector = ON`\n\n### Start the proxy\n\n```console\nios_webkit_debug_proxy\n```\n\n* `--debug` for verbose output.\n* `--frontend` to specify a frontend\n* `--help` for more options.\n* `Ctrl-C` to quit. Also, the proxy can be left running as a background process.\n\n### Using with DevTools\n\nios_webkit_debug_proxy can be used with many tools such as Chrome DevTools and Safari Web Inspector.\n\n#### Chrome Devtools\n\nIn recent versions of Chrome and Safari there're major discrepancies between [Chrome Remote Debugging Protocol](https://developer.chrome.com/devtools/docs/debugger-protocol) and [Webkit Inspector Protocol](https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/inspector/protocol), which means that newer versions of Chrome DevTools aren't compatible with Safari.\n\n#### Safari Web Inspector\nYou can use Safari Web Inspector extracted from Webkit sources, e.g. [artygus/webkit-webinspector](https://github.com/artygus/webkit-webinspector) or [HimbeersaftLP/ios-safari-remote-debug-kit](https://github.com/HimbeersaftLP/ios-safari-remote-debug-kit).\n\n#### Firefox DevTools via Valence\nAnother option is [mozilla/valence](https://github.com/mozilla/valence) which enables Firefox DevTools to be used with iOS.\n\n## Configuration\n\n### View and inspect debuggable tabs\n\nNavigate to [localhost:9221](http://localhost:9221). You'll see a listing of all connected devices.\n\nClick through to view tabs available on each, and click through again to open the DevTools for a tab.\n\n### Setting the DevTools UI URL\n\n[Chrome DevTools UI](https://developers.google.com/chrome-developer-tools/) used as a default frontend:\n\n    http://chrome-devtools-frontend.appspot.com/static/27.0.1453.93/devtools.html\n\nYou can use the `-f` argument to specify different frontend source, like Chrome's local DevTools, a local\n[Chromium checkout](https://chromium.googlesource.com/chromium/src/+/master/third_party/WebKit/Source/devtools/) or another URL:\n\n```console\n# examples:\nios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html\nios_webkit_debug_proxy -f ~/chromium/src/third_party/WebKit/Source/devtools/front_end/inspector.html\nios_webkit_debug_proxy -f http://foo.com:1234/bar/inspector.html\n```\n\nIf you use `-f chrome-devtools://devtools/bundled/inspector.html`, you won't be able to click the links shown in `localhost:9222` as Chrome blocks clicking these URLs. However, you can copy/paste them into the address bar.\n\nJust the same, you can apply the appropriate port (9222) and page (2) values below.\n\n    chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9222/devtools/page/1\n\nThe `-f` value must end in \".html\". Due to security reasons, `https` URLs will not work; use `http` or force-allow with the URL bar's shield icon. As of Chrome 45, the primary URL [changed](https://codereview.chromium.org/1144393004/) from `devtools.html` to `inspector.html`.\n\nTo disable the frontend proxy, use the `--no-frontend` argument.\n\n#### Port assigment\n\nThe default configuration works well for most developers. The device_id-to-port assignment defaults to:\n\n    :9221 for the device list\n    :9222 for the first iOS device that is attached\n    :9223 for the second iOS device that is attached\n    ...\n    :9322 for the max device\n\nIf a port is in use then the next available port will be used, up to the range limit.\n\nThe port assignment is first-come-first-serve but is preserved if a device is detached and reattached, assuming that the proxy is not restarted, e.g.:\n\n  1. start the proxy\n  1. the device list gets :9221\n  1. attach A gets :9222\n  1. attach B gets :9223\n  1. detach A, doesn't affect B's port\n  1. attach C gets :9224 (not :9222)\n  1. reattach A gets :9222 again (not :9225)\n\nThe port assignment rules can be set via the command line with `-c`.  The default is equivalent to:\n\n    ios_webkit_debug_proxy -c null:9221,:9222-9322\n\nwhere \"null\" represents the device list.  The following example restricts the proxy to a single device and port:\n\n    ios_webkit_debug_proxy -c 4ea8dd11e8c4fbc1a2deadbeefa0fd3bbbb268c7:9227\n\n\n### Troubleshooting\n\n##### undefined reference to symbol 'log10@@GLIBC_2.2.5'\n```console\n/usr/bin/ld: ios_webkit_debug_proxy-char_buffer.o: undefined reference to symbol 'log10@@GLIBC_2.2.5'\n//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line\n```\n\nRun this before `make`: `./configure LIBS=\"-lm\"`\n\n##### error while loading shared libraries: libimobiledevice.so.6\n```console\nios_webkit_debug_proxy: error while loading shared libraries: libimobiledevice.so.6: cannot open shared object file: No such file or directory\n```\n\nRun `sudo ldconfig`\n\n##### idevice_id not found\n\nThe `idevice_id` executable may be found as part of the libimobiledevice-utils package.\n\n##### could not start com.apple.webinspector! success\n\n[Remove and rebuild libimobiledevice](https://github.com/google/ios-webkit-debug-proxy/issues/82#issuecomment-74205898).\n\n##### Could not connect to lockdownd (or doesn't work with iOS10+)\n\u003e Could not connect to lockdownd. Exiting.: No such file or directory. Unable to attach \u003clong id\u003e inspector ios_webkit_debug_proxy\n\nCheck the device for [a prompt to trust the connected computer](http://i.stack.imgur.com/hPaqX.png). Choose \"Trust\" and try again.\n\n\u003e Could not connect to lockdownd. Exiting.: Broken pipe. Unable to attach \u003clong id\u003e inspector\n\nor\n\n\u003e Could not connect to lockdownd, error code -\\\u003cnumber\\\u003e. Exiting.\n\nMake sure you're using latest version of ios-webkit-debug-proxy\n\n##### Inspectable pages list is empty for iOS \u003e= 12.2\n\nMake sure you're using latest version of ios-webkit-debug-proxy\n\n##### Can not see Simulator\n\n  - Make sure you started simulator before the proxy\n  - Check that webinspector switch is enabled (Settings -\u003e Safari -\u003e Advanced -\u003e Web Inspector)\n  - Most likely simulator's web inspector daemon listens on ipv6 interface, check that you have `::1 localhost` line in `/etc/hosts`\n\n##### Building under Rosetta (OS X)\n\nlibimobildevice formulae [depends on](https://github.com/Homebrew/homebrew-core/blob/d6c416caf0622f2aac47742bca679c3510d0b1d9/Formula/libimobiledevice.rb#L30) openssl@1.1, which is key-only and requires the following env paths for the build\n\n```console\nexport PKG_CONFIG_PATH=\"/usr/local/opt/openssl@1.1/lib/pkgconfig\"\nexport LDFLAGS=\"-L/usr/local/opt/openssl@1.1/lib\"\nexport CPPFLAGS=\"-I/usr/local/opt/openssl@1.1/include\"\n```\n\n##### If no luck so far...\nLastly, always try replugging in the USB cable.\n\n\n## IWDP Clients\n\nJSON-formatted APIs are provided for programmatic clients.\n  * \u003chttp://localhost:9221/json\u003e will list all devices\n  * \u003chttp://localhost:9222/json\u003e to list device \":9222\"'s tabs\n  * [ws://localhost:9222/devtools/page/1]() to inspect a tab.\n\nSee the [examples/README](examples/README.md) for example clients: NodeJS, C, clientside JS, websocket and more.\n\n## Design\n\n![Alt overview](overview.png \"Overview\")\n\nView the [design document](design.md) for an overview of the source layout and architecture.\n\n## License and Copyright\n\nGoogle BSD license \u003chttps://developers.google.com/google-bsd-license\u003e\nCopyright 2012 Google Inc.  \u003cwrightt@google.com\u003e\n\nThe proxy uses the following open-source packages:\n   - [libplist 2.2.0](http://cgit.sukimashita.com/libplist.git)\n   - [libusbmuxd 2.0.0](http://cgit.sukimashita.com/usbmuxd.git/)\n   - [libimobiledevice 1.3.0](http://cgit.sukimashita.com/libimobiledevice.git)\n","funding_links":[],"categories":["Debug","C","HarmonyOS","others","Alumni","\u003ca id=\"58cd9084afafd3cd293564c1d615dd7f\"\u003e\u003c/a\u003e工具"],"sub_categories":["Windows Manager","Automation","\u003ca id=\"d0108e91e6863289f89084ff09df39d0\"\u003e\u003c/a\u003e新添加的"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fios-webkit-debug-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fios-webkit-debug-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fios-webkit-debug-proxy/lists"}