{"id":13528067,"url":"https://github.com/ios-control/ios-deploy","last_synced_at":"2025-10-07T14:30:50.269Z","repository":{"id":39522439,"uuid":"9777570","full_name":"ios-control/ios-deploy","owner":"ios-control","description":"Install and debug iPhone apps from the command line, without using Xcode","archived":false,"fork":true,"pushed_at":"2024-06-24T15:30:35.000Z","size":770,"stargazers_count":3544,"open_issues_count":43,"forks_count":469,"subscribers_count":111,"default_branch":"master","last_synced_at":"2025-09-25T20:16:39.442Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"10p-freddo/fruitstrap","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ios-control.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-04-30T18:43:27.000Z","updated_at":"2025-09-25T08:35:31.000Z","dependencies_parsed_at":"2023-01-25T18:01:53.543Z","dependency_job_id":null,"html_url":"https://github.com/ios-control/ios-deploy","commit_stats":null,"previous_names":["phonegap/ios-deploy"],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/ios-control/ios-deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ios-control%2Fios-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ios-control%2Fios-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ios-control%2Fios-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ios-control%2Fios-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ios-control","download_url":"https://codeload.github.com/ios-control/ios-deploy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ios-control%2Fios-deploy/sbom","scorecard":{"id":493216,"data":{"date":"2025-08-11","repo":{"name":"github.com/ios-control/ios-deploy","commit":"83f7d9ef97d03af42777965e80079f05332cc580"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Code-Review","score":5,"reason":"Found 16/30 approved changesets -- score normalized to 5","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":"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":"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":"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":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 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-19T19:48:04.023Z","repository_id":39522439,"created_at":"2025-08-19T19:48:04.024Z","updated_at":"2025-08-19T19:48:04.024Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278789613,"owners_count":26046179,"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-07T02:00:06.786Z","response_time":59,"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-08-01T06:02:11.785Z","updated_at":"2025-10-07T14:30:49.906Z","avatar_url":"https://github.com/ios-control.png","language":"Objective-C","funding_links":[],"categories":["Uncategorized","Objective-C","Tools","\u003ca id=\"977cef2fc942ac125fa395254ab70eea\"\u003e\u003c/a\u003eXCode"],"sub_categories":["Uncategorized","Dynamic Analysis Tools","\u003ca id=\"7037d96c1017978276cb920f65be2297\"\u003e\u003c/a\u003e工具"],"readme":"[![Build Status](https://travis-ci.org/ios-control/ios-deploy.svg?branch=master)](https://travis-ci.org/ios-control/ios-deploy)\n\nios-deploy\n==========\n\nInstall and debug iOS apps from the command line. Designed to work on un-jailbroken devices running iOS versions prior to iOS17. [iOS17 updated the System frameworks used to communicate with devices and Apple created their own command-line tools that can largely replace ios-deploy](https://github.com/ios-control/ios-deploy/issues/588).\n\n## Requirements\n\n* macOS\n* You need to have a valid iOS Development certificate installed\n* Xcode (**NOT** just Command Line Tools!)\n\n#### Tested Configurations\nThe ios-deploy binary in Homebrew should work on macOS 10.0+ with Xcode7+. It has been most recently tested with the following configurations:\n - macOS 10.14 Mojave, 10.15 Catalina and preliminary testing on 11.0b BigSur\n - iOS 13.0 and preliminary testing on iOS 14.0b\n - Xcode 11.3, 11.6 and preliminary testing on Xcode 12 betas\n - x86 and preliminary testing on Arm64e based Apple Macintosh Computers\n\n## Roadmap\n\nSee our [milestones](https://github.com/phonegap/ios-deploy/milestones).\n\t\n## Development\n\nThe 1.x branch has been archived (renamed for now), all development is to be on the master branch for simplicity, since the planned 2.x development (break out commands into their own files) has been abandoned for now.\n\n## Installation\n\nIf you have previously installed ios-deploy via `npm`, uninstall it by running:\n```\nsudo npm uninstall -g ios-deploy\n```\n\nInstall ios-deploy via [Homebrew](https://brew.sh/) by running:\n\n```\nbrew install ios-deploy\n```\n\n## Testing\n\nRun:\n\n```\npython -m py_compile src/scripts/*.py \u0026\u0026 xcodebuild -target ios-deploy \u0026\u0026 xcodebuild test -scheme ios-deploy-tests\n```\n\n## Usage\n\n    Usage: ios-deploy [OPTION]...\n\t  -d, --debug                  launch the app in lldb after installation\n\t  -i, --id \u003cdevice_id\u003e         the id of the device to connect to\n\t  -c, --detect                 list all connected devices\n\t  -b, --bundle \u003cbundle.app\u003e    the path to the app bundle to be installed\n\t  -a, --args \u003cargs\u003e            command line arguments to pass to the app when launching it\n\t  -s, --envs \u003cenvs\u003e            environment variables, space separated key-value pairs, to pass to the app when launching it\n\t  -t, --timeout \u003ctimeout\u003e      number of seconds to wait for a device to be connected\n\t  -u, --unbuffered             don't buffer stdout\n\t  -n, --nostart                do not start the app when debugging\n\t  -N, --nolldb                 start debugserver only. do not run lldb. Can not be used with args or envs options\n\t  -I, --noninteractive         start in non interactive mode (quit when app crashes or exits)\n\t  -L, --justlaunch             just launch the app and exit lldb\n\t  -v, --verbose                enable verbose output\n\t  -m, --noinstall              directly start debugging without app install (-d not required)\n\t  -A, --app_deltas             incremental install. must specify a directory to store app deltas to determine what needs to be installed\n\t  -p, --port \u003cnumber\u003e          port used for device, default: dynamic\n\t  -r, --uninstall              uninstall the app before install (do not use with -m; app cache and data are cleared)\n\t  -9, --uninstall_only         uninstall the app ONLY. Use only with -1 \u003cbundle_id\u003e\n\t  -1, --bundle_id \u003cbundle id\u003e  specify bundle id for list and upload\n\t  -l, --list[=\u003cdir\u003e]           list all app files or the specified directory\n\t  -o, --upload \u003cfile\u003e          upload file\n\t  -w, --download[=\u003cpath\u003e]      download app tree or the specified file/directory\n\t  -2, --to \u003ctarget pathname\u003e   use together with up/download file/tree. specify target\n\t  -D, --mkdir \u003cdir\u003e            make directory on device\n\t  -R, --rm \u003cpath\u003e              remove file or directory on device (directories must be empty)\n\t  -X, --rmtree \u003cpath\u003e          remove directory and all contained files recursively on device\n\t  -V, --version                print the executable version\n\t  -e, --exists                 check if the app with given bundle_id is installed or not\n\t  -B, --list_bundle_id         list bundle_id\n\t  -W, --no-wifi                ignore wifi devices\n\t  -C, --get_battery_level      get battery current capacity\n\t  -O, --output \u003cfile\u003e          write stdout to this file\n\t  -E, --error_output \u003cfile\u003e    write stderr to this file\n\t  --detect_deadlocks \u003csec\u003e     start printing backtraces for all threads periodically after specific amount of seconds\n\t  -f, --file_system            specify file system for mkdir / list / upload / download / rm\n\t  -F, --non-recursively        specify non-recursively walk directory\n\t  -S, --symbols                download OS symbols. must specify a directory to store the downloaded symbols\n\t  -j, --json                   format output as JSON\n\t  -k, --key                    keys for the properties of the bundle. Joined by ',' and used only with -B \u003clist_bundle_id\u003e and -j \u003cjson\u003e\n\t  --custom-script \u003cscript\u003e     path to custom python script to execute in lldb\n\t  --custom-command \u003ccommand\u003e   specify additional lldb commands to execute\n\t  --faster-path-search         use alternative logic to find the device support paths faster\n\t  -P, --list_profiles          list all provisioning profiles on device\n\t  --profile-uuid \u003cuuid\u003e        the UUID of the provisioning profile to target, use with other profile commands\n\t  --profile-download \u003cpath\u003e    download a provisioning profile (requires --profile-uuid)\n\t  --profile-install \u003cfile\u003e     install a provisioning profile\n\t  --profile-uninstall          uninstall a provisioning profile (requires --profile-uuid \u003cUUID\u003e)\n\t  --check-developer-mode       checks whether the given device has developer mode enabled (Requires Xcode 14 or newer)\n\n## Examples\n\nThe commands below assume that you have an app called `my.app` with bundle id `bundle.id`. Substitute where necessary.\n\n    // deploy and debug your app to a connected device\n    ios-deploy --debug --bundle my.app\n\n    // deploy, debug and pass environment variables to a connected device\n    ios-deploy --debug --envs DYLD_PRINT_STATISTICS=1 --bundle my.app\n\n    // deploy and debug your app to a connected device, skipping any wi-fi connection (use USB)\n    ios-deploy --debug --bundle my.app --no-wifi\n\n    // deploy and launch your app to a connected device, but quit the debugger after\n    ios-deploy --justlaunch --debug --bundle my.app\n\n    // deploy and launch your app to a connected device, quit when app crashes or exits\n    ios-deploy --noninteractive --debug --bundle my.app\n\n    // deploy your app to a connected device using incremental installation\n    ios-deploy --app_deltas /tmp --bundle my.app\n\n    // Upload a file to your app's Documents folder\n    ios-deploy --bundle_id 'bundle.id' --upload test.txt --to Documents/test.txt\n\n    // Download your app's Documents, Library and tmp folders\n    ios-deploy --bundle_id 'bundle.id' --download --to MyDestinationFolder\n\n    // List the contents of your app's Documents, Library and tmp folders\n    ios-deploy --bundle_id 'bundle.id' --list\n\n    // deploy and debug your app to a connected device, uninstall the app first\n    ios-deploy --uninstall --debug --bundle my.app\n\n    // check whether an app by bundle id exists on the device (check return code `echo $?`)\n    ios-deploy --exists --bundle_id com.apple.mobilemail\n\n    // Download the Documents directory of the app *only*\n    ios-deploy --download=/Documents --bundle_id my.app.id --to ./my_download_location\n    \n    // List ids and names of connected devices\n    ios-deploy -c\n    \n    // Uninstall an app\n    ios-deploy --uninstall_only --bundle_id my.bundle.id\n    \n    // list all bundle ids of all apps on your device\n    ios-deploy --list_bundle_id\n    \n    // list the files in cameral roll, a.k.a /DCIM\n    ios-deploy -f -l/DCIM\n    \n    // download the file in /DCIM\n    ios-deploy -f -w/DCIM/100APPLE/IMG_001.jpg\n    \n    // remove the file /DCIM\n    ios-deploy -f -R /DCIM/100APPLE/IMG_001.jpg\n    \n    // make directoly in /DCIM\n    ios-deploy -f -D/DCIM/test\n    \n    // upload file to /DCIM\n    ios-deploy -f -o/Users/ryan/Downloads/test.png -2/DCIM/test.png\n    \n    // get more properties of the bundle\n    ios-deploy -B -j --key=UIFileSharingEnabled,CFBundlePackageType\n    ios-deploy -B -j --key=UIFileSharingEnabled --key=CFBundlePackageType\n\n\n## Demo\n\nThe included demo.app represents the minimum required to get code running on iOS.\n\n* `make demo.app` will generate the demo.app executable. If it doesn't compile, modify `IOS_SDK_VERSION` in the Makefile.\n* `make debug` will install demo.app and launch a LLDB session.\n\n## Notes\n\n* `--detect_deadlocks` can help to identify an exact state of application's threads in case of a deadlock. It works like this: The user specifies the amount of time ios-deploy runs the app as usual. When the timeout is elapsed ios-deploy starts to print call-stacks of all threads every 5 seconds and the app keeps running. Comparing threads' call-stacks between each other helps to identify the threads which were stuck.\n\n## License\n\nios-deploy is available under the provisions of the GNU General Public License,\nversion 3 (or later), available here: http://www.gnu.org/licenses/gpl-3.0.html\n\n\nError codes used for error messages were taken from SDMMobileDevice framework,\noriginally reverse engineered by Sam Marshall. SDMMobileDevice is distributed\nunder BSD 3-Clause license and is available here:\nhttps://github.com/samdmarshall/SDMMobileDevice\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fios-control%2Fios-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fios-control%2Fios-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fios-control%2Fios-deploy/lists"}