File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -465,8 +465,10 @@ jobs:
465465 echo "::error::altool exited with status $STATUS" >&2
466466 exit "$STATUS"
467467 fi
468- if grep -E '^[0-9-]+ [0-9:.]+ ERROR' "$LOG" >/dev/null; then
469- echo "::error::altool reported ERROR despite exit 0 — failing step" >&2
468+ # 上传链路的 500 等瞬时错误会被 altool 内部重试,成功后日志里仍留有 ERROR 行,
469+ # 因此不能仅凭 ERROR 关键字判失败;以 "UPLOAD SUCCEEDED with no errors" 作为成功依据。
470+ if ! grep -q 'UPLOAD SUCCEEDED with no errors' "$LOG"; then
471+ echo "::error::altool did not report UPLOAD SUCCEEDED — failing step" >&2
470472 grep -E '^[0-9-]+ [0-9:.]+ ERROR' "$LOG" >&2 || true
471473 exit 1
472474 fi
Original file line number Diff line number Diff line change 11distributionBase =GRADLE_USER_HOME
22distributionPath =wrapper/dists
3+ distributionUrl =https\://services.gradle.org/distributions/gradle-8.14.3-all.zip
4+ networkTimeout =10000
5+ validateDistributionUrl =true
36zipStoreBase =GRADLE_USER_HOME
47zipStorePath =wrapper/dists
5- distributionUrl =https\://services.gradle.org/distributions/gradle-8.12-all.zip
Original file line number Diff line number Diff line change @@ -19,8 +19,8 @@ pluginManagement {
1919
2020plugins {
2121 id(" dev.flutter.flutter-plugin-loader" ) version " 1.0.0"
22- id(" com.android.application" ) version " 8.9 .1" apply false
23- id(" org.jetbrains.kotlin.android" ) version " 2.1.0 " apply false
22+ id(" com.android.application" ) version " 8.11 .1" apply false
23+ id(" org.jetbrains.kotlin.android" ) version " 2.2.20 " apply false
2424 id(" com.google.gms.google-services" ) version " 4.4.2" apply false
2525}
2626
Original file line number Diff line number Diff line change 559559- 语言标识参与提醒快照去重(` locale|<tag> ` ),切换语言后即使提醒不变也会重新调度。
560560- 回归测试:` download_provider_test.dart ` (fr_CN 回退)、` background_file_download_service_test.dart ` (解析抛异常仍可入队)、` review_reminder_service_test.dart ` 「本地化文案」组、` paddle_billing_repository_test.dart ` (checkout locale 注入)、` settings_provider_test.dart ` 「resolveUiLocale」组。
561561- 排查日志:` [BackgroundFileDownload] plugin initialization failed ` ,` cause=AppLocalizations.delegate failed to load unsupported locale "<locale>" ` 。
562+
563+ ### 7.35 Release 工作流失败:Flutter SDK 对 Gradle / AGP / Kotlin 有最低版本门槛,升级 Flutter 后构建直接中止
564+
565+ - 根因:CI 的 Flutter 升到 3.47.9 后,` flutter-gradle-plugin ` 校验项目的 Gradle ≥ 8.14、AGP ≥ 8.11.1、Kotlin ≥ 2.2.20,原配置(Gradle 8.12 / AGP 8.9.1 / Kotlin 2.1.0)全部不满足,` app/build.gradle.kts ` 应用插件时即失败。三项门槛按顺序逐个暴露,需要一次性对齐。
566+ - 规则:升级 ` FLUTTER_VERSION ` 时,先在本地 ` ./gradlew help ` 验证 Android 配置阶段,再打 tag;不要只看 Flutter 版本号。
567+ - 排查日志:` Your project's Gradle version (8.12.0) is lower than Flutter's minimum supported version ` 。
568+
569+ ### 7.36 iOS 上传 altool 日志残留瞬时 500 的 ERROR 行 → 误判失败(上传实际已成功)
570+
571+ - 根因:App Store Connect 偶发 500 时 altool 内部重试并最终 ` UPLOAD SUCCEEDED with no errors ` ,但日志里仍保留 ` ERROR: ` 行。工作流以「日志含 ERROR 即失败」判定,把已成功的上传标红。
572+ - 规则:判定上传成功以 ` UPLOAD SUCCEEDED with no errors ` 为准,不以 ERROR 关键字为准;该构建号已入库,重跑同一 commit 会因构建号重复失败,需要新 commit 打新 tag。
573+ - 同一次上传 Apple 还邮件提示 ` ITMS-90683 ` :` file_picker ` 等依赖引入相机 API,Info.plist 缺 ` NSCameraUsageDescription ` 即使应用不使用相机也会被拒,须补齐并同步 ` en ` / ` zh-Hans ` 的 InfoPlist.strings。
Original file line number Diff line number Diff line change 8787 <true />
8888 <key >UIFileSharingEnabled </key >
8989 <true />
90+ <key >NSCameraUsageDescription </key >
91+ <string >This app needs camera access only when you choose to capture a photo or video for your study materials. </string >
9092 <key >NSPhotoLibraryUsageDescription </key >
9193 <string >This app needs access to your photo library to select audio files. </string >
9294 <key >NSAppleMusicUsageDescription </key >
Original file line number Diff line number Diff line change 11"CFBundleName" = "Echo Loop";
2+ "NSCameraUsageDescription" = "This app needs camera access only when you choose to capture a photo or video for your study materials.";
23"NSMicrophoneUsageDescription" = "This app needs microphone access so you can record your spoken English practice.";
34"NSSpeechRecognitionUsageDescription" = "This app needs speech recognition access to compare your spoken English with the target sentence.";
Original file line number Diff line number Diff line change 11"CFBundleName" = "Echo Loop";
2+ "NSCameraUsageDescription" = "仅当你选择拍摄照片或视频作为学习材料时,才需要相机权限。";
23"NSMicrophoneUsageDescription" = "需要麦克风权限,以便录下你的英语跟读。";
34"NSSpeechRecognitionUsageDescription" = "需要语音识别权限,以便对比你的英语跟读和目标句子。";
You can’t perform that action at this time.
0 commit comments