Coder Social home page Coder Social logo

yuechen-c / py-ios-device Goto Github PK

View Code? Open in Web Editor NEW
620.0 18.0 175.0 830 KB

IOS Professional Performance Testing Tool . You can get CPU, GPU, Memory , Lifecycle and other metrics from real iOS devices . IOS 专业性能测试工具

License: GNU General Public License v3.0

Python 100.00%
instruments ios python usbmuxd xcode performance-testing

py-ios-device's Introduction

py-ios-device

PyPI PyPI - Downloads

A python based Apple instruments protocol,you can get CPU, Memory and other metrics from real iOS devices

link: https://testerhome.com/topics/27159

中文文档

Java link: https://github.com/YueChen-C/java-ios-device)

pip :

pip install py-ios-device

python version: 3.7 +

Instruments:

  • Get system Memory and CPU data
  • Get application Memory and CPU data
  • Get FPS data FPS <= 60
  • Get FPS and Jank data FPS <= 120
  • Get network data
  • Set the device network status. eg: 2G, 3G ,100% Loss
  • Set the device behaves as though under a high thermal state
  • Monitoring app start、exit、background
  • Launch and Kill app
  • Run xctest. eg: WebDriverAgent
  • Dump core profile stack snapshot
  • Analyze the core profile data stream
  • Get Metal GPU Counters
  • Get App Launch Lifecycle

Other

  • Profiles & Device Management. eg: Install and uninstall Fiddler certificate
  • Get syslog
  • Get crash log
  • Get the captured packet traffic and forward it to wireshark
  • App install and uninstall
  • Get device battery
  • Set simulate-location options

Usage:

Support iOS 17 (Command line is not supported )

pip install pymobiledevice3
sudo python3 -m pymobiledevice3 remote start-tunnel
from ios_device.remote.remote_lockdown import RemoteLockdownClient
from ios_device.servers.Instrument import  InstrumentServer
from demo.instrument_demo.sysmontap import  sysmontap
host = 'fdb1:c2d3:d8cd::1'
port = 60574  
with RemoteLockdownClient((host, port)) as rsd:
    rpc = InstrumentServer(rsd).init()
    sysmontap(rpc)
    rpc.stop()

pip :

> pip install py-ios-device
> pyidevice --help
> pyidevice instruments --help

Get device list

$ pyidevice devices

Get device info

$ pyidevice  deviceinfo --udid=xxxxxx

Get System performance data

$ pyidevice instruments monitor 
Memory  >> {'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'}
Network >> {'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}
Disk    >> {'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}

$ pyidevice instruments monitor --filter = memory
Memory  >> {'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'}

Get application performance data

$ pyidevice instruments appmonitor  -b cn.rongcloud.im
{'Pid': 30897, 'Name': 'SealTalk', 'CPU': '0 %', 'Memory': '35.72 MiB', 'DiskReads': '24.12 MiB', 'DiskWrites': '2.28 MiB', 'Threads': 13}
{'Pid': 30897, 'Name': 'SealTalk', 'CPU': '3.4 %', 'Memory': '35.72 MiB', 'DiskReads': '24.12 MiB', 'DiskWrites': '2.30 MiB', 'Threads': 13}

Get custom application performance data

$ pyidevice instruments sysmontap --help
$ pyidevice instruments sysmontap  -b com.tencent.xin --proc_filter physFootprint,cpuUsage --processes --sort cpuUsage # 只显示 memVirtualSize,cpuUsage 参数的进程列表,且根据 cpuUsage 字段排序 

[('WeChat', {'cpuUsage': 0.03663705586691998, 'physFootprint': 2179284992, 'name': 'WeChat', 'pid': 99269})]
[('WeChat', {'cpuUsage': 0.036558268613227536, 'physFootprint': 2179284992, 'name': 'WeChat', 'pid': 99269})]

Get FPS data FPS <= 60

$ pyidevice instruments fps

{'currentTime': '2021-05-11 14:14:40.259059', 'fps': 52}
{'currentTime': '2021-05-11 14:14:40.259059', 'fps': 56}

Get FPS display data FPS <= 120

$ pyidevice instruments display
{'time': 1.393329, 'fps': 103.999274047912838, 'jank': 0, 'big_jank': 0, 'stutter': 0.0}

Get network data

$ pyidevice instruments networking
# Get all network data
"connection-update{\"RxPackets\": 2, \"RxBytes\": 148, \"TxPackets\": 2, \"TxBytes\": 263, \"RxDups\": 0, \"RxOOO\": 0, \"TxRetx\": 0, \"MinRTT\": 0.05046875, \"AvgRTT\": 0.05046875, \"ConnectionSerial\": 5}"
"connection-update{\"RxPackets\": 4, \"RxBytes\": 150, \"TxPackets\": 3, \"TxBytes\": 1431, \"RxDups\": 0, \"RxOOO\": 0, \"TxRetx\": 0, \"MinRTT\": 0.0539375, \"AvgRTT\": 0.0541875, \"ConnectionSerial\": 4}"

$ pyidevice instruments network_process -p com.tencent.xin 
# Get application network data
{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}}
{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}}

