diff --git a/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v1.md b/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v1.md new file mode 100644 index 000000000..b17dd238e --- /dev/null +++ b/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v1.md @@ -0,0 +1,39 @@ +# STEP-082 iOS Native FieldRuntime Facade 与 XCFramework 发行基线 Codex 完成报告 v1 + +## 1. 执行结论 + +IMPLEMENTED / WAITING_MAC_XCFRAMEWORK_VALIDATION。公开 facade、生命周期、V4 转发、Bazel public-header 接线和 distribution 模板均已实现;不能写 CLOSED/PASS,因为正式 `MapLibre.dynamic.xcframework` 被任务基线既有 style-codegen 阻断,未生成可检查的 XCFramework 或 zip。 + +## 2. Git 基线 + +- branch:`particle/main` +- start commit:`3e03949d3411c830cfff4bf320cd350f5b6a7527` +- implementation commit:`d94f2bffd68fa01f941b8de051d435a2cde074c2` +- implementation message:`feat: add ios particle field runtime facade` +- submodule:开始时已记录,未修改。 + +## 3. 实际实现 + +- 新增 public `MLNParticleFieldRuntimeConfiguration`、`MLNParticleFieldRuntime` 与 `MLNMapView (ParticleFieldRuntime)`;MapView associated object 强持有,runtime 弱持有 MapView,replace 先 dispose 旧对象,dispose 幂等。 +- attach 与每条命令都重新验证 current style 内 source/layer 的真实 Core 类型和 source 关联;不缓存 `RasterArraySource*`。map 不可用、style reload、source/layer missing/type mismatch 均以独立 NSError fail-closed。 +- `NSData` QBIN V4 submit 复用 Core parser 和 `RasterArraySource::submitEncodedField`;ObjC enum 无损映射十个 Core submit result。color/particle binding、forecast time/play/speed 和两种 clear 均接通现有 Core。 +- `MLNParticleFieldRuntime.h` 进入 `MLN_IOS_SDK_HEADERS` 和 `Mapbox.h`;`MLNMapView_Private.h` 未加入 public list,只由 `.mm` 实现使用。 +- 新增 `release/maplibre-particle/ios/` 的 README、SwiftPM binary target 模板和 `NOT_BUILT` manifest;module/product 固定为 `MapLibre`。 + +## 4. 验证记录 + +- PASS:`git diff --cached --check`(implementation commit 前)。 +- PASS:iPhoneOS arm64 public-header standalone import syntax check。 +- PASS:iPhoneOS arm64 Objective-C++ facade syntax check;最终仅出现既有 private header 的 EAGL deprecation warning。CMake 生成的 Xcode project 已含 `MLNParticleFieldRuntime.mm`,并实际产生 `MLNParticleFieldRuntime.o/.d/.dia`。 +- BLOCKED:`bazel build //platform/ios:MapLibre.dynamic` 在 facade 编译前失败。`//:generated_style_code` 声明 `src/mbgl/style/layers/particle_validation_layer.cpp` 为输出,但 `scripts/generate-style-code.mjs` 不生成它;错误为 `output ... was not created`。这是当前基线 Core/Bazel codegen 声明问题,不在本 Step 允许修改范围。 +- 未生成 XCFramework:因此无法核验 Headers、binary public symbol、private header 排除、zip size/SHA-256;manifest 诚实标为 `NOT_BUILT`。 + +## 5. 范围与未完成事项 + +未修改 Android、RN、NavSea、QBIN V2、FieldProfile/BindingProjection、renderer/Metal physics,未重做 STEP-081,也未提前进入 STEP-083。必须先在独立授权范围修复/确认 Bazel style-codegen 基线,再从此实现 commit 重跑 XCFramework、检查 public header/symbol 并记录真实 zip SHA-256。 + +## 6. 工作树、提交与推送 + +任务书列出的 `docs/doxygen/doxygen-awesome-css`、`platform/ios/app/MBXAppDelegate.m`、`platform/windows/vendor/vcpkg` 均未触碰、未暂存。用户提供的未跟踪 STEP-082 任务书也未加入 commit:其原始行尾空格会使 `git diff --check` 失败,故未改写。 + +本报告将以第二个 scoped docs commit 提交,然后执行 `git push origin particle/main`;最终 push 结果和 Final HEAD 以提交后事实为准。