Files
iOSAI/Module/Main.py

94 lines
2.6 KiB
Python
Raw Normal View History

2025-08-15 20:04:59 +08:00
import os
import sys
from pathlib import Path
2025-09-23 20:17:33 +08:00
import wda
import tidevice
2025-09-22 14:36:05 +08:00
from Module.DeviceInfo import DeviceInfo
2025-08-01 13:43:51 +08:00
from Module.FlaskSubprocessManager import FlaskSubprocessManager
2025-08-28 15:46:17 +08:00
from Utils.DevDiskImageDeployer import DevDiskImageDeployer
2025-09-04 20:47:14 +08:00
2025-08-15 20:04:59 +08:00
# 确定 exe 或 py 文件所在目录
BASE = Path(getattr(sys, 'frozen', False) and sys.executable or __file__).resolve().parent
LOG_DIR = BASE / "log"
LOG_DIR.mkdir(exist_ok=True) # 确保 log 目录存在
print(f"日志目录: {LOG_DIR}")
def _run_flask_role():
from Module import FlaskService
port = int(os.getenv("FLASK_COMM_PORT", "34567")) # 固定端口的兜底仍是 34567
app_factory = getattr(FlaskService, "create_app", None)
app = app_factory() if callable(app_factory) else FlaskService.app
2025-08-20 13:48:32 +08:00
app.run(host="0.0.0.0", port=port + 1, debug=False, use_reloader=False)
2025-08-15 20:04:59 +08:00
if "--role=flask" in sys.argv:
_run_flask_role()
sys.exit(0)
2025-09-04 20:47:14 +08:00
2025-08-11 22:06:48 +08:00
# 项目入口
2025-08-01 13:43:51 +08:00
if __name__ == "__main__":
2025-09-04 20:47:14 +08:00
2025-09-23 20:17:33 +08:00
wda.debug = True
2025-09-23 20:33:36 +08:00
# 1. 打包环境
if hasattr(sys, '_MEIPASS'):
base_dir = sys._MEIPASS
# 2. 源码调试环境
else:
base_dir = os.path.dirname(
os.path.dirname(os.path.abspath(__file__)) # 向上跳一级
)
2025-09-23 20:17:33 +08:00
2025-09-23 20:33:36 +08:00
# 3. 拼 iproxy 目录
2025-09-23 20:17:33 +08:00
iproxy_dir = os.path.join(base_dir, 'resources', 'iproxy')
2025-09-23 20:33:36 +08:00
# 4. 剩余逻辑不变
2025-09-23 20:17:33 +08:00
if os.path.isdir(iproxy_dir):
sep = os.pathsep
old_path = os.environ.get('PATH', '')
if iproxy_dir not in old_path:
os.environ['PATH'] = old_path + sep + iproxy_dir
else:
print(f'warning: {iproxy_dir} not found', file=sys.stderr)
2025-08-28 16:02:28 +08:00
# 添加iOS开发包到电脑上
2025-08-28 15:46:17 +08:00
deployer = DevDiskImageDeployer(verbose=True)
deployer.deploy_all()
2025-08-06 22:11:33 +08:00
2025-08-15 20:04:59 +08:00
# 启动 Flask 子进程
2025-08-01 13:43:51 +08:00
manager = FlaskSubprocessManager.get_instance()
manager.start()
2025-08-15 20:04:59 +08:00
# 设备监听(即使失败/很快返回,也不会导致主进程退出)
2025-09-22 14:36:05 +08:00
try:
info = DeviceInfo()
info.listen()
except Exception as e:
print("[WARN] Device listener not running:", e)
2025-08-15 20:04:59 +08:00
# === 保活:阻塞主线程,直到收到 Ctrl+C/关闭 ===
import threading, time, signal
stop = threading.Event()
def _handle(_sig, _frm):
stop.set()
# Windows 上 SIGINT/SIGTERM 都可以拦到
try:
signal.signal(signal.SIGINT, _handle)
signal.signal(signal.SIGTERM, _handle)
except Exception:
pass # 某些环境可能不支持,忽略
try:
while not stop.is_set():
time.sleep(1)
finally:
# 进程退出前记得把子进程关掉
manager.stop()