按 Claude Design 定稿(归档在 docs/design/)重做 UI,并把 tmux 从 「从不自动进」修成「连接前探测 → 让用户选会话」。 设计令牌与导航地基 - Theme 拆三层:TXAccent(恒定 blurple) / TXChrome(中性阶×4 表) / TXFlavor(Catppuccin 终端) - vendor JetBrains Mono 四权重(附 OFL 许可) - AppRouter + SessionManager:多会话并存,路由与会话生命周期解耦 - SessionCanvas 常驻挂载会话 surface(摘除即丢内容,也是缩回动画的前提) 按设计稿落地的屏 - 沉浸轨道页:56pt 轨道 + 浮起标题/状态胶囊 + 侧边栏三态(遮罩不 resize、Pin 各一次) - 首页:活动会话卡(readViewportText 文本镜像)+ 主机网格 + 筛选 chips - 关闭二次确认(tmux 仅断开 / 原生窗口两套文案)、分屏菜单、pane 拖拽条 - 空状态:首次运行 / 无会话 / 搜索无命中 / 连接中·失败·已关闭 tmux 真实链路(真机查出并修掉 4 个 bug) - 全代码库从来没人发起 attach → 连接前探测 + 会话选择器(接回 / 新建 / 原生终端) - format 分隔符 tab 经 PTY 变成下划线 → 改用 |:| - controller 变化不冒泡到 session → Combine 转发(否则数据解析对了 UI 不刷新) - 当前会话名不能靠 session_attached 反推 → 改用 display-message 传输层:SSH connect 加超时(原来阻塞到系统 TCP 超时 75s+) 无头验证设施:假会话 fixture · terminalx://ui/* 驱动 · 横屏截图脚本 · 对拍走查法 TXCore 45 tests 绿(新增 5 个会话探测单测) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
59 lines
2.1 KiB
YAML
59 lines
2.1 KiB
YAML
name: TerminalX
|
||
options:
|
||
bundleIdPrefix: ai.athom.terminalx
|
||
deploymentTarget:
|
||
iOS: "17.0"
|
||
createIntermediateGroups: true
|
||
|
||
packages:
|
||
# 本地 vendored(构建环境的认证代理不被 SwiftPM 支持,改用 local-path 零网络)。
|
||
GhosttyKit:
|
||
path: ../../vendor/libghostty-spm
|
||
TXTransport:
|
||
path: ../../packages/TXTransport
|
||
TXCore:
|
||
path: ../../packages/TXCore
|
||
|
||
targets:
|
||
TerminalX:
|
||
type: application
|
||
platform: iOS
|
||
deploymentTarget: "17.0"
|
||
sources:
|
||
- path: iOS
|
||
# 打包字体(JetBrains Mono 四权重,UIAppFonts 在 TerminalX-Info.plist 声明)。
|
||
# 必须平铺进 bundle 根(UIAppFonts 的值不带目录),故用 group 而非 folder reference。
|
||
# OFL.txt 一并打包(OFL-1.1 要求许可随分发)。
|
||
- path: Resources/Fonts
|
||
buildPhase: resources
|
||
excludes:
|
||
- "README.md"
|
||
dependencies:
|
||
- package: GhosttyKit
|
||
product: GhosttyTerminal
|
||
- package: GhosttyKit
|
||
product: GhosttyTheme
|
||
- package: TXTransport
|
||
product: TXTransport
|
||
- package: TXCore
|
||
product: TXCore
|
||
# gomobile bind 产出的 tsnet 桥接(动态 framework,需嵌入+签名拷贝)。
|
||
- framework: ../../artifacts/TsnetBridge.xcframework
|
||
embed: true
|
||
settings:
|
||
base:
|
||
PRODUCT_BUNDLE_IDENTIFIER: ai.athom.terminalx
|
||
MARKETING_VERSION: "0.0.1"
|
||
CURRENT_PROJECT_VERSION: "1"
|
||
SWIFT_VERSION: "6.0"
|
||
GENERATE_INFOPLIST_FILE: YES
|
||
# 部分 Info.plist 基底(仅 URL scheme,供无头验证前台唤醒);生成键合并其上。
|
||
INFOPLIST_FILE: TerminalX-Info.plist
|
||
TARGETED_DEVICE_FAMILY: "1,2"
|
||
INFOPLIST_KEY_UILaunchScreen_Generation: YES
|
||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents: YES
|
||
# 真机自动签名(公司团队 Nanjing ShenRuan)。tsnet 用户态无需 NE entitlement。
|
||
# 签名后 Keychain(SecItem)/Secure Enclave 可用(未签名会 -34018 回退文件)。
|
||
CODE_SIGN_STYLE: Automatic
|
||
DEVELOPMENT_TEAM: J75A6S5938
|