Max Lv:meow iOS 状态图标跟随应用图标的 PR #351 完成审查并推入跟进提交

在 meow-ios 让首页状态图标镜像所选应用图标的 PR #351(由 gengjiawen 提交,分支 fix/status-glyph-follows-app-icon)下,维护者 madeye 给出合并前审查:`AppIconStore` 是图标选择的唯一所有者,iOS 仍是持久化层,`current` 只在 iOS 接受切换后前进,被拒绝的切换会重新同步,重新选择已安装图标会跳过系统弹窗。tvOS 检查:tvOS 目标会编译 `App/Sources/Services` 与 `AppModel.swift`,而 `AppIconStore` 与 `appIconStore` 属性都在 `#if os(iOS)` 内,`MeowApp.swift` 与相关视图不在 tvOS 目标中,因此 `meow-tvos` 仍可构建。已推入跟进提交:rebase 到当前 main,另有提交 6d64f87 用 `scripts/generate-xcodeproj.sh` 重新生成 `project.pbxproj`(自动合并的那份已与 `project.yml` 漂移)。本地检查:`swiftformat --lint .` 与 `swiftlint --strict` 干净,`meow-tvos` 构建通过,`xcodebuild test`(iPhone 17)245 项 Swift Testing 测试与 XCTest 套件全部通过,含新增的 `AppIconStore`/`AppIcon model` 套件;首轮 3 项 `ShadowsocksAddServiceTests` 的 `load_config_from_str (validation)` 失败为已知 live-bootstrap-DNS 抖动,与本改动无关,重跑通过。CI 通过后合并。

作者原文

Reviewed. Looks good, thanks @gengjiawen.

  • AppIconStore is the single owner of the icon choice. iOS remains the persistence layer, current only advances once iOS accepts the switch, a declined switch re-syncs, and re-selecting the installed icon skips the system alert.
  • tvOS check: the tvOS target compiles App/Sources/Services and AppModel.swift. AppIconStore and the appIconStore property are both under #if os(iOS), and MeowApp.swift and the views aren't in the tvOS target, so meow-tvos still builds.
  • Pushed: rebased onto current main, plus 6d64f87, which regenerates project.pbxproj with scripts/generate-xcodeproj.sh. The auto-merged one had drifted from project.yml.

Local:

  • swiftformat --lint . and swiftlint --strict are clean.
  • meow-tvos builds.
  • xcodebuild test (iPhone 17): all 245 Swift Testing tests and the XCTest bundles pass, including the new AppIconStore / AppIcon model suites.
  • The first run had 3 ShadowsocksAddServiceTests failures with load_config_from_str (validation). That is the known live-bootstrap-DNS flake, not this change, and the suite passes on rerun.

I'll merge once CI is green.