Max Lv:meow iOS 按配置自动更新节奏的 PR #352 完成审查并推入跟进提交
在 meow-ios 为订阅配置新增按配置自动更新节奏的 PR #352(由 gengjiawen 提交,分支 feat/profile-auto-update)下,维护者 madeye 给出合并前审查:`.manual` 默认值意味着升级后不会自动开始抓取;更新节奏仅由 `lastUpdated` 推导,手动刷新会顺延自动刷新,不存在第二个时间戳产生漂移;抓取失败会保持到期状态,`isRefreshing` 守卫阻止并发重叠。已把跟进提交推到该分支:rebase 到当前 main,唯一实质冲突在 `MeowApp.swift`——#392 加入了它自己的 `scenePhase` 处理(`WidgetReloader.appDidBecomeActive()`),两者现合入单个 `onChange`,共用一个 `@Environment(\.scenePhase)`,`project.pbxproj` 由 `project.yml` 重新生成;提交 201cf84 在 `ProfileAutoUpdaterTests` 中固定 `cloudKitDatabase: .none`,因为 iCloud 权限落地(#383)后默认 `ModelConfiguration` 会开启 CloudKit 同步,从而拒绝 `Profile` schema 并导致两项新测试失败,其它 SwiftData 测试早已固定为 `.none`。本地 `swiftformat --lint .`、`swiftlint --strict` 干净,`meow-tvos` 构建通过,`xcodebuild test`(iPhone 17)修复后全绿(含 `ProfileAutoUpdater` 等套件);首轮 `Shadowsocks*` 失败为已知 DNS 抖动,重跑通过。CI 通过后合并。
作者原文@madeyeReviewed. Nice design, thanks @gengjiawen.
- The
.manualdefault means nothing starts fetching after an upgrade.- The cadence is derived from
lastUpdatedalone, so a manual refresh postpones the automatic one and there's no second timestamp to drift.- A failed fetch stays due, and the
isRefreshingguard stops overlapping passes.Pushed to this branch:
- Rebased onto current
main. The one real conflict wasMeowApp.swift: #392 added its ownscenePhasehandler (WidgetReloader.appDidBecomeActive()). Both now live in a singleonChange, with one@Environment(\.scenePhase).project.pbxprojis regenerated fromproject.yml.201cf84pinscloudKitDatabase: .noneinProfileAutoUpdaterTests. Since the iCloud entitlement landed (#383), a defaultModelConfigurationturns on CloudKit sync. That rejects theProfileschema ("CloudKit integration requires that all attributes be optional…") and failed two of the new tests. Every other SwiftData test already pins.none.Local checks:
swiftformat --lint .andswiftlint --strict: clean.meow-tvos: builds.xcodebuild test(iPhone 17): green after the fix. That includes theProfileAutoUpdater,ProfileUpdateIntervalandSubscriptionServicesuites.- The
Shadowsocks*failures in the first run were the known live-bootstrap-DNS flake; those suites pass on rerun.Merging once CI is green.