Skip to content

fix(weather): handle expired widget forecasts - #607

Merged
whes1015 merged 1 commit into
mainfrom
fix/ios-widget-forecast-expiry
Oct 12, 2026
Merged

whes1015 merged 1 commit into
mainfrom
fix/ios-widget-forecast-expiry

Conversation

@YinCheng0106

@YinCheng0106 YinCheng0106 commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

這個 PR 做了什麼

iOS 天氣小工具的逐時預報在有效期限後不再持續顯示舊資料,並在沒有可用預報時提供本地化的「暫無資料」狀態。此改動接續已合併的 Gallery Preview PR #604,保留 Gallery 預覽整合。

  • 正式程式碼:ForecastWidgetExpiry.swift 統一計算預報期限與可用性;期限取發布時間後 30 分鐘與接收後下一個台北整點的較早者,並納入校準時鐘偏移。
  • 正式程式碼:DPIPWidgetProviderSupport.swift 在到期前最多 2 分鐘提出較早 reload 請求,同時保留到期 timeline entry;Release 最短刷新間隔仍為 5 分鐘。WidgetKit 的 reload 執行時間不保證,因此到期 entry 仍負責在資料期限到達時呈現正確狀態。
  • 正式程式碼:ForecastWidgetSnapshotStore.swift 拒絕相同發布時間的重複快取寫入,避免重複回應重設接收時間、讓已過期預報復活。
  • 正式程式碼:DPIPWidgets.swift 在 Medium/Large 小工具無有效逐時預報時顯示 unavailable 狀態,現況天氣仍保留;Small 版維持原樣。緊湊版面避免 unavailable 文字擠壓預報區。
  • 正式程式碼:Localizable.xcstrings 加入所有支援語系的 unavailable 文案;字串由原生 Widget localization table 提供。
  • 正式程式碼:Runner.xcodeproj/project.pbxproj 登錄 expiry helper。
  • 測試:ForecastWidgetTests.swift 涵蓋期限邊界、早期 reload/到期 entries、相同發布快取保護、無預報與恢復呈現、Dynamic Type 與多語系版面。此分支也包含已合併至 main 的 Gallery Preview 基礎。

相關 issue

沒有對應的 issue。接續已合併的 Gallery Preview PR #604。

怎麼驗

自動化驗證

  • 最新本機 tool/check.sh:3,136 passed、10 skipped;本次 tool/commit.sh --push 所有 CI gates 均通過,未變更的 gates 使用內容雜湊快取。
  • Full iOS tests:363 passed、0 failed。
  • Gallery Preview:13/13;Forecast Expiry:16/16;Forecast Unavailable:6/6。
  • Widget Extension simulator build:PASS。
  • tool/check/commits.sh origin/main..HEAD:1 commit 通過。

實際 Simulator Home Screen WidgetKit 觀察

  • 在 iPhone 16 Pro/iOS 18.6 Simulator 的既有 Medium Home Screen Widget 上觀察到有效預報、期限後顯示 unavailable、WidgetKit 自然刷新後取得新發布並恢復預報。主 Flutter app 全程未開啟,也未強制呼叫 WidgetCenter reload。
  • 此為實際 Home Screen 畫面與自然 WidgetKit 刷新觀察,和自動化測試分開;觀察流程及時間線見本機 QA 報告:/Users/yincheng/.codex/qa-evidence/dpip-forecast-final-20261012-071923/REPORT.md。
  • 有效、到期後 unavailable、恢復三張截圖目前位於該 QA 目錄的 01-valid.png、02-unavailable.png、03-restored.png。目前無法將本機圖片附加到 GitHub PR,因此PR 未附截圖;審查者無法透過上述本機路徑存取圖片。
  • 尚未完成:實體 iPhone 長時間閒置驗證;受控網路中斷/恢復 QA。不得將這兩項視為通過。WidgetKit reload 時機不保證,Simulator 觀察不代表所有裝置都會在相同時間刷新。

檢查清單

  • tool/check/commits.sh origin/main..HEAD 通過;單一 commit 標題符合 repository 規範
  • 一個 commit 一件事
  • tool/commit.sh --push 的 CI gates 通過;最新 Dart 測試 3,136 passed、10 skipped;Full iOS tests 363 passed、0 failed
  • 新增 unavailable 文案有涵蓋所有支援語系
  • UI 變更的 PR 前後截圖已附上:本機 QA 截圖存在,但無法附加至 PR;實體裝置長時間與受控網路中斷/恢復 QA 尚未完成

Platform: ios

Fix(zh-Hant): 修正 iOS 天氣小工具預報過期後的更新時機,並在無有效預報時顯示暫無資料
Fix(en-US): improve iOS weather widget refresh timing around forecast expiry and show an unavailable state when no valid forecast remains
@github-actions

Copy link
Copy Markdown

✅ OpenCodeReview: Review complete: 0 finding(s) across 4 selected item(s).

@YinCheng0106 YinCheng0106 self-assigned this Oct 12, 2026
@YinCheng0106 YinCheng0106 added the ios Issues or pull requests related to the iOS platform. label Oct 12, 2026
@YinCheng0106 YinCheng0106 added this to the v26.4 milestone Oct 12, 2026
@codecov

codecov Bot commented Oct 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.42%. Comparing base (5bd3388) to head (d97ed0b).

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@YinCheng0106
YinCheng0106 marked this pull request as ready for review October 12, 2026 03:08
Copilot AI balanced review requested due to automatic review settings October 12, 2026 03:08

This comment was marked as low quality.

@PiscesXD

Copy link
Copy Markdown
Member

測試正常
image

@whes1015
whes1015 merged commit a4d918b into main Oct 12, 2026
8 checks passed
@whes1015
whes1015 deleted the fix/ios-widget-forecast-expiry branch October 12, 2026 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ios Issues or pull requests related to the iOS platform. size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants