diff --git a/.idea/iOSAI.iml b/.idea/iOSAI.iml index df5cbff..f571432 100644 --- a/.idea/iOSAI.iml +++ b/.idea/iOSAI.iml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index c27b771..db8786c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f0860bd..91ccf2a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,9 +5,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - + \ No newline at end of file diff --git a/Entity/Variables.py b/Entity/Variables.py index 1ec2efe..164ffd2 100644 --- a/Entity/Variables.py +++ b/Entity/Variables.py @@ -3,7 +3,7 @@ from typing import Dict, Any from Entity.AnchorModel import AnchorModel # wda apple bundle id -WdaAppBundleId = "com.yoloAgant.wda.xctrunner" +WdaAppBundleId = "com.yoloAgent.wda.xctrunner" # 全局主播列表 anchorList: list[AnchorModel] = [] # 线程锁 diff --git a/Module/DeviceInfo.py b/Module/DeviceInfo.py index 89d0d18..db0b41f 100644 --- a/Module/DeviceInfo.py +++ b/Module/DeviceInfo.py @@ -54,9 +54,9 @@ class Deviceinfo(object): cwd=str(self.iproxy_dir), shell=False, text=True, + creationflags=self._creationflags, encoding="utf-8", bufsize=1, - creationflags=self._creationflags, ) # 3) 准备一个“启动器”(闭包):仅接受 (udid, local_port, remote_port) 参数 diff --git a/Module/Main.py b/Module/Main.py index fc17903..7663b52 100644 --- a/Module/Main.py +++ b/Module/Main.py @@ -4,6 +4,7 @@ from pathlib import Path from Module.DeviceInfo import Deviceinfo from Module.FlaskSubprocessManager import FlaskSubprocessManager +from Utils.DevDiskImageDeployer import DevDiskImageDeployer from Utils.LogManager import LogManager # 确定 exe 或 py 文件所在目录 @@ -26,8 +27,9 @@ if "--role=flask" in sys.argv: # 项目入口 if __name__ == "__main__": - # 清空日志等 - # LogManager.clearLogs() + + deployer = DevDiskImageDeployer(verbose=True) + deployer.deploy_all() # 启动 Flask 子进程 manager = FlaskSubprocessManager.get_instance() diff --git a/SupportFiles/15.0/DeveloperDiskImage.dmg b/SupportFiles/15.0/DeveloperDiskImage.dmg new file mode 100644 index 0000000..ff05ec0 Binary files /dev/null and b/SupportFiles/15.0/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.0/DeveloperDiskImage.dmg.signature b/SupportFiles/15.0/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..a18adce --- /dev/null +++ b/SupportFiles/15.0/DeveloperDiskImage.dmg.signature @@ -0,0 +1 @@ +8!=Y JK.x If>x<]]~"#9 IPmJp}};+G)v56[| D\?PwE3Ӳ4( \ No newline at end of file diff --git a/SupportFiles/15.1/DeveloperDiskImage.dmg b/SupportFiles/15.1/DeveloperDiskImage.dmg new file mode 100644 index 0000000..bc6c987 Binary files /dev/null and b/SupportFiles/15.1/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.1/DeveloperDiskImage.dmg.signature b/SupportFiles/15.1/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..95b9d92 --- /dev/null +++ b/SupportFiles/15.1/DeveloperDiskImage.dmg.signature @@ -0,0 +1,2 @@ +j# +8Q_jl~y=Xćwۥ_{,ϋLRm0^WSMF{[^f]̧ʼ辮($⊬Ei{Wq4e-ɿ L}97`c \ No newline at end of file diff --git a/SupportFiles/15.2/DeveloperDiskImage.dmg b/SupportFiles/15.2/DeveloperDiskImage.dmg new file mode 100644 index 0000000..bc6c987 Binary files /dev/null and b/SupportFiles/15.2/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.2/DeveloperDiskImage.dmg.signature b/SupportFiles/15.2/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..95b9d92 --- /dev/null +++ b/SupportFiles/15.2/DeveloperDiskImage.dmg.signature @@ -0,0 +1,2 @@ +j# +8Q_jl~y=Xćwۥ_{,ϋLRm0^WSMF{[^f]̧ʼ辮($⊬Ei{Wq4e-ɿ L}97`c \ No newline at end of file diff --git a/SupportFiles/15.3.1/DeveloperDiskImage.dmg b/SupportFiles/15.3.1/DeveloperDiskImage.dmg new file mode 100644 index 0000000..8769f68 Binary files /dev/null and b/SupportFiles/15.3.1/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.3.1/DeveloperDiskImage.dmg.signature b/SupportFiles/15.3.1/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..73de769 Binary files /dev/null and b/SupportFiles/15.3.1/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.3/DeveloperDiskImage.dmg b/SupportFiles/15.3/DeveloperDiskImage.dmg new file mode 100644 index 0000000..8769f68 Binary files /dev/null and b/SupportFiles/15.3/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.3/DeveloperDiskImage.dmg.signature b/SupportFiles/15.3/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..73de769 Binary files /dev/null and b/SupportFiles/15.3/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.4/DeveloperDiskImage.dmg b/SupportFiles/15.4/DeveloperDiskImage.dmg new file mode 100644 index 0000000..e8f1a9c Binary files /dev/null and b/SupportFiles/15.4/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.4/DeveloperDiskImage.dmg.signature b/SupportFiles/15.4/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..46422ae Binary files /dev/null and b/SupportFiles/15.4/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.5/DeveloperDiskImage.dmg b/SupportFiles/15.5/DeveloperDiskImage.dmg new file mode 100644 index 0000000..dff04de Binary files /dev/null and b/SupportFiles/15.5/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.5/DeveloperDiskImage.dmg.signature b/SupportFiles/15.5/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..3d7a9d7 Binary files /dev/null and b/SupportFiles/15.5/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.6.1/DeveloperDiskImage.dmg b/SupportFiles/15.6.1/DeveloperDiskImage.dmg new file mode 100644 index 0000000..5da6947 Binary files /dev/null and b/SupportFiles/15.6.1/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.6.1/DeveloperDiskImage.dmg.signature b/SupportFiles/15.6.1/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..7ff3fab Binary files /dev/null and b/SupportFiles/15.6.1/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.6/DeveloperDiskImage.dmg b/SupportFiles/15.6/DeveloperDiskImage.dmg new file mode 100644 index 0000000..dff04de Binary files /dev/null and b/SupportFiles/15.6/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.6/DeveloperDiskImage.dmg.signature b/SupportFiles/15.6/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..3d7a9d7 Binary files /dev/null and b/SupportFiles/15.6/DeveloperDiskImage.dmg.signature differ diff --git a/SupportFiles/15.7/DeveloperDiskImage.dmg b/SupportFiles/15.7/DeveloperDiskImage.dmg new file mode 100644 index 0000000..f1d57e5 Binary files /dev/null and b/SupportFiles/15.7/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/15.7/DeveloperDiskImage.dmg.signature b/SupportFiles/15.7/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..9c5a3ac --- /dev/null +++ b/SupportFiles/15.7/DeveloperDiskImage.dmg.signature @@ -0,0 +1,2 @@ +i{l̞d+3Bs +NMÅ|)!%oO zyd]QAK[FY,I\gp3tD {69V?U@<frxßc*R2./@>q3_\P< \ No newline at end of file diff --git a/SupportFiles/16.5/DeveloperDiskImage.dmg b/SupportFiles/16.5/DeveloperDiskImage.dmg new file mode 100644 index 0000000..aadc878 Binary files /dev/null and b/SupportFiles/16.5/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/16.5/DeveloperDiskImage.dmg.signature b/SupportFiles/16.5/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..33c4a44 --- /dev/null +++ b/SupportFiles/16.5/DeveloperDiskImage.dmg.signature @@ -0,0 +1 @@ ++F {69V?U@<frxßc*R2./@>q3_\P< \ No newline at end of file diff --git a/SupportFiles/16.6/DeveloperDiskImage.dmg b/SupportFiles/16.6/DeveloperDiskImage.dmg new file mode 100644 index 0000000..35f5597 Binary files /dev/null and b/SupportFiles/16.6/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/16.6/DeveloperDiskImage.dmg.signature b/SupportFiles/16.6/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..6705a5a --- /dev/null +++ b/SupportFiles/16.6/DeveloperDiskImage.dmg.signature @@ -0,0 +1 @@ +7ek$#5@΍mjP:/ r̮9R)z*c4߯ u&7Q{FzӃ[QsZۊHnIֵ1kHVMPO".<6?I&|0 \ No newline at end of file diff --git a/SupportFiles/16.7/DeveloperDiskImage.dmg b/SupportFiles/16.7/DeveloperDiskImage.dmg new file mode 100644 index 0000000..35f5597 Binary files /dev/null and b/SupportFiles/16.7/DeveloperDiskImage.dmg differ diff --git a/SupportFiles/16.7/DeveloperDiskImage.dmg.signature b/SupportFiles/16.7/DeveloperDiskImage.dmg.signature new file mode 100644 index 0000000..6705a5a --- /dev/null +++ b/SupportFiles/16.7/DeveloperDiskImage.dmg.signature @@ -0,0 +1 @@ +7ek$#5@΍mjP:/ r̮9R)z*c4߯ u&7Q{FzӃ[QsZۊHnIֵ1kHVMPO".<6?I&|0 \ No newline at end of file diff --git a/Utils/DevDiskImageDeployer.py b/Utils/DevDiskImageDeployer.py new file mode 100644 index 0000000..2491d4f --- /dev/null +++ b/Utils/DevDiskImageDeployer.py @@ -0,0 +1,123 @@ +# support_deployer.py +import os +import re +import shutil +from pathlib import Path +from dataclasses import dataclass, field +from typing import Iterable, Optional + +VERSION_RE = re.compile(r"^\d+(?:\.\d+)*$") # 15 / 15.6 / 16.7 / 16.7.1 + +def _find_support_root(hint: Optional[Path]) -> Optional[Path]: + """ + 1) 优先:显式传入的 hint + 2) 其次:环境变量 SUPPORT_DDI_DIR + 3) 再次:从 __file__ 所在目录向上搜索 3 层,找名为 'SupportFiles' 的目录 + """ + # 1) 显式参数 + if hint and hint.exists(): + return hint.resolve() + + # 2) 环境变量 + env = os.environ.get("SUPPORT_DDI_DIR") + if env: + p = Path(env).expanduser() + if p.exists(): + return p.resolve() + + # 3) 向上搜索 + here = Path(__file__).resolve().parent + for i in range(4): # 当前目录 + 向上 3 层 + cand = here / "SupportFiles" + if cand.exists(): + return cand.resolve() + here = here.parent + + return None + + +@dataclass +class DevDiskImageDeployer: + """ + 同步 SupportFiles//... 到 ~/.tidevice/device-support//... + - 自动定位 SupportFiles(显式参数/环境变量/向上搜索) + - 已存在则跳过,不存在才复制 + - 详细日志 + """ + project_support_root: Optional[Path] = None # 可不传,自动发现 + cache_root: Optional[Path] = None # 默认 ~/.tidevice/device-support + verbose: bool = True + dry_run: bool = False + overwrite: bool = False + + _src_dir: Path = field(init=False, repr=False) + _cache_dir: Path = field(init=False, repr=False) + + def __post_init__(self): + src = _find_support_root(self.project_support_root) + if src is None: + raise FileNotFoundError( + "未找到 SupportFiles 目录。" + "可传入 project_support_root,或设置环境变量 SUPPORT_DDI_DIR," + "或确保在当前文件上层 3 级目录内存在名为 'SupportFiles' 的目录。" + ) + self._src_dir = src + + if self.cache_root is None: + self._cache_dir = Path.home() / ".tidevice" / "device-support" + else: + self._cache_dir = Path(self.cache_root).expanduser().resolve() + self._cache_dir.mkdir(parents=True, exist_ok=True) + + if self.verbose: + print(f"[INFO] resolved SupportFiles = {self._src_dir}") + print(f"[INFO] cache_dir = {self._cache_dir}") + + # 打印一眼能看见的兄弟目录,防路径误判 + parent = self._src_dir.parent + try: + siblings = ", ".join(sorted(p.name for p in parent.iterdir() if p.is_dir())) + print(f"[INFO] SupportFiles parent = {parent}") + print(f"[INFO] siblings = {siblings}") + except Exception: + pass + + def deploy_all(self): + candidates = list(self._iter_version_dirs(self._src_dir)) + if self.verbose: + if not candidates: + print("[WARN] 未发现任何版本目录(仅匹配 15 / 15.6 / 16.7 / 16.7.1 这种名字)") + else: + print("[INFO] 发现版本目录:") + for c in candidates: + print(f" - {c.name}") + + copied = skipped = 0 + for ver_dir in candidates: + dst = self._cache_dir / ver_dir.name + if dst.exists() and not self.overwrite: + if self.verbose: + print(f"[SKIP] 已存在:{dst}") + skipped += 1 + continue + + if dst.exists() and self.overwrite: + if self.verbose: + print(f"[INFO] 覆盖模式,删除:{dst}") + if not self.dry_run: + shutil.rmtree(dst) + + if self.verbose: + print(f"[COPY] {ver_dir} -> {dst}") + if not self.dry_run: + shutil.copytree(ver_dir, dst) + copied += 1 + + if self.verbose: + print(f"[SUMMARY] copied={copied}, skipped={skipped}, total={copied+skipped}") + + # -------- helpers -------- + def _iter_version_dirs(self, root: Path) -> Iterable[Path]: + for p in sorted(root.iterdir()): + if p.is_dir() and VERSION_RE.match(p.name): + yield p diff --git a/build.bat b/build.bat index 4350f24..98699cd 100644 --- a/build.bat +++ b/build.bat @@ -18,6 +18,7 @@ python -m nuitka Module/Main.py ^ --include-module=urllib3 ^ --include-module=certifi ^ --include-module=idna ^ + --include-data-dir="E:/Code/python/iOSAI/SupportFiles=SupportFiles" ^ --include-data-dir="E:/Code/python/iOSAI/resources=resources" ^ --include-data-files="E:/Code/python/iOSAI/resources/iproxy/*=resources/iproxy/" ^ --windows-icon-from-ico=resources/icon.ico \ No newline at end of file diff --git a/resources/03cb0d61638ab919e9c9c5e016b969ff40925b0c/bgv.png b/resources/03cb0d61638ab919e9c9c5e016b969ff40925b0c/bgv.png deleted file mode 100644 index 48631f4..0000000 Binary files a/resources/03cb0d61638ab919e9c9c5e016b969ff40925b0c/bgv.png and /dev/null differ diff --git a/resources/833c034d29ee6b79e1dfd88dc1d454f3da1e8a3d/bgv.png b/resources/833c034d29ee6b79e1dfd88dc1d454f3da1e8a3d/bgv.png deleted file mode 100644 index 31adfbf..0000000 Binary files a/resources/833c034d29ee6b79e1dfd88dc1d454f3da1e8a3d/bgv.png and /dev/null differ