diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 7706a3f..6187421 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -233,10 +233,37 @@ Running Gradle task 'assembleDebug'... 6.6s 设备侧截图、触觉感知结果与系统低电量测试由用户执行。 -#### 6.7 已知边界 +#### 6.7 iOS Xcode SPM 构建修复 + +- `Runner.xcscheme` 新增 “Bootstrap Flutter SPM Package” PreAction: + 按 `FLUTTER_ROOT → PATH → $HOME/flutter → /opt/homebrew` 兜底解析 + Flutter,执行 `flutter pub get`,找不到时明确报错并非 0 退出。 +- 原有 “Run Prepare Flutter Framework Script” 保留,并改为同一兜底链解析 + Flutter root 后执行 `xcode_backend.sh prepare`。 +- `xmllint --noout` 通过;`xcodebuild -list` 可识别 Runner scheme 与全部 + SPM source packages。 +- 在已有 SPM 包时完整执行: + `xcodebuild -project ios/Runner.xcodeproj -scheme Runner -configuration Debug -sdk iphoneos build` + 结果为 `BUILD SUCCEEDED`;日志确认执行 PreAction,输出 + `Resolving dependencies...`、`Got dependencies!`。 +- 删除 `ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage` + 后立即运行同一 `xcodebuild`,Xcode 在 “Resolve Package Graph” 阶段先失败, + 尚未运行 PreActions: + `Could not resolve package dependencies ... folder doesn’t exist`。 + 因此 **scheme-only 修复无法覆盖“包从未生成”的首次冷启动**; + 该冷启动自动生成场景标记为未通过验证。 +- 当前可靠口径:新克隆、`flutter clean` 或手动删除 ephemeral 后,先执行一次 + `flutter pub get`,再从 Xcode GUI 运行;正常构建期间 PreAction 会继续刷新包。 +- 修复提交:`cc037a2956848128c4899df1f5092fea44d3620b` + `fix(ios): 刷新 Flutter SPM 包后再准备框架` +- 合并:`ac706a4`,已推送 ReelShort `develop`。 + +#### 6.8 已知边界 - 未增加震动开关;触觉遵循系统设置。 - 不做忘记密码、Google/Apple 登录、隐私勾选或新 tab。 +- Xcode 首次包图解析早于 scheme PreActions;完全无 SPM 包时仍需先运行 + `flutter pub get`,本轮未通过 scheme 实现冷启动自动生成。 - K4 未开始。 --- diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 44c2995..d600932 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -1870,3 +1870,70 @@ To http://git.reelshort2.com/jianghaifeng/ReelShort.git ``` 解读:K6 已合并并推送,author/committer 均为 Zhou Weidong,未操作 main。 + +### 20.7 iOS Xcode SPM 构建修复(K6 收尾) + +叙述:只修改 `Runner.xcscheme` PreActions。新增 Python 无关的 shell +兜底链解析 Flutter,先 `flutter pub get`;原 prepare action 保留,并改为 +同一路径解析后执行 `xcode_backend.sh prepare`。 + +XML 校验: + +``` +$ xmllint --noout ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +(无输出,退出码 0) +``` + +清理 ephemeral 后直接 xcodebuild: + +``` +$ rm -rf ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage +$ xcodebuild -project ios/Runner.xcodeproj -scheme Runner -configuration Debug -sdk iphoneos build +Resolve Package Graph +the package at '.../FlutterGeneratedPluginSwiftPackage' cannot be accessed +xcodebuild: error: Could not resolve package dependencies +``` + +解读:Xcode 在运行 scheme PreActions 之前先解析 Package Graph,因此 +“包目录完全不存在”的首次冷启动无法仅靠 scheme PreAction 自动生成。 +这是 Xcode 执行顺序限制,不是 XML 语法错误。 + +使用 `flutter pub get` 恢复包后: + +``` +$ flutter pub get +Got dependencies! + +$ xcodebuild -list -project ios/Runner.xcodeproj +Resolved source packages: + FlutterGeneratedPluginSwiftPackage: .../ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage +... +``` + +完整重建精简日志: + +``` +$ xcodebuild -project ios/Runner.xcodeproj -scheme Runner -configuration Debug -sdk iphoneos build +Resolve Package Graph +Resolved source packages: +Run pre-actions + export SCHEME_ACTION_NAME="Bootstrap Flutter SPM Package" +Resolving dependencies... +Got dependencies! +** BUILD SUCCEEDED ** +``` + +解读:SPM 包存在时,PreAction 能成功刷新依赖,prepare 和完整 iPhoneOS +Debug 构建通过并完成签名。冷启动自动生成未通过验证,用户仍需在 +新克隆/`flutter clean`/手动删除 ephemeral 后先运行 `flutter pub get`。 + +Git: + +``` +cc037a2956848128c4899df1f5092fea44d3620b +fix(ios): 刷新 Flutter SPM 包后再准备框架 + +0cedaab..ac706a4 develop -> develop +``` + +解读:scheme 修复已合并推送;author/committer 均为 Zhou Weidong。