From 58d124919bea6ef0317cd133dfb136dc64cf4ddf Mon Sep 17 00:00:00 2001 From: milk <53408947@qq.com> Date: Thu, 13 Nov 2025 19:28:57 +0800 Subject: [PATCH] =?UTF-8?q?iproxy=E7=9A=84=E5=B0=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Module/DeviceInfo.py | 69 +++++++++++++++++- Module/__pycache__/DeviceInfo.cpython-312.pyc | Bin 42898 -> 46348 bytes .../__pycache__/ControlUtils.cpython-312.pyc | Bin 14073 -> 14344 bytes .../__pycache__/ScriptManager.cpython-312.pyc | Bin 70338 -> 71013 bytes 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/Module/DeviceInfo.py b/Module/DeviceInfo.py index d053f9f..c1a1f6c 100644 --- a/Module/DeviceInfo.py +++ b/Module/DeviceInfo.py @@ -8,6 +8,7 @@ """ import datetime import os +import sys import time import threading import subprocess @@ -22,7 +23,6 @@ import tidevice import wda from tidevice import Usbmux, ConnectionType from tidevice._device import BaseDevice - from Entity.DeviceModel import DeviceModel from Entity.Variables import WdaAppBundleId, wdaScreenPort, wdaFunctionPort from Module.FlaskSubprocessManager import FlaskSubprocessManager @@ -487,6 +487,60 @@ class DeviceInfo: print(f"[WDA] /status@{local_port} 等待超时 {udid}") return False + def _device_online_via_tidevice(self, udid: str) -> bool: + try: + from tidevice import Usbmux, ConnectionType + devs = Usbmux().device_list() + return any(d.udid == udid and d.conn_type == ConnectionType.USB for d in devs) + except Exception: + # 容错:tidevice 异常时,假定在线,避免误判;后续命令会再校验 + return True + + def _pair_if_needed_for_ios17(self, udid: str, timeout_sec: float | None = None) -> bool: + """ + iOS 17+ 配对:已信任直接 True;否则触发配对并无限等待(设备离线则 False) + 使用 “python -m pymobiledevice3 lockdown pair -u ” 做配对,规避 API 版本差异。 + timeout_sec=None 表示无限等待;若传入数字则为最多等待秒数。 + """ + # 已信任直接过 + if self._trusted(udid): + return True + + print(f"[Pair][CLI] iOS17+ 需要配对,等待手机上点击“信任”… {udid}") + last_log = 0.0 + + # 轮询直到配对成功/超时/设备离线 + while True: + # 1) 设备在线性检查(防止卡等已拔掉的设备) + if not self._device_online_via_tidevice(udid): + print(f"[Pair][CLI] 设备已离线,停止等待 {udid}") + return False + + # 2) 触发一次配对尝试 + cmd = [sys.executable, "-m", "pymobiledevice3", "lockdown", "pair", "-u", udid] + try: + # 不打印子进程输出,保持你现有日志风格;需要可改为 PIPE 查看 + res = subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if res.returncode == 0: + print(f"[Pair][CLI] 配对成功 {udid}") + return True + except Exception as e: + print(f"[Pair][CLI] 调用失败:{e}") + + # 3) 日志节流 + 可选超时 + now = time.monotonic() + if now - last_log >= 10.0: + print(f"[Pair][CLI] 仍在等待用户在手机上点“信任”… {udid}") + last_log = now + + if timeout_sec is not None: + timeout_sec -= 2.0 + if timeout_sec <= 0: + print(f"[Pair][CLI] 等待配对超时(达到设定时长){udid}") + return False + + time.sleep(2.0) + # ---------------- 原 _add_device 实现:整体改名为 _add_device_impl ---------------- def _add_device_impl(self, udid: str): print(f"[Add] 开始新增设备 {udid}") @@ -514,8 +568,17 @@ class DeviceInfo: # 直接用“正式端口”探测 /status,避免再启一次临时 iproxy if not self._wait_wda_ready_on_port(udid, local_port=port, total_timeout_sec=3.0): # 如果还没起来,按你原逻辑拉起 WDA 再等 - if major > 17: - print("进入iOS17设备的分支") + if major >= 17: + print("进入 iOS17+ 设备的分支") + if not self._pair_if_needed_for_ios17(udid, timeout_sec=None): # 无限等;传秒数则有限时 + print(f"[WDA] iOS17+ 配对失败或设备离线,放弃新增 {udid}") + try: + self._kill(proc) + except Exception: + pass + self._release_port(port) + return + try: IOSActivator().activate(udid) print("wda启动完成") diff --git a/Module/__pycache__/DeviceInfo.cpython-312.pyc b/Module/__pycache__/DeviceInfo.cpython-312.pyc index cdcfe14aefbb61afc2ff028be4dcb9bd711b2f8c..cc33d61f55eb4b5855acef1f64ae68306afdf1e4 100644 GIT binary patch delta 10809 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 delta 7681 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 SMnN}LMx6;}Ul~9&*nR*z1aaj6 diff --git a/script/__pycache__/ScriptManager.cpython-312.pyc b/script/__pycache__/ScriptManager.cpython-312.pyc index 04de84f9ede3a1d597f48cf5e89c0882af7b96e0..8d9676a039cc03e879473fc63564dadac37c31c3 100644 GIT binary patch delta 3395 zcmbtWd2~}%8h_t=$xEB0SxCB?fdK^TQsz-X5CIjPLD5%Fw6($vo@q+!5oodF0^>OMwiMKJ=C66@v2mMd&=H`6>#+@SCVCm?Ne|2e7bE%#G~=uE!LKQ{p~^ zBK#%J0*gdT{An%pi-xpT;E#~y!clyG`V(LfXPei1z<%-U96i7hv14vN2hA9liQEzg zgH`QDtf>zd?_~OL@CxqUog&U#vIF2E#yo4n!KDds07IWPVecL-F3Oq(YjJPZBDG!9 z#8~6(+9sw&h6xKMD&noI16nz(ToH=_%e0Dw?H;u{haAoICS16T_e?CAz%UImA$i!? zLW>sbmo3Fci&ng`tN>s#F0%L&1dKsPwhmWXl#q-a&OrRg63NNy^~AR?zV?_71GA0r z048L|!xS{{jUxC|wgnI6Ov1DU!8k8B5m)8RfK;5Hn~6g?7I=tA3t=iY=Pu-?*}d_6 zg8?Bg%7pSRRSrs=Wb9B4A>Su5wzv~nY}z&O0{{3-7wnN?o&E2f>X@+BFhB{?f!3+1exsRcV&6(v(h zQ*c6(Ls{&JP!zxmYy(#wN)5|Bte&qbF}~1SFCTT8!7QJ~Ftse5H>l`*D|^rJT@$#V zQ~^pHoMgn9H#M^QG}%a;n%~hq@s~o=eIlBRZfdm-jaAnw8!=f+nzzV=D~eyi!KPrn z{&#r}yU zvef=AOIoNv9|!4i(rmxoCzUYXp~mSNZ*RGSglYA)`nJmN7n2rH_uK47wpJ^%`u%!q zsSAbwy_^jgTV_nVSCd+WU19V2Rr>^tW(iDn{D?c!RDq+~ZNqJWb!FoMJx6uGjJ68x zj{2nPaMULUu_PRGng6(ZOaGU_(cWSOKN_od&~FP-!_+WQW3i+>gh{XeQi(l zHXiSLYTLDKZ}pxy=00_poQP!M42c#GmanXfA;P*b1l(_Lb-(;HVYzpnCfL{hqL53} zLJ1{!6Bs#eeP^5c_Sg5lvAyqgda#5zGSjc7oKVX7^VZ&%4!O^u+wsf@pLiQNp8fmV z`&$mIqtw2$&$*jkbRRs{cN`Nca`D1yEv&~EDmL&Rk=ZCM`c}r_?8+3Gmb~JQ%9Sx0 zr0;D0ary@DLi8SG%R*lxE1PCe+030odt zn%q_)CC`**=1a@}Amy)>!V9J1%>xXx1=86eh9N6@)IOc+unu*YG%i(|MpDmmsh3?< z>vzv}%-vhHYpzQj`UAfRyaERqiUU^c+;WDyY6uelRQHxF%B*4xe$LouW1o*3N>?$S znq3txkKi5;FG-X1xyR%mYLvraF$Ubcy(Tt3SC z(ZB*R=8f85=oOD%D&ygb=<5n&!Hub3WI&f#_eDF)x6_4him6`;FoB*Yp_V|mqOibL zP+ctu!_&iGRBzJBqZC?2S9d;e-5_A{<>fFa;^n0*XvAxO&r&KjD;eLwf$5muKMr!R zu)hkj#O{7K%Ufx1Yw*IiGr@-H>!*FL5L;2uEw@z*MU_#k5K3(q;g#!2P>cE-|Acn@ z*NsfriWxVp>~S?F9t*>dZ{~2jJQ=($24nMp7NZ|jiYo`yp0E%n{WJsLG8u5!PfOuH zc=@MLH0O=QfZL5=!DFQceDC)2&Kz*y!8_yd{7M5}zVisj*9VCa|Mmk?q-j69 zSoo}Q3}o>|G}_|EQYeb1ao&dMB*Idn?B+{H0tSI{Y~;s;jPyiV<1df|oz5hH4<=NQ zi6~B}B!jSuW=2jw6D1P_s-UZc1PblWP!?uFx3iFi6>!D*Aq!jhU3A9boX5dQ-N^n> z1BWRbbQ)x^5i>UgIuFa>UEQ#Kj`AnbX|vNNhi$OY`Mn&%Rb^DagF>A%f`Y z;z{jyLpgCF@UYMGDe|RbtK!M!8MGR2$hJy_MIDwR>Cs}TxJ2?PmCEhp&Zq-&-!P0mgB{|XmsD^S z@|>@$p#UtItE!P!k z%29G(D&;xa6CN6P1R&9wsf9IA;XJN|4An`x4ewDn>*REh%nxruwew*eEJUz`OZ1t z`ObIFcX#*xKE>%ah5o!wr(wu*|CX-u@YaL+TXu-T@9YJTC#Q`X%EBzUB+dtXpTI

&Ebtr4hOsK%28u^2fwgLiCHH5u{1jBt&} zw(zcp9=$Uj-oj(}SZKt~q8u2HcZw5m z*OqXYK%}ww+u|u0T%3r8k_N0K7JW%L>r6pM$yijBM!+PDDxIL4?6GWToT(ly;V*D$ zX{j>J6GY^6JXe|w8NVu<`FzJBF2fUqDRV-wqiiE&(w&u4JR0Jfg(rVA4BO^c!BjLZ zh$l>6kP9Pl;er^Fc|1&`zJx7X#;CJB>~>}c>&(IQ@=1`3brlv;NMh$+cjm|^%iBQr zR)d!ImOjqueuo+Oc0~lN#XS{gP3B^zMQHw4BeRk#W*WhskDf)*a9rNKXcEA2ytB9s zF3B66Dh`jo8PEP*z=v;!D!lqC4(lre6Idr#3GFZt9T*SeR8(h?Yrr`bP2gfZOcQv( z$yZNcm=;!i;MGbA3NYisay8Gku&x_emK`x#a4Pq!+S$P%FQm&2hR$N9DKfKOs zaO&}V)m5CI9d0r>jb1}LH<;moufg=<1`Q+dR9L9Zt0#`nkJ6+hXVZ4uWro z5a7kSD&uOZT0ueI1u+S;>l=l0M6?_6Oud5z5qs)Wcq7q7V!T)$lu3H%K27lBI_9>~ zayjVrYsTq5`KVY7CR}~u+an+XEl7ZtJ8u=a#V;hDS8Ybe<<&(9wz*s{+ ztlwJIw?eL1-pUXEjPARI;uOVu6c-3?3gQy?@|p(mDvnr_1rKoPnoV#LAFYYf$fWM> z4)VqPR9dfwC^_9D0R*70$?fQ7n0&UJ^^K12=j<-nAja9t+b! z7t+H}c9$W${siBxV$5Ok>Geky@r@cL&?d!w5cg|G-%1Um)^A>RO%;AmrMs+8`cgIS z@iL8nAOFrz`ik(up27hJ$jC;JLFiB?L z{aqlO!CgBN;VfR+@q_ZO)FlS+tHnVf;umysp1@7tk;uq(>(+_URCfWN?i>$GaNMq? z#*0*OiGse?Vh4V-E6#X>iZ?0zm+cmQy=ycEwgy}7QC%FxeTsijd?RPH?uCd~Qf#3n zdILlY=`(4+YIn0{2KkP0?^H3&PyUu;x+hxxW_OJqa^-@9P2q4~zS2=Ez->AG`fwKR z;bLDFbjf>thgsne4Ru&vd`pB_db7nQf}6^v74C|L22u2z{Xfx%sc|pGKKbeGGT_CB zWP)XP=EFnz(>rrmFv|M71sY|OhOvfpXJX}pXeh<^AJoG<8NR>I3X5sNPW=ASG^od< ze;y0EO#;~AChu+#E9>m6IE+SLii++eSc9*1e+`E)v?rhZ;#BuIVKrXv@j$gaqj#zr zFFes;qh!YKp3H{3nELZD^&4cZ|G~=~l(_E-Q z{#i5zZx6)OXHz-8xnJJ&%m$=JJNvJ(a7l8rP#`R&xmHRSS*RRE)BFk2NrKfxdsCT+5ht;ZDimTpRfrU0DGo^+6fh00 zOJ68p0o;~ic~~pFLoJ)7{XBeP9Ow`UPU9+zQ5EZmDms`q52q#K|csMGSK$B_o~;pO4BC z=GmEZV>6Xxc40z9VT9^pP#TdhSu;#z=!jJpMkzWH6_n!zs+p`VvwX3I2?;ksR&RT#=$PmCzEa$P0`QFU2)qUj0^pt3_-n96lcQp0pg?{6D$FjR2TqR+9R|@rzuWKdjcR?@E6c6 z-3@@*DRWpp=7$Th&sK1}s#l}uOQ3i7G=Wd