Skip to content

build(ios): find the Crashlytics script where Flutter puts packages - #642

Merged
whes1015 merged 1 commit into
mainfrom
fix/ios-crashlytics-script
Oct 22, 2026
Merged

whes1015 merged 1 commit into
mainfrom
fix/ios-crashlytics-script

Conversation

@whes1015

Copy link
Copy Markdown
Member

這個 PR 做了什麼

修正 #631 加的 Crashlytics build phase:它寫死去 ${BUILD_DIR%/Build/*}/SourcePackages(DerivedData)找 Crashlytics/run,但 Flutter 驅動的建置一律傳 -clonedSourcePackagesDirPath build/ios/SourcePackages(ios.yml 的註解也寫了這點),所以那裡沒有這個檔案,script 找不到就讓整個建置失敗:

…/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run: No such file or directory
Command PhaseScriptExecution failed with a nonzero exit code

受影響的是所有經過 Flutter 的 iOS 建置:tool/run.sh(iOS 實機或模擬器)、flutter build ios,以及 CI 的 Test (ios/RunnerTests)(tool/dev/test_ios.sh)。#641 的 iOS 檢查就是這樣失敗的(run)。#638、#639 沒失敗,是因為它們沒改到 ios/、lib/、assets/,iOS job 被路徑過濾跳過了。release workflow 的 xcodebuild archive 沒有傳那個參數,套件放在 DerivedData,所以 release 一直是正常的。

改動內容

正式程式碼

  • ios/Runner.xcodeproj/project.pbxproj:Crashlytics build phase 的 script
    • 只在 Release 上傳 dSYM。Debug 和 Profile(tool/run.sh、RunnerTests)直接結束:這些建置不會出貨,沒有需要符號化的東西,也應該能離線建置。
    • 兩個位置都找 firebase-ios-sdk/Crashlytics/run:先找 DerivedData(release workflow 的 archive),再找 ${SRCROOT}/../build/ios/SourcePackages(Flutter 驅動的建置)。
    • 兩邊都找不到就明確失敗,不會悄悄跳過上傳。否則 release 少了 dSYM 也沒人會發現,而 build(ios): upload and preserve Crashlytics symbols #631 為了避免這種情況,已經在 release workflow 裡檢查 dSYM 的 UUID。

測試

沒有新增測試。這是 Xcode build phase,用下面的方式驗證。

相關 issue

接續 #631。

怎麼驗

  • 把 script 從 pbxproj 抽出來(plutil -extract … raw),用假的目錄結構跑四種情況:
    • DerivedData 和 Flutter 兩種版面都有:執行 DerivedData 的那份。
    • 只有 Flutter 版面:執行 Flutter 的那份。
    • CONFIGURATION=Debug:直接 exit 0。
    • 兩邊都沒有:印出錯誤並 exit 1。
  • plutil -lint 通過。
  • 在全新的 worktree(全新的 DerivedData,沒有任何 SourcePackages 的 symlink 或快取)跑 tool/dev/test_ios.sh:419 個測試全過。修正前同樣的步驟會在這個 build phase 失敗。
  • tool/commit.sh --push 全部通過。
  • 沒有實際跑 release archive:那會用真的 Firebase 設定上傳符號。release 走的是第一個位置,和修正前相同。合併後第一次 snapshot release 時,請確認 dSYM 有上傳成功。

檢查清單

  • tool/check/commits.sh origin/main..HEAD 通過
  • 一個 commit 一件事
  • analyze 與測試通過(tool/commit.sh --push),iOS 原生測試 419 個通過
  • 沒有新的使用者可見字串
  • 沒有 UI 變更

@github-actions

Copy link
Copy Markdown

✅ OpenCodeReview: Review skipped: no items were selected.

@codecov

codecov Bot commented Oct 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.51%. Comparing base (565bad4) to head (a265242).

☔ 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.

@whes1015
whes1015 force-pushed the fix/ios-crashlytics-script branch from a265242 to 551c9a3 Compare October 22, 2026 00:29
@whes1015
whes1015 merged commit df3acca into main Oct 22, 2026
4 of 5 checks passed
@whes1015
whes1015 deleted the fix/ios-crashlytics-script branch October 22, 2026 00:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants