{"id":33023117,"url":"https://github.com/YueChen-C/py-ios-device","last_synced_at":"2025-11-24T23:30:15.423Z","repository":{"id":40412433,"uuid":"317173761","full_name":"YueChen-C/py-ios-device","owner":"YueChen-C","description":"IOS Professional Performance Testing Tool . You can get CPU, GPU, Memory , Lifecycle  and other metrics from real  iOS devices . iOS 性能测试工具","archived":false,"fork":false,"pushed_at":"2025-09-04T08:19:38.000Z","size":689,"stargazers_count":760,"open_issues_count":30,"forks_count":192,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-09-20T12:54:17.281Z","etag":null,"topics":["instruments","ios","performance-testing","python","usbmuxd","xcode"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YueChen-C.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-11-30T09:31:36.000Z","updated_at":"2025-09-19T07:15:57.000Z","dependencies_parsed_at":"2024-01-25T02:53:59.956Z","dependency_job_id":"ddad9371-5038-478a-abfd-33df5d24cf1d","html_url":"https://github.com/YueChen-C/py-ios-device","commit_stats":{"total_commits":138,"total_committers":15,"mean_commits":9.2,"dds":0.6231884057971014,"last_synced_commit":"7697ebb941658061247199494ea36d10145a79e7"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/YueChen-C/py-ios-device","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YueChen-C%2Fpy-ios-device","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YueChen-C%2Fpy-ios-device/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YueChen-C%2Fpy-ios-device/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YueChen-C%2Fpy-ios-device/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YueChen-C","download_url":"https://codeload.github.com/YueChen-C/py-ios-device/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YueChen-C%2Fpy-ios-device/sbom","scorecard":{"id":155597,"data":{"date":"2025-08-11","repo":{"name":"github.com/YueChen-C/py-ios-device","commit":"2429843e5eb66c80a4d4bb02596a74b2e602de08"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/26 approved changesets -- score normalized to 0","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":"Maintained","score":2,"reason":"0 commit(s) and 3 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":"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":"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":"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":"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":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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":"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":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2022-43017 / GHSA-qwmp-2cf2-g9g6","Warn: Project is vulnerable to: PYSEC-2019-41 / GHSA-qfc5-mcwq-26q8","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 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-16T11:40:07.379Z","repository_id":40412433,"created_at":"2025-08-16T11:40:07.379Z","updated_at":"2025-08-16T11:40:07.379Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286079811,"owners_count":27282121,"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-11-24T02:00:07.096Z","response_time":68,"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":["instruments","ios","performance-testing","python","usbmuxd","xcode"],"created_at":"2025-11-13T19:00:34.935Z","updated_at":"2025-11-24T23:30:15.417Z","avatar_url":"https://github.com/YueChen-C.png","language":"Python","funding_links":[],"categories":["Game-BenchMark/Metric/Tool"],"sub_categories":[],"readme":"# py-ios-device\n[![PyPI](https://img.shields.io/pypi/v/py-ios-device)](https://pypi.org/project/py-ios-device/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/py-ios-device)](https://pypistats.org/search/py-ios-device)\n\nA python based Apple instruments protocol，you can get CPU, Memory and other metrics from real iOS devices\n\n\n\nlink: https://testerhome.com/topics/27159\n\n[中文文档](README_CN.md)\n\nJava link: https://github.com/YueChen-C/java-ios-device)\n\n## pip :\n    pip install py-ios-device\n    \npython version: 3.7 +\n### Instruments：\n- [x] Get system Memory and CPU data\n- [x] Get application Memory and CPU data\n- [x] Get FPS data FPS \u003c= 60\n- [x] Get FPS and Jank data  FPS \u003c= 120\n- [x] Get network data\n- [x] Set the device network status. eg: 2G, 3G ,100% Loss\n- [x] Set the device behaves as though under a high thermal state\n- [x] Monitoring app start、exit、background\n- [x] Launch and Kill app\n- [x] Run xctest. eg: WebDriverAgent\n- [x] Dump core profile stack snapshot \n- [x] Analyze the core profile data stream\n- [x] Get Metal GPU Counters\n- [x] Get App Launch Lifecycle\n- [x] pull \u0026\u0026 push form the device\n\n\n### Other \n- [x] Profiles \u0026 Device Management. eg: Install and uninstall Fiddler certificate\n- [x] Get syslog\n- [x] Get crash log\n- [x] Get the captured packet traffic and forward it to wireshark\n- [x] App install and uninstall \n- [x] Get device battery \n- [x] Set simulate-location options\n\n\n## Usage：\n\n### Support iOS 17 (Command line is not supported )\n\n\n```bash\npip install pymobiledevice3\nsudo python3 -m pymobiledevice3 remote start-tunnel\n\n# Recommended to use go-ios, which has better transmission performance\nnpm install -g go-ios  \nsudo ios tunnel start \u0026\u0026 ios tunnel start --userspace\ncurl http://127.0.0.1:60105/tunnels\n```\n\n```python\nfrom ios_device.remote.remote_lockdown import RemoteLockdownClient\nfrom ios_device.servers.Instrument import  InstrumentServer\nfrom demo.instrument_demo.sysmontap import  sysmontap\n\n# support ios tunnel start --userspace\n# [{\"address\":\"fd17:cafe:59d4::1\",\"rsdPort\":54934,\"udid\":\"00008101-0018242C3XXXXXXXXX\",\"userspaceTun\":true,\"userspaceTunPort\":60106}]\n\nhost = 'fd17:cafe:59d4::1'\nport = 54934  \nwith RemoteLockdownClient((host, port), userspace_port=60106) as rsd:\n    rpc = InstrumentServer(rsd).init()\n    sysmontap(rpc)\n    rpc.stop()\n```\n\n\n## pip :\n    \u003e pip install py-ios-device\n    \u003e pyidevice --help\n    \u003e pyidevice instruments --help\n\n\n#### Get device list\n\n```bash\n$ pyidevice devices\n```\n\n#### Get device info\n\n```bash\n$ pyidevice  deviceinfo --udid=xxxxxx\n```\n\n#### Get System performance data\n\n```bash\n$ pyidevice instruments monitor \nMemory  \u003e\u003e {'App Memory': '699.69 MiB', 'Cached Files': '1.48 GiB', 'Compressed': '155.17 MiB', 'Memory Used': '1.42 GiB', 'Wired Memory': '427.91 MiB', 'Swap Used': '46.25 MiB'}\nNetwork \u003e\u003e {'Data Received': '4.07 GiB', 'Data Received/sec': '4.07 GiB', 'Data Sent': '2.54 GiB', 'Data Sent/sec': '2.54 GiB', 'Packets in': 2885929, 'Packets in/sec': 6031576, 'Packets Out': 2885929, 'Packets Out/sec': 2885929}\nDisk    \u003e\u003e {'Data Read': '117.91 GiB', 'Data Read/sec': 0, 'Data Written': '64.28 GiB', 'Data Written/sec': 0, 'Reads in': 9734132, 'Reads in/sec': 9734132, 'Writes Out': 6810640, 'Writes Out/sec': 6810640}\n\n$ pyidevice instruments monitor --filter = memory\nMemory  \u003e\u003e {'App Memory': '699.69 MiB', 'Cached Files': '1.48 GiB', 'Compressed': '155.17 MiB', 'Memory Used': '1.42 GiB', 'Wired Memory': '427.91 MiB', 'Swap Used': '46.25 MiB'}\n\n```\n\n#### Get application performance data\n\n```bash\n$ pyidevice instruments appmonitor  -b cn.rongcloud.im\n{'Pid': 30897, 'Name': 'SealTalk', 'CPU': '0 %', 'Memory': '35.72 MiB', 'DiskReads': '24.12 MiB', 'DiskWrites': '2.28 MiB', 'Threads': 13}\n{'Pid': 30897, 'Name': 'SealTalk', 'CPU': '3.4 %', 'Memory': '35.72 MiB', 'DiskReads': '24.12 MiB', 'DiskWrites': '2.30 MiB', 'Threads': 13}\n```\n\n#### Get custom application performance data\n```bash\n$ pyidevice instruments sysmontap --help\n$ pyidevice instruments sysmontap  -b com.tencent.xin --proc_filter physFootprint,cpuUsage --processes --sort cpuUsage # 只显示 memVirtualSize,cpuUsage 参数的进程列表，且根据 cpuUsage 字段排序 \n\n[('WeChat', {'cpuUsage': 0.03663705586691998, 'physFootprint': 2179284992, 'name': 'WeChat', 'pid': 99269})]\n[('WeChat', {'cpuUsage': 0.036558268613227536, 'physFootprint': 2179284992, 'name': 'WeChat', 'pid': 99269})]\n\n\n```\n#### Get FPS data FPS \u003c= 60\n\n```bash\n$ pyidevice instruments fps\n\n{'currentTime': '2021-05-11 14:14:40.259059', 'fps': 52}\n{'currentTime': '2021-05-11 14:14:40.259059', 'fps': 56}\n```\n\n#### Get FPS display data  FPS \u003c= 120\n\n```bash\n$ pyidevice instruments display\n{'time': 1.393329, 'fps': 103.999274047912838, 'jank': 0, 'big_jank': 0, 'stutter': 0.0}\n```\n\n#### Get network data\n```bash\n$ pyidevice instruments networking\n# Get all network data\n\"connection-update{\\\"RxPackets\\\": 2, \\\"RxBytes\\\": 148, \\\"TxPackets\\\": 2, \\\"TxBytes\\\": 263, \\\"RxDups\\\": 0, \\\"RxOOO\\\": 0, \\\"TxRetx\\\": 0, \\\"MinRTT\\\": 0.05046875, \\\"AvgRTT\\\": 0.05046875, \\\"ConnectionSerial\\\": 5}\"\n\"connection-update{\\\"RxPackets\\\": 4, \\\"RxBytes\\\": 150, \\\"TxPackets\\\": 3, \\\"TxBytes\\\": 1431, \\\"RxDups\\\": 0, \\\"RxOOO\\\": 0, \\\"TxRetx\\\": 0, \\\"MinRTT\\\": 0.0539375, \\\"AvgRTT\\\": 0.0541875, \\\"ConnectionSerial\\\": 4}\"\n\n$ pyidevice instruments network_process -p com.tencent.xin \n# Get application network data\n{403: {'net.packets.delta': 119, 'time': 1620720061.0643349, 'net.tx.bytes': 366715, 'net.bytes.delta': 63721, 'net.rx.packets.delta': 47, 'net.tx.packets': 633, 'net.rx.bytes': 34532, 'net.bytes': 401247, 'net.tx.bytes.delta': 56978, 'net.rx.bytes.delta': 6743, 'net.rx.packets': 169, 'pid': 403, 'net.tx.packets.delta': 72, 'net.packets': 802}}\n{403: {'net.packets.delta': 13, 'time': 1620720076.2191892, 'net.tx.bytes': 1303204, 'net.bytes.delta': 5060, 'net.rx.packets.delta': 5, 'net.tx.packets': 2083, 'net.rx.bytes': 46736, 'net.bytes': 1349940, 'net.tx.bytes.delta': 4682, 'net.rx.bytes.delta': 378, 'net.rx.packets': 379, 'pid': 403, 'net.tx.packets.delta': 8, 'net.packets': 2462}}\n\n```\n\n#### Set device status. iOS version \u003e 12\n\n```bash\n$ pyidevice instruments condition get\n# Get device configuration information\n\n$ pyidevice instruments condition set -c SlowNetworkCondition -p SlowNetwork2GUrban\n# Set the device network status. eg: 2G, 3G ,100% Loss\n\n$ pyidevice instruments condition set -c ThermalCondition -p ThermalCritical\n# Set the device behaves as though under a high thermal state\n```\n\n\n#### Listen to app notifications\n```bash\n$ pyidevice instruments notifications\n[{'execName': 'MobileNotes', 'state_description': 'Foreground Running', 'elevated_state_description': 'Foreground Running', 'displayID': 'com.apple.mobilenotes', 'mach_absolute_time': 27205542653928, 'appName': 'Notes', 'elevated_state': 8, 'timestamp': 1620714619.1264, 'state': 8, 'pid': 99367}]\n[{'execName': 'MobileNotes', 'state_description': 'Background Running', 'elevated_state_description': 'Background Running', 'displayID': 'com.apple.mobilenotes', 'mach_absolute_time': 27205678872050, 'appName': 'Notes', 'elevated_state': 4, 'timestamp': 1620714624.802145, 'state': 4, 'pid': 99367}]\n[{'execName': 'MobileNotes', 'state_description': 'Background Task Suspended', 'elevated_state_description': 'Background Task Suspended', 'displayID': 'com.apple.mobilenotes', 'mach_absolute_time': 27205683486410, 'appName': 'Notes', 'elevated_state': 2, 'timestamp': 1620714624.99441, 'state': 2, 'pid': 99367}]\n```\n\n#### Dump core profile stack snapshot \n```bash\n$ pyidevice instruments stackshot --out stackshot.log\n\n```\n\n#### Analyze the core profile data stream \n```bash\n$ pyidevice instruments instruments core_profile --pid=1107\nSealTalk(1107)             PERF_THD_CSwitch (0x25010014)                               DBG_PERF          PERF_DATA                     DBG_FUNC_NONE  \nSealTalk(1107)             MACH_DISPATCH (0x1400080)                                   DBG_MACH          DBG_MACH_SCHED                DBG_FUNC_NONE  \nSealTalk(1107)             DecrSet (0x1090004)                                         DBG_MACH          DBG_MACH_EXCP_DECI            DBG_FUNC_NONE  \n\n```\n\n\n#### Get Metal GPU Counters\n```bash\n$ pyidevice instruments gpu_counters\n15.132907 ALU Limiter                                  93.77 \n15.132907 Texture Sample Limiter                       39.62 \n15.132907 Texture Write Limiter                        13.87 \n15.132907 Buffer Read Limiter                          0.01  \n15.132907 Buffer Write Limiter                         0     \n15.132907 Threadgroup/Imageblock Load Limiter          17.16 \n15.132907 Threadgroup/Imageblock Store Limiter         10.9  \n15.132907 Fragment Input Interpolation Limiter         15.74 \n15.132907 GPU Last Level Cache Limiter                 6.24  \n15.132907 Vertex Occupancy                             0     \n15.132907 Fragment Occupancy                           91.44 \n15.132907 Compute Occupancy                            0     \n15.132907 GPU Read Bandwidth                           2.65  \n15.132907 GPU Write Bandwidth                          1.25  \n```\n\n#### Get App Launch Lifecycle\n```bash\n$ pyidevice instruments app_lifecycle -b cn.rongcloud.im\n  31.20 ms   Initializing-System Interface Initialization (Dyld init)\n  14.33 ms   Initializing-Static Runtime Initialization\n  35.68 ms   Launching-UIKit Initialization\n 810.46 us   Launching-UIKit Scene Creation\n 100.64 ms   Launching-didFinishLaunchingWithOptions()\n   2.91 ms   Launching-UIKit Scene Creation\n  21.85 ms   Launching-Initial Frame Rendering\nApp Thread Process ID:6506076, Total Time:207.41 ms\n```\n\n### Other\n#### Profiles \u0026 Device Management \n\n```bash\n$ pyidevice profiles list\n{\n    \"OrderedIdentifiers\": [\n        \"aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a\"\n    ],\n    \"ProfileManifest\": {\n        \"aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a\": {\n            \"Description\": \"DO_NOT_TRUST_FiddlerRoot\",\n            \"IsActive\": true\n        }\n    },\n    \"ProfileMetadata\": {\n        \"aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a\": {\n            \"PayloadDisplayName\": \"DO_NOT_TRUST_FiddlerRoot\",\n            \"PayloadRemovalDisallowed\": false,\n            \"PayloadUUID\": \"C8CE7BC1-F840-4616-B606-337F8CB6AE19\",\n            \"PayloadVersion\": 1\n        }\n    },\n    \"Status\": \"Acknowledged\"\n}\n\n$ pyidevice profiles install  --path Downloads/charles-certificate.pem\n## install charles certificate\n\n$ pyidevice profiles remove --name fe7371d9ce36c541ac8dee5f51f3b490b2aa98dcd95699ee44717fd5233fe7a0a\n## uninstall charles certificate\n```\n\n#### get syslog\n```bash\n$ pyidevice syslog\n# --path\n# --filter\n```\n\n\n#### get crash syslog\n\n```bash\n$ pyidevice crash list\n['.', '..', 'com.apple.appstored', 'JetsamEvent-2021-05-12-112126.ips']\n\n$ pyidevice crash export --name JetsamEvent-2021-05-12-112126.ips\n\n$ pyidevice crash delete --name JetsamEvent-2021-05-12-112126.ips\n\n$ pyidevice crash shell\n\n```\n\n\n#### apps\n\n```bash\n$ pyidevice apps list\n\n$ pyidevice apps install --ipa_path\n\n$ pyidevice apps uninstall --bundle_id \n\n$ pyidevice apps launch --bundle_id\n\n$ pyidevice apps kill --bundle_id\n\n$ pyidevice apps shell \n\n```\n\n#### packet capture\n```bash\n$ pyidevice pcapd ./test/test.pacp\n\n$ pyidevice pcapd - | \"/Applications/Wireshark.app/Contents/MacOS/Wireshark\" -k -i -\n# mac forword Wireshark\n\n$ pyidevice pcapd - | \"D:\\Program Files\\Wireshark\\Wireshark.exe\" -k -i -\n# win forword Wireshark\n\n```\n\n#### device battery\n```bash\n$ pyidevice battery\n# [Battery] time=1622777708, current=-71, voltage=4330, power=-307.43, temperature=3279\n\n```\n\n#### enable developer mode\n```bash\n$ pyidevice enable_developer_mode\n```\n\n\n#### using python\n```python\n\nfrom ios_device.cli.base import InstrumentsBase\nfrom ios_device.util.dtx_msg import DTXMessage\n\nwith InstrumentsBase() as rpc:\n    def sysmontap_callback(res: DTXMessage):\n        print(res.selector, res.auxiliaries)\n\n    rpc.process_attributes = ['name', 'pid']\n    rpc.system_attributes = rpc.device_info.sysmonSystemAttributes()\n    rpc.sysmontap(sysmontap_callback)\n\n\n```\n\nQQ ：37042417\n\n\napi : [document](./doc/使用文档.md)\ndemo: [document](./test/test.py)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYueChen-C%2Fpy-ios-device","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYueChen-C%2Fpy-ios-device","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYueChen-C%2Fpy-ios-device/lists"}