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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
@@ -49,13 +96,14 @@
+
+
@@ -183,11 +233,12 @@
+
-
+
\ 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