Set device status. iOS version > 12

$ pyidevice instruments condition get
# Get device configuration information

$ pyidevice instruments condition set -c SlowNetworkCondition -p SlowNetwork2GUrban
# Set the device network status. eg: 2G, 3G ,100% Loss

$ pyidevice instruments condition set -c ThermalCondition -p ThermalCritical
# Set the device behaves as though under a high thermal state

Listen to app notifications

$ pyidevice instruments notifications
[{'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}]
[{'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}]
[{'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}]

Dump core profile stack snapshot

$ pyidevice instruments stackshot --out stackshot.log

Analyze the core profile data stream

$ pyidevice instruments instruments core_profile --pid=1107
SealTalk(1107)             PERF_THD_CSwitch (0x25010014)                               DBG_PERF          PERF_DATA                     DBG_FUNC_NONE  
SealTalk(1107)             MACH_DISPATCH (0x1400080)                                   DBG_MACH          DBG_MACH_SCHED                DBG_FUNC_NONE  
SealTalk(1107)             DecrSet (0x1090004)                                         DBG_MACH          DBG_MACH_EXCP_DECI            DBG_FUNC_NONE  

Get Metal GPU Counters

$ pyidevice instruments gpu_counters
15.132907 ALU Limiter                                  93.77 
15.132907 Texture Sample Limiter                       39.62 
15.132907 Texture Write Limiter                        13.87 
15.132907 Buffer Read Limiter                          0.01  
15.132907 Buffer Write Limiter                         0     
15.132907 Threadgroup/Imageblock Load Limiter          17.16 
15.132907 Threadgroup/Imageblock Store Limiter         10.9  
15.132907 Fragment Input Interpolation Limiter         15.74 
15.132907 GPU Last Level Cache Limiter                 6.24  
15.132907 Vertex Occupancy                             0     
15.132907 Fragment Occupancy                           91.44 
15.132907 Compute Occupancy                            0     
15.132907 GPU Read Bandwidth                           2.65  
15.132907 GPU Write Bandwidth                          1.25  

Get App Launch Lifecycle

$ pyidevice instruments app_lifecycle -b cn.rongcloud.im
  31.20 ms   Initializing-System Interface Initialization (Dyld init)
  14.33 ms   Initializing-Static Runtime Initialization
  35.68 ms   Launching-UIKit Initialization
 810.46 us   Launching-UIKit Scene Creation
 100.64 ms   Launching-didFinishLaunchingWithOptions()
   2.91 ms   Launching-UIKit Scene Creation
  21.85 ms   Launching-Initial Frame Rendering
App Thread Process ID:6506076, Total Time:207.41 ms

Other

Profiles & Device Management

$ pyidevice profiles list
{
    "OrderedIdentifiers": [
        "aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a"
    ],
    "ProfileManifest": {
        "aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a": {
            "Description": "DO_NOT_TRUST_FiddlerRoot",
            "IsActive": true
        }
    },
    "ProfileMetadata": {
        "aaaff7e2b7df39eeb77bfbc0cd7a70ea99f3fd97a": {
            "PayloadDisplayName": "DO_NOT_TRUST_FiddlerRoot",
            "PayloadRemovalDisallowed": false,
            "PayloadUUID": "C8CE7BC1-F840-4616-B606-337F8CB6AE19",
            "PayloadVersion": 1
        }
    },
    "Status": "Acknowledged"
}

$ pyidevice profiles install  --path Downloads/charles-certificate.pem
## install charles certificate

$ pyidevice profiles remove --name fe7371d9ce36c541ac8dee5f51f3b490b2aa98dcd95699ee44717fd5233fe7a0a
## uninstall charles certificate

get syslog

$ pyidevice syslog
# --path
# --filter

get crash syslog

$ pyidevice crash list
['.', '..', 'com.apple.appstored', 'JetsamEvent-2021-05-12-112126.ips']

$ pyidevice crash export --name JetsamEvent-2021-05-12-112126.ips

$ pyidevice crash delete --name JetsamEvent-2021-05-12-112126.ips

$ pyidevice crash shell

apps

$ pyidevice apps list

$ pyidevice apps install --ipa_path

$ pyidevice apps uninstall --bundle_id 

$ pyidevice apps launch --bundle_id

$ pyidevice apps kill --bundle_id

$ pyidevice apps shell 

packet capture

$ pyidevice pcapd ./test/test.pacp

$ pyidevice pcapd - | "/Applications/Wireshark.app/Contents/MacOS/Wireshark" -k -i -
# mac forword Wireshark

$ pyidevice pcapd - | "D:\Program Files\Wireshark\Wireshark.exe" -k -i -
# win forword Wireshark

device battery

$ pyidevice battery
# [Battery] time=1622777708, current=-71, voltage=4330, power=-307.43, temperature=3279

enable developer mode

$ pyidevice enable_developer_mode

using python

from ios_device.cli.base import InstrumentsBase
from ios_device.util.dtx_msg import DTXMessage

with InstrumentsBase() as rpc:
    def sysmontap_callback(res: DTXMessage):
        print(res.selector, res.auxiliaries)

    rpc.process_attributes = ['name', 'pid']
    rpc.system_attributes = rpc.device_info.sysmonSystemAttributes()
    rpc.sysmontap(sysmontap_callback)

QQ :37042417

api : document demo: document

py-ios-device's People

Contributors

cai-wq avatar dependabot[bot] avatar itaybre avatar jnhyperion avatar kazucocoa avatar neverdieone avatar sanidhya-saraswat avatar tomriddly avatar vinjn avatar yuechen-c avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

py-ios-device's Issues

pyidevice instruments stackshot

请问instruments stackshot 命令是能拿到运行的堆栈信息吗?执行之后貌似卡住了,没看到输出.log文件是怎么回事

2021-07-13 17:20:03 [INFO] [LockDown] lockdown.py[line:68] Connecting Device 7978366093cb268c5521e7f07aa511e8aaf5938e
2021-07-13 17:20:03 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ...
2021-07-13 17:20:03 [INFO] [Instrument] dvt.py[line:148] set com.apple.instruments.server.services.coreprofilesessiontap callback ...

apps launch 失败

image

apps kill 表现正常,但launch报错,手机版本14.4.2 iPhoneXs,是否是适配问题。

Question regarding network conditions profiles

Hello,

I wonder if it's possible to customize or create new network condition profiles, or if we are limited to the existed ones only (for example SlowNetworkLTE) ?

Thank you very much

iOS 14.3 and up

I am having issues running this tool with iOS 14.3
Tried extracting the DeveloperDiskImage.dmg from Xcode.app but still fails

Is iOS 14.3 supported?
Here is the output (which doesn't make much sense to me since I can call the service from libimobiledevice):

2021-03-12 09:44:18,149 - lockdown.py[line:252] - INFO: ProductVersion: 14.3
2021-03-12 09:44:18,239 - image_mounter.py[line:75] - INFO: Pushing DeveloperDiskImage.dmg
2021-03-12 09:44:18,942 - image_mounter.py[line:88] - INFO: Push complete
2021-03-12 09:44:19,026 - lockdown.py[line:308] - INFO: DeveloperImage mounted successfully
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/ios_device/util/lockdown.py", line 312, in start_service
    return self._start_service(name, escrow_bag)
  File "/usr/local/lib/python3.9/site-packages/ios_device/util/lockdown.py", line 217, in _start_service
    raise StartServiceError(f'Unable to start service={name!r} - {error}')
ios_device.util.exceptions.StartServiceError: Unable to start service='com.apple.instruments.remoteserver.DVTSecureSocketProxy' - InvalidService

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/*****/*****/py-ios-device/demo/instrument_demo/sysmontap.py", line 52, in <module>
    rpc = InstrumentServer().init()
  File "/usr/local/lib/python3.9/site-packages/ios_device/servers/Instrument.py", line 30, in init
    raise E
  File "/usr/local/lib/python3.9/site-packages/ios_device/servers/Instrument.py", line 24, in init
    self._cli = self.lockdown.start_service("com.apple.instruments.remoteserver.DVTSecureSocketProxy")
  File "/usr/local/lib/python3.9/site-packages/ios_device/util/lockdown.py", line 316, in start_service
    return self._start_service(name, escrow_bag)
  File "/usr/local/lib/python3.9/site-packages/ios_device/util/lockdown.py", line 217, in _start_service
    raise StartServiceError(f'Unable to start service={name!r} - {error}')
ios_device.util.exceptions.StartServiceError: Unable to start service='com.apple.instruments.remoteserver.DVTSecureSocketProxy' - InvalidService

stop_get_system卡住

system = start_get_system(callback=lambda a: pprint(a))
time.sleep(10)
stop_get_system(system)

程序执行到stop_get_system会一直卡住,不会结束。

Attribute details

Hi

Can you please

describe these attribute or reference document if any

procAttrs': ['memVirtualSize', 'cpuUsage', 'procStatus', 'appSleep', 'uid', 'vmPageIns', 'memRShrd',
'ctxSwitch', 'memCompressed', 'intWakeups', 'cpuTotalSystem', 'responsiblePID', 'physFootprint',
'cpuTotalUser', 'sysCallsUnix', 'memResidentSize', 'sysCallsMach', 'memPurgeable',
'diskBytesRead', 'machPortCount', '__suddenTerm', '__arch', 'memRPrvt', 'msgSent', 'ppid',
'threadCount', 'memAnon', 'diskBytesWritten', 'pgid', 'faults', 'msgRecv', '__restricted', 'pid',
'__sandbox'], # 输出所有进程信息字段,字段顺序与自定义相同(全量自字段,按需使用)
'sysAttrs': ['diskWriteOps', 'diskBytesRead', 'diskBytesWritten', 'threadCount', 'vmCompressorPageCount',
'vmExtPageCount', 'vmFreeCount', 'vmIntPageCount', 'vmPurgeableCount', 'netPacketsIn',
'vmWireCount', 'netBytesIn', 'netPacketsOut', 'diskReadOps', 'vmUsedCount', '__vmSwapUsage',
'netBytesOut'],

Question: App in compiled using DEBUG mode

Hello there! We are writing a routine to get Startup Time calculation using TimeProfiler over instruments.
It will be nice to create a PR to this repo to add those capabilities.

Is there any way to check in advance if a certain APP is in debug mode ?
This will be the pre-requisite to make this routine work properly.

Thanks !

如何发现入参的

请教一下,我用ida反汇编库文件发现com.apple.instruments.server.services.sysmontap服务对应的DTTapService类里面的setConfig:方法并没有太多的源码可供参考,请问是如何发现setConfig:方法的入参的

Windows Support

I have managed to run this perfectly on MacOS, but I am having issues running it on Windows.
Every device I try to use fails when trying to connect to instruments service:

2021-04-05 00:52:09,671 - usbmux.py[line:275] - DEBUG: 发送 Plist: {'DeviceID': 11, 'PortNumber': 53958, 'ClientVersionString': 'apptim', 'MessageType': 'Connect', 'ProgName': 'tcprelay'}
2021-04-05 00:52:09,671 - usbmux.py[line:277] - DEBUG: 发送 Plist byte: b'<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n\t<key>ClientVersionString</key>\n\t<string>apptim</string>\n\t<key>DeviceID</key>\n\t<integer>11</integer>\n\t<key>MessageType</key>\n\t<string>Connect</string>\n\t<key>PortNumber</key>\n\t<integer>53958</integer>\n\t<key>ProgName</key>\n\t<string>tcprelay</string>\n</dict>\n</plist>\n'
2021-04-05 00:52:09,671 - usbmux.py[line:282] - DEBUG: 接收 Plist byte: b'<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n\t<key>MessageType</key>\n\t<string>Result</string>\n\t<key>Number</key>\n\t<integer>3</integer>\n</dict>\n</plist>\n'
2021-04-05 00:52:09,671 - usbmux.py[line:286] - DEBUG: 接收 Plist: {'MessageType': 'Result', 'Number': 3}
Traceback (most recent call last):
  File "C:\Users\***\ios_device\servers\Instrument.py", line 26, in init
    self._cli = self.lockdown.start_service("com.apple.instruments.remoteserver")
  File "C:\Users\***\ios_device\util\lockdown.py", line 312, in start_service
    return self._start_service(name, escrow_bag)
  File "C:\Users\***\ios_device\util\lockdown.py", line 219, in _start_service
    plist_service = PlistService(
  File "C:\Users\***\ios_device\util\plist_service.py", line 34, in __init__
    self.sock = self.device.connect(port)  # type: socket
  File "C:\Users\***\ios_device\util\usbmux.py", line 37, in connect
    return connector.connect(self, port)
  File "C:\Users\***\ios_device\util\usbmux.py", line 114, in connect
    raise MuxError('Connect failed: error %d' % ret)
ios_device.util.exceptions.MuxError: Connect failed: error 3

The code I run to get this is:

device = PyiOSDevice(UDID)
print(device.get_capabilities())
device.stop()

The environment is Windows 10, with iTunes installed and libimobiledevice running fine.
Any idea what I am doing wrong? (I had to increase timeouts to be able to find the device)

Lost connection to DTServiceHub

when we are running sysmontap.py

after running this we are losing the connection of the ios device

and in log getting this error

2021-08-03 08:18:01.355 xcodebuild[50493:2023541] [MT] IDETestOperationsObserverDebug: 217.413 elapsed -- Testing started completed.
2021-08-03 08:18:01.355 xcodebuild[50493:2023541] [MT] IDETestOperationsObserverDebug: 0.000 sec, +0.000 sec -- start
2021-08-03 08:18:01.355 xcodebuild[50493:2023541] [MT] IDETestOperationsObserverDebug: 217.413 sec, +217.413 sec -- end
2021-08-03 08:18:01.356 xcodebuild[50493:2023541] Error Domain=com.apple.platform.iphoneos Code=-13 "Lost connection to DTServiceHub" UserInfo={NSLocalizedDescription=Lost connection to DTServiceHub}

wanted to know is this sysmontap.py trying to restart service or what.

在获取网络数据过程中报 ssl.SSLZeroReturnError: TLS/SSL connection has been closed (EOF) (_ssl.c:1091)

[2021-09-11 15:46:14,376] ERROR:IOSPerf.py at line 272: TLS/SSL connection has been closed (EOF) (_ssl.c:1091)
Traceback (most recent call last):
File "G:\code\perfcat\common\IOSPerf.py", line 251, in get_network_rx_tx
data1 = py_ios_device.get_netstat(pid=self.pid, device_id=self.device_id)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 659, in get_netstat
_rpc_channel = init(device_id)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 204, in init
rpc_channel.init()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\Instrument.py", line 26, in init
self._cli = self.lockdown.start_service("com.apple.instruments.remoteserver.DVTSecureSocketProxy")
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\lockdown.py", line 349, in start_service
return self._start_service(name, escrow_bag)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\lockdown.py", line 262, in _start_service
network=self.network)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\plist_service.py", line 37, in init
self.ssl_start(ssl_file, ssl_file)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\plist_service.py", line 40, in ssl_start
self.sock = ssl.wrap_socket(self.sock, keyfile, certfile)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1238, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 423, in wrap_socket
session=session
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 870, in _create
self.do_handshake()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1139, in do_handshake
self._sslobj.do_handshake()
ssl.SSLZeroReturnError: TLS/SSL connection has been closed (EOF) (_ssl.c:1091)

Unable to start service='com.apple.instruments.remoteserver.DVTSecureSocketProxy' - InvalidService

Hello @YueChen-C ,

When I launch the command "pyidevice instruments monitor", I get the following error, could you please give some help?
My environment : Windows 10 / iPhone 12 / iOS 15.0.2

2021-11-24 15:44:33 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008101-XXXXX
2021-11-24 15:44:33 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ...
2021-11-24 15:44:33 [INFO] [LockDown] lockdown.py[line:377] save path :C:\Users\xxxx.cache\pymobiledevice\00008101-XXXXX.pem
2021-11-24 15:44:33 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008101-XXXXX
_2021-11-24 15:44:33 [INFO] [LockDown] lockdown.py[line:294] ProductVersion: 15.0.2
Traceback (most recent call last):
File "C:\Python39\lib\site-packages\ios_device\util\lockdown.py", line 342, in start_service
return self._start_service(name, escrow_bag)
File "C:\Python39\lib\site-packages\ios_device\util\lockdown.py", line 258, in start_service
raise StartServiceError(f'Unable to start service={name!r} - {error}')
ios_device.util.exceptions.StartServiceError: Unable to start service='com.apple.instruments.remoteserver.DVTSecureSocketProxy' - InvalidService

哪里可以找到 instruments 的消息手册?

我看到各个demo里面会发送各种 instruments 消息来获取相应的数据。例如:rpc.call(channel, "startSamplingForPIDs:", {pid}).parsed
但我找不到instruments都支持哪些消息,还有这些调用这些消息时的传参和返回值的描述。请问有相关的手册吗?

iOS11 start_get_fps callback 拿不到帧率

没有code == 830472984的情况

{'BasebandCertId': 3554301762, 'BasebandKeyHashInformation': {'AKeyStatus': 2, 'SKeyHash': b'\xec\xc4\x04S+\xf3\x1b\x88#\x8d\x97;*\xc3M\x01T\xd2\xf2\x0e', 'SKeyStatus': 0}, 'BasebandSerialNumber': b'+\x05\x01\xe8', 'BasebandVersion': '8.55.00', 'BoardId': 0, 'BuildVersion': '15F79', 'ChipID': 35168, 'DeviceClass': 'iPhone', 'DeviceColor': '#e1e4e3', 'DeviceName': '晓芬的iPhone5S', 'DieID': 510290786788, 'HardwareModel': 'N51AP', 'HasSiDP': True, 'PartitionType': 'GUID_partition_scheme', 'ProductName': 'iPhone OS', 'ProductType': 'iPhone6,1', 'ProductVersion': '11.4', 'ProductionSOC': True, 'ProtocolVersion': '2', 'TelephonyCapability': True, 'UniqueChipID': 510290786788, 'UniqueDeviceID': '23681c8c33ef1adaf0eda88f7c585491eb8d4df7', 'WiFiAddress': '84:8e:0c:23:88:4b'}

How to interpret memory result

Hi @YueChen-C

could you please explain the meaning of each value after following command : _$ pyidevice instruments monitor --filter 'memory'

I'm a little bit lost because when I do the test on an iphone, without any launched application and just after a reboot I've got a free memory very low, I don't understand :

Memory >> {'App Memory': '975.77 MiB', 'Free Memory': '69.72 MiB', 'Cached Files': '1.71 GiB', 'Compressed': '0.00 Bytes', 'Memory Used': '1.87 GiB', 'Wired Memory': '554.39 MiB', 'Swap Used': '0.00 Bytes'}

Thanks a lot

getting error while running launchapp

sudo python3 launchapp.py d2ff3799d220fdsfds1f98ec3bdcb1a5b6e2e08 net.openvpn.connect.app
Number of arguments: 3 arguments.
d2ff3799d220fdsfds1f98ec3bdcb1a5b6e2e08
Argument List: ['launchapp.py', 'd2ff3799d220fdsfds1f98ec3bdcb1a5b6e2e08', 'net.openvpn.connect.app']
Traceback (most recent call last):
File "/Users/radmin/py-ios-devicev1/demo/instrument_demo/launchapp.py", line 5, in
from ios_device.servers.Instrument import InstrumentServer
File "/Users/radmin/py-ios-devicev1/ios_device/servers/Instrument.py", line 7, in
from ..util.lockdown import LockdownClient
File "/Users/radmin/py-ios-devicev1/ios_device/util/lockdown.py", line 24, in
from .utils import DictAttrProperty, cached_property
File "/Users/radmin/py-ios-devicev1/ios_device/util/utils.py", line 4, in
from ios_device.util.service_info import MyServiceInfo
File "/Users/radmin/py-ios-devicev1/ios_device/util/service_info.py", line 8, in
from zeroconf import ServiceInfo, _TYPE_A, _TYPE_AAAA, DNSAddress, _TYPE_SRV, DNSService, _CLASS_IN,
ImportError: cannot import name '_TYPE_A' from 'zeroconf' (/usr/local/lib/python3.9/site-packages/zeroconf/init.py)
Mac-book:instrument_demo radmin$

getting this while running launchapp.py

I am trying to run from the source

modified in such a way that can read udid and app id from cmd line

if name == 'main':
rpc = rpc = InstrumentServer(udid=sys.argv[1]).init()
_launch_app(rpc, sys.argv[2])
rpc.stop()

您好咨询个问题,关于获取应用内存

您好 我想在获取start_get_graphics_fps中fps的同时传一个包名获取这个应用的内存占用,看了下demo中好像没有查看内存相关的,源码又捋不太清楚,能帮忙提供下思路么谢谢

访问 plist 报错Permission denied

2021-05-27 13:37:47 [INFO] [USBMux] usbmux.py[line:139] Connecting Device serial:00008030-00015C483630802E, ConnectionType:USB
Traceback (most recent call last):
File "/Library/Python/3.8/site-packages/ios_device/util/lockdown.py", line 95, in _get_pair_record
if itunes_lockdown_path.exists():
File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/pathlib.py", line 1383, in exists
self.stat()
File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/pathlib.py", line 1189, in stat
return self._accessor.stat(self)
PermissionError: [Errno 13] Permission denied: '/var/db/lockdown/00008030-00015C483630802E.plist'

Not able to run get data when run sysmontap.py.

When i run sysmontap.py with command sudo python3 sysmontap.py i am getting below error.

2021-04-16 00:27:24,464 - lockdown.py[line:94] - WARNING: [Errno 1] Operation not permitted: '/var/db/lockdown/cd872c4dcfb573af88d218267581aa05b580d046.plist'
not supported: {'$version': 100000, '$archiver': 'NSKeyedArchiver', '$top': {'root': uid(1)}, '$objects': ['$null', '_channelCanceled:']}
Traceback (most recent call last):
File "/Users/Rahul/Downloads/py-ios-device-main/demo/instrument_demo/sysmontap.py", line 53, in
addresses, port, psk = rpc.start_wireless()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ios_device/servers/Instrument.py", line 60, in start_wireless
print("remove", self.call(channel, "removeDaemonFromService").parsed)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ios_device/servers/DTXSever.py", line 352, in call
ret = self._call(True, channel_id, selector, *auxiliaries)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ios_device/servers/DTXSever.py", line 368, in _call
raise RuntimeWarning("rpc service died")
RuntimeWarning: rpc service died

Screenshot 2021-04-16 at 12 35 23 AM

Please check @YueChen-C.

运行 pyidevice instruments runningProcesses --format=json 命令失败

你好,我在运行 pyidevice instruments runningProcesses --format=json 命令后,有报错信息
运行日志:
➜ airTest pyidevice instruments runningProcesses --format=json
2021-08-13 11:11:15 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008020-000E744A11A2xxxx
2021-08-13 11:11:15 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ...
2021-08-13 11:11:15 [INFO] [LockDown] lockdown.py[line:384] save path :/Users/guanyu/.cache/pymobiledevice/00008020-000E744A11A2xxxx.pem
2021-08-13 11:11:15 [WARNING] [Instrument] dvt.py[line:245] socket connection close
Traceback (most recent call last):
File "/usr/local/bin/pyidevice", line 8, in
sys.exit(cli())
File "/usr/local/lib/python3.9/site-packages/ios_device/main.py", line 15, in cli
cli_commands()
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1137, in call
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1062, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1668, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1668, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 763, in invoke
return __callback(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ios_device/cli/instruments.py", line 43, in cmd_running_processes
processes = rpc.device_info.runningProcesses()
File "/usr/local/lib/python3.9/site-packages/ios_device/cli/base.py", line 34, in runningProcesses
parsed = self.rpc.call(InstrumentsService.DeviceInfo, "runningProcesses").selector
AttributeError: 'bool' object has no attribute 'call'

Installation failing in MacOS Bigsur

Following is the error while I am installing, Please let me know what am I missing

Building wheel for cryptography (PEP 517) ... error
ERROR: Command errored out with exit status 1:
command: /Applications/Xcode.app/Contents/Developer/usr/bin/python3 /Users/lab_macmini/Library/Python/3.8/lib/python/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /var/folders/1d/0hkjdv0s1zl4pxhj1_rdm22c0000gn/T/tmp7vk82dsn
cwd: /private/var/folders/1d/0hkjdv0s1zl4pxhj1_rdm22c0000gn/T/pip-install-zl2zlad4/cryptography_5ca1cc15e04e4036b7fbcfb709da9a23
Complete output (147 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.macosx-10.14.6-arm64-3.8
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography
copying src/cryptography/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography
copying src/cryptography/utils.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography
copying src/cryptography/about.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography
copying src/cryptography/exceptions.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography
copying src/cryptography/fernet.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat
copying src/cryptography/hazmat/_der.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat
copying src/cryptography/hazmat/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat
copying src/cryptography/hazmat/_oid.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/oid.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/ocsp.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/general_name.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/extensions.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/name.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/base.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
copying src/cryptography/x509/certificate_transparency.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/x509
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends
copying src/cryptography/hazmat/backends/interfaces.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends
copying src/cryptography/hazmat/backends/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/cmac.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/poly1305.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/constant_time.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/keywrap.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/hmac.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/hashes.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/padding.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings
copying src/cryptography/hazmat/bindings/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/x448.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/backend.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ec.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ciphers.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ocsp.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/x509.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/aead.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/encode_asn1.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/rsa.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/dh.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/cmac.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/utils.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/poly1305.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ed25519.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/dsa.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/decode_asn1.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/hmac.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ed448.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/x25519.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/hashes.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/backends/openssl
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/scrypt.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/pbkdf2.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/hkdf.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/x963kdf.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/kbkdf.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/concatkdf.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/kdf
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/totp.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/hotp.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/utils.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/twofactor
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
copying src/cryptography/hazmat/primitives/serialization/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
copying src/cryptography/hazmat/primitives/serialization/pkcs12.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
copying src/cryptography/hazmat/primitives/serialization/pkcs7.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
copying src/cryptography/hazmat/primitives/serialization/ssh.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
copying src/cryptography/hazmat/primitives/serialization/base.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/serialization
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/algorithms.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/aead.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/modes.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/base.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/ciphers
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/x448.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/ec.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/rsa.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/dh.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/utils.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/ed25519.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/dsa.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/ed448.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/x25519.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/padding.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/primitives/asymmetric
creating build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/init.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/_conditional.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/binding.py -> build/lib.macosx-10.14.6-arm64-3.8/cryptography/hazmat/bindings/openssl
running egg_info
writing src/cryptography.egg-info/PKG-INFO
writing dependency_links to src/cryptography.egg-info/dependency_links.txt
writing requirements to src/cryptography.egg-info/requires.txt
writing top-level names to src/cryptography.egg-info/top_level.txt
reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'docs/_build'
warning: no previously-included files found matching 'vectors'
warning: no previously-included files matching '' found under directory 'vectors'
warning: no previously-included files matching '
' found under directory '.github'
warning: no previously-included files found matching 'release.py'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching 'codecov.yml'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'dev-requirements.txt'
warning: no previously-included files found matching 'rtd-requirements.txt'
warning: no previously-included files found matching 'tox.ini'
warning: no previously-included files matching '' found under directory '.zuul.d'
warning: no previously-included files matching '
' found under directory '.zuul.playbooks'
writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
running build_ext
generating cffi module 'build/temp.macosx-10.14.6-arm64-3.8/_padding.c'
creating build/temp.macosx-10.14.6-arm64-3.8
generating cffi module 'build/temp.macosx-10.14.6-arm64-3.8/_openssl.c'
building '_openssl' extension
creating build/temp.macosx-10.14.6-arm64-3.8/build
creating build/temp.macosx-10.14.6-arm64-3.8/build/temp.macosx-10.14.6-arm64-3.8
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -I/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -c build/temp.macosx-10.14.6-arm64-3.8/_openssl.c -o build/temp.macosx-10.14.6-arm64-3.8/build/temp.macosx-10.14.6-arm64-3.8/_openssl.o -Wconversion -Wno-error=sign-conversion
build/temp.macosx-10.14.6-arm64-3.8/_openssl.c:575:10: fatal error: 'openssl/opensslv.h' file not found
#include <openssl/opensslv.h>
^~~~~~~~~~~~~~~~~~~~
1 error generated.

  =============================DEBUG ASSISTANCE=============================
  If you are seeing a compilation error please try the following steps to
  successfully install cryptography:
  1) Upgrade to the latest pip and try again. This will fix errors for most
     users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
  2) Read https://cryptography.io/en/latest/installation.html for specific
     instructions for your platform.
  3) Check our frequently asked questions for more information:
     https://cryptography.io/en/latest/faq.html
  =============================DEBUG ASSISTANCE=============================

error: command 'clang' failed with exit status 1

ERROR: Failed building wheel for cryptography
Successfully built cffi
Failed to build cryptography
ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly

Expose arguments and env to `launch_app`

Hey folks, looks like the rpc call for launching an app hard-codes the args and env parameters. Can these be exposed? Happy to put up a PR. Code in question:

    pid = _rpc_channel.call(channel_name,
                            "launchSuspendedProcessWithDevicePath:bundleIdentifier:environment:arguments:options:", "",
                            bundle_id, {}, [], {"StartSuspendedKey": 0, "KillExisting": 1}).selector

获取FPS 时解析失败

File "/Users/w/work/DoctoriOS/ios_device/servers/dvt.py", line 234, in _receiver
self._channel_callbacks(2 ** 32 - dtx.channel_code)
File "/Users/w/work/DoctoriOS/ios_device/py_ios_device.py", line 499, in _callback
for args in Kperf.to_dict(res.selector.data):
File "/Users/w/work/DoctoriOS/ios_device/util/kperf_data.py", line 969, in to_dict
buf_io = self.check_header(kd_buf)
File "/Users/w/work/DoctoriOS/ios_device/util/kperf_data.py", line 964, in check_header

raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path)

construct.core.StreamError: Error in path (parsing) -> threadmap -> process
stream read less than specified amount, expected 1, found 0

coreprofilesessiontap对iphone5s不兼容

按照demo中的coreprofilesessiontap在iphone5s(ios10.1)上进行测试时,会找不到830472984这个code。
另外,想请教一下,像kperf_data这段函数的解析方式以及对应的code选取是如何分析得到的呢?

ValueError: math domain error

你好,我在使用py-ios-device执行pyidevice instruments monitor命令时,出现如下的错误提示:

2021-10-09 11:08:04 [ERROR] [Instrument] dvt.py[line:247] math domain error
Traceback (most recent call last):
  File "c:\python36\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver
    self._channel_callbacks[(2 ** 32 - dtx.channel_code)](dtx)
  File "c:\python36\lib\site-packages\ios_device\cli\instruments.py", line 257, in on_callback_message
    print("Memory  >>", Memory.decode(data))
  File "c:\python36\lib\site-packages\ios_device\util\utils.py", line 211, in decode
    Swap_Used = convertBytes(system.get("__vmSwapUsage"))
  File "c:\python36\lib\site-packages\ios_device\util\utils.py", line 122, in convertBytes
    math.log(_bytes, 1024)  # 求对数(对数:若 a**b = N 则 b 叫做以 a 为底 N 的对数)
ValueError: math domain error

设备是iPhone 12 Pro, 系统版本iOS 14.7.1
不太清楚为何会出现这种问题,还麻烦帮忙看看,谢谢。

_list.append(struct.unpack('<QLLQQQQLLQ', messages[p_record:p_record + 64]))

File "/usr/local/lib/python3.7/site-packages/ios_device/servers/DTXSever.py", line 429, in _receiver
self._channel_callbacks2 ** 32 - dtx.channel_code
File "/usr/local/lib/python3.7/site-packages/ios_device/py_ios_device.py", line 514, in _callback
for args in kperf_data(res.raw.get_selector()):
File "/usr/local/lib/python3.7/site-packages/ios_device/util/utils.py", line 115, in kperf_data
_list.append(struct.unpack('<QLLQQQQLLQ', messages[p_record:p_record + 64]))

start_get_fps 采集时报错

2021-09-06 19:33:10 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008020-001C05260ED8002E
2021-09-06 19:33:10 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ...
2021-09-06 19:33:10 [INFO] [LockDown] lockdown.py[line:384] save path :/Users/huya/.cache/pymobiledevice/00008020-001C05260ED8002E.pem
2021-09-06 19:33:10 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ...
2021-09-06 19:33:10 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> threadmap -> process
stream read less than specified amount, expected 1, found 0
Traceback (most recent call last):
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/ios_device/servers/dvt.py", line 234, in _receiver
self._channel_callbacks(2 ** 32 - dtx.channel_code)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/ios_device/py_ios_device.py", line 499, in _callback
for args in Kperf.to_dict(res.selector.data):
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/ios_device/util/kperf_data.py", line 969, in to_dict
buf_io = self.check_header(kd_buf)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/ios_device/util/kperf_data.py", line 964, in check_header
parsed_header = kd_header_v2.parse_stream(buf_io)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 300, in parse_stream
return self._parsereport(stream, context, "(parsing)")
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 2221, in _parse
e = self.subcon._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 4496, in _parse
return self.subcon._parsereport(io.BytesIO(data), context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 697, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 4567, in _parse
b = stream_read(stream, unit, path)
File "/Users/huya/code/perfcat/venv/lib/python3.7/site-packages/construct/core.py", line 92, in stream_read
raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path)
construct.core.StreamError: Error in path (parsing) -> threadmap -> process
stream read less than specified amount, expected 1, found 0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.