Files
chick 3f6090081f feat(ios): 中继通道 P4/P5——端点抽象、信封、传输、配对与分层错误
- InstanceEndpoint 取代 Instance.origin(旧数据 init(from:) 读成 .direct,
  写盘只输出 endpoint;dedupKey 直通用 origin、中继用 relay:<nodeID>)
- RelayWire:Swift 侧重算 contracts/test-vectors.json(CanonicalJSON 手写解析器,
  因为 Foundation 的解码器会抹掉'拼写',而 intent 摘要定义的正是拼写)
- NodeTransport 抽象 + DirectTransport / RelayTransport / NodeTransportRouter;
  DirectTransport 是薄适配,直通路径行为不变
- RelayTransport:信封构造、签名、加密、验签、解密;响应验签失败即丢弃,
  四类以上失败各有独立 UpstreamError 分支与用户文案
- DeviceIdentity(沙盒文件 0600,配对时由节点分配 deviceID)、RelayPairing、配对 sheet
- 卡片通道徽标 + freshness 副标题;危险写 intent 在发送瞬间生成
- scripts/export-app-routes.swift 生成 vendored 路由表,AppRoutesContractTests 反向守卫
- 测试 78→92:向量互算、迁移(字面量旧 JSON)、配对四类失败、路由器、
  传输往返与各类拒绝路径
2026-09-16 18:57:41 +08:00
..

MultiSimAdmin iOS

iPhone 原生应用的 Swift Package。产品与技术说明见 docs/ios-native.md, 本文件只写这个目录里怎么动手。

目录

Sources/MultiSimAdmin/
  AppMetadata.swift          版本号与 Bundle ID 的唯一来源
  MultiSimAdminApp.swift     入口、三个底部 Tab、调试直达参数
  Models/                    实例、标签、查询等值类型
  Features/{Fleet,Device,Messages,Logs,Settings}/   页面与 view model
  Upstream/                  路由白名单、HTTP 客户端、按实例隔离的会话 Cookie
  Services/                  连接探测、凭据存储、依赖装配
  Persistence/               沙盒 JSON 文件仓储与日志存储
  Theme/                     颜色令牌、按钮与卡片样式、骨架、主题模式
  Support/                   错误文案、时间显示、调试启动
  Resources/                 Info.plist、Assets.xcassets
Tests/MultiSimAdminTests/    48 个用例
Design/                      图标生成脚本与参考稿

常用命令

swift build
swift test
xcodebuild -scheme MultiSimAdmin \
  -destination 'platform=iOS Simulator,id=<UDID>' \
  -configuration Debug build
swift Design/generate_app_icon.swift \
  Sources/MultiSimAdmin/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon1024.png

未签名 IPA 从仓库根目录执行 ./scripts/build-ios-ipa.sh 生成。

发版要改的地方

版本号必须四处一致,否则测试会失败:

  1. Sources/MultiSimAdmin/Resources/Info.plist 的 CFBundleShortVersionString 与 CFBundleVersion
  2. Sources/MultiSimAdmin/AppMetadata.swift
  3. Tests/MultiSimAdminTests/AppMetadataTests.swift
  4. Tests/MultiSimAdminTests/SettingsViewModelTests.swift

改完补一份 docs/ios-native-<version>.md 发布说明,并同步更新 docs/ios-native.md、仓库根 README 的版本引用。

界面约定

界面不含任何蓝色:主操作、选中态、进度填充一律用石墨墨色(AITheme.primary / AITheme.ink), 颜色只留给状态语义——危险红、告警琥珀、成功绿,且只在真的表示状态时出现,健康读数保持墨色。 选中态用实心主色加 onPrimary 文字,不用低透明度色雾,浅色深色两套主题下都必须一眼可读; 同屏并排控件等高;选中态不得改变控件尺寸;标签统一 28pt 胶囊;卡片内部不再嵌套卡片, 并列读数改用发丝线分隔的栅格;不得出现因配色而在深色背景上消失的按钮或文字。