diff --git a/docs/50_Step记录/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_v1.md b/docs/50_Step记录/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_v1.md index 3f7b0ce7e..9f401e498 100644 --- a/docs/50_Step记录/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_v1.md +++ b/docs/50_Step记录/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_v1.md @@ -1,6 +1,6 @@ # STEP-082 iOS Native FieldRuntime Facade 与 XCFramework 发行基线 v1 -状态:IMPLEMENTED / WAITING_MAC_XCFRAMEWORK_VALIDATION +状态:CLOSED / PASS ## 目标与基线 @@ -14,19 +14,21 @@ - [x] style reload/source missing fail-closed 与 public header 无 Core/STL 泄漏。 - [x] XCFramework public header 构建图接线。 - [x] distribution-ready 模板和中文设计文档。 -- [ ] macOS XCFramework 成功构建、Headers/symbol/zip SHA-256 验证。 -- [ ] `git diff --check`、scoped commit、push 与最终 HEAD(在实现和文档收尾后执行)。 +- [x] macOS XCFramework 成功构建、Headers/symbol/zip SHA-256 验证。 +- [x] `git diff --check` 已通过;本次文档收尾后的 scoped closeout commit/push 由宿主执行并回填最终 hash。 ## 允许与禁止 允许修改 iOS public header/implementation、Bazel public export、release 模板以及指定中文文档。禁止改 QBIN V2、FieldProfile、BindingProjection、renderer/Metal physics、STEP-081 smoke、Android/RN/NavSea;本 Step 未修改这些范围。 -## 构建记录与阻塞 +## 最终构建记录与关闭依据 -macOS 15.7.7 / Xcode 26.3 / Bazel 8.6.0。已执行 `bazel build //platform/ios:MapLibre.dynamic`;在本 facade 编译前,基线 `//:generated_style_code` 失败:`bazel/core.bzl` 要求 generator 输出 `src/mbgl/style/layers/particle_validation_layer.cpp`,但 `scripts/generate-style-code.mjs` 不生成该文件。该 Core/Bazel codegen 问题不属于本 Step 允许范围,未以扩大修改规避。 +宿主已在真实实现提交 `136ed726cf749c24b3673c046581a38ef48be390`(`fix: close ios xcframework packaging blockers`)上完成阻塞修复和 macOS 验证。`bazel build //:generated_style_code` PASS;`bazel build //platform/ios:MapLibre.dynamic` PASS,最终日志 `/tmp/step082-host-maplibre-dynamic-final2.log` 含 `Build completed successfully`。 -iPhoneOS arm64 CMake `ios-sdk-static` 已通过:`cmake --build build-ios --target ios-sdk-static -- -quiet` 返回 0,实际生成 `MLNParticleFieldRuntime.o`;唯一输出是既有 private header 的 EAGL deprecation warning。未生成 zip,manifest 为 `NOT_BUILT`。 +产物为 `bazel-bin/platform/ios/MapLibre.dynamic.xcframework.zip`,大小 `24639200` bytes,SHA-256 为 `64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239`。`ios-arm64` 与 `ios-arm64_x86_64-simulator` slice 均导出 `Headers/MLNParticleFieldRuntime.h`,两份 `Mapbox.h` 均 import `MLNParticleFieldRuntime.h`;`MLNMapView_Private.h` 的 public export count 为 0。两 slice binary 均存在 `_OBJC_CLASS_$_MLNParticleFieldRuntime` 和 `_OBJC_CLASS_$_MLNParticleFieldRuntimeConfiguration`;device 架构为 arm64,simulator 架构为 x86_64+arm64。 + +本次仅完成工作树文档收尾;Git closeout commit/push 将由宿主在本文件和 v2 完成报告生成后执行,最终 hash 以宿主回填/最终回复为准。 ## 下一步 -先由独立允许范围处理 Bazel style-codegen 基线,随后在相同 commit 重跑 XCFramework 并检查 Headers、public ObjC symbol 和 zip SHA-256。通过前不得写 CLOSED/PASS 或进入 STEP-083。 +STEP-082 已关闭。远端发布仍未执行,manifest 的 artifact URL 保持 `LOCAL_BUILD`;后续发布必须另行上传并以发布后的 URL/校验结果更新 release 元数据。STEP-083 不因本记录自动开始。 diff --git a/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v2.md b/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v2.md new file mode 100644 index 000000000..775842a7a --- /dev/null +++ b/docs/报告/STEP-082_iOS_Native_FieldRuntime_Facade与XCFramework发行基线_Codex完成报告_v2.md @@ -0,0 +1,40 @@ +# STEP-082 iOS Native FieldRuntime Facade 与 XCFramework 发行基线 Codex 完成报告 v2 + +## 1. 执行结论 + +`CLOSED / PASS`。iOS public `MLNParticleFieldRuntime` facade、MapView-owned 生命周期、V4 forwarding、public header 导出和 XCFramework distribution 基线均已完成;宿主已在真实 implementation commit 上修复 packaging blocker,并完成实际 Bazel XCFramework 验证。 + +## 2. Git 与范围 + +- branch:`particle/main` +- 本轮确认的 implementation commit:`136ed726cf749c24b3673c046581a38ef48be390` +- implementation message:`fix: close ios xcframework packaging blockers` +- 本轮只修改 release manifest、STEP-082 Step 记录、`粒子开发记录.md` 和本报告。 +- 用户既有 dirty 未触碰:`docs/doxygen/doxygen-awesome-css`、`platform/ios/app/MBXAppDelegate.m`、`platform/windows/vendor/vcpkg`。 +- 两份未跟踪 STEP-082 任务书未修改、未纳入收尾范围。 + +Git closeout commit/push 将由宿主在本报告生成后完成,最终 hash 以宿主回填/最终回复为准;本报告不伪造未知 hash、push 或远端状态。 + +## 3. blocker 修复后的真实构建验证 + +- `bazel build //:generated_style_code`:PASS。 +- `bazel build //platform/ios:MapLibre.dynamic`:PASS。日志:`/tmp/step082-host-maplibre-dynamic-final2.log`;最终行为 `Build completed successfully`。 +- artifact:`bazel-bin/platform/ios/MapLibre.dynamic.xcframework.zip`。 +- size:`24639200` bytes。 +- SHA-256:`64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239`。 + +## 4. XCFramework 导出审计 + +- `ios-arm64` 和 `ios-arm64_x86_64-simulator` 均有 `Headers/MLNParticleFieldRuntime.h`。 +- 两个 slice 的 `Mapbox.h` 都 import `MLNParticleFieldRuntime.h`。 +- `MLNMapView_Private.h` public export count 为 `0`。 +- 两个 framework binary 均包含 `_OBJC_CLASS_$_MLNParticleFieldRuntime` 和 `_OBJC_CLASS_$_MLNParticleFieldRuntimeConfiguration`。 +- device slice 架构为 `arm64`;simulator slice 架构为 `x86_64+arm64`。 + +## 5. Release 元数据 + +`release/maplibre-particle/ios/release-manifest.json` 已更新为 `VALIDATED`。`distributionVersion` 保持 `6.28.0-particle.1`,module 保持 `MapLibre`,artifact 文件名不变;真实 size/SHA-256 与 source commit 已记录。artifact 尚未发布远端,URL 明确为 `LOCAL_BUILD`,不伪造可下载地址。 + +## 6. 未完成项与边界 + +本 Step 的本地 XCFramework build/export 验证已完成。远端 artifact 上传、远端 URL 和消费端下载回读不在本次范围;必须在真实发布后另行记录。未修改 Android、RN、NavSea、QBIN/FieldProfile/BindingProjection、renderer 或 Metal particle physics,也未重做 STEP-081。 diff --git a/release/maplibre-particle/ios/release-manifest.json b/release/maplibre-particle/ios/release-manifest.json index c15506570..4b3dcb608 100644 --- a/release/maplibre-particle/ios/release-manifest.json +++ b/release/maplibre-particle/ios/release-manifest.json @@ -1,14 +1,14 @@ { "schemaVersion": 1, - "status": "NOT_BUILT", + "status": "VALIDATED", "distributionVersion": "6.28.0-particle.1", "moduleName": "MapLibre", "artifact": { "fileName": "MapLibre.dynamic.xcframework.zip", - "url": "NOT_BUILT", - "sizeBytes": null, - "sha256": "NOT_BUILT" + "url": "LOCAL_BUILD", + "sizeBytes": 24639200, + "sha256": "64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239" }, - "sourceCommit": "3e03949d3411c830cfff4bf320cd350f5b6a7527", - "notes": "STEP-082 created the template only. Populate artifact fields only from a successful macOS XCFramework build." + "sourceCommit": "136ed726cf749c24b3673c046581a38ef48be390", + "notes": "STEP-082 local Bazel XCFramework build has been validated. The artifact has not been published; no remote URL is available." } diff --git a/粒子开发记录.md b/粒子开发记录.md index 6ab1be21c..0579c427e 100644 --- a/粒子开发记录.md +++ b/粒子开发记录.md @@ -836,3 +836,10 @@ Android V3-08 单次综合验收已完成并关闭。Native `13.4.1-particle.2` - `MLNParticleFieldRuntime.h` 已加入 iOS Bazel SDK public headers 和 `Mapbox.h`;`MLNMapView_Private.h` 仍仅为 implementation private include。建立 `release/maplibre-particle/ios/` SwiftPM template/manifest,因 XCFramework zip 未生成而明确 `NOT_BUILT`。 - macOS Bazel `//platform/ios:MapLibre.dynamic` 在 facade 编译前被既有 style-codegen 输出声明阻断:`particle_validation_layer.cpp` 被列为生成输出但 generator 不生成;未越权改 Core/codegen。iPhoneOS arm64 CMake `ios-sdk-static` 编译已启动,最终状态以 Step/完成报告记录为准;在 XCFramework 成功验证前,STEP-082 保持 `IMPLEMENTED / WAITING_MAC_XCFRAMEWORK_VALIDATION`。 - 随后 `cmake --build build-ios --target ios-sdk-static -- -quiet` 返回 0,完成 iPhoneOS arm64 static framework build,且 `MLNParticleFieldRuntime.o` 已由真实 Xcode build graph 生成;唯一 warning 是已有 `MLNMapView_Private.h` 的 EAGL deprecation。Bazel XCFramework codegen blocker 未改变,未产出 zip/SHA-256。 + +### 2026-09-18 STEP-082 XCFramework Bazel 阻塞修复与最终关闭 + +- 宿主在真实 implementation commit `136ed726cf749c24b3673c046581a38ef48be390`(`fix: close ios xcframework packaging blockers`)上修复 iOS XCFramework packaging blocker;`bazel build //:generated_style_code` 与 `bazel build //platform/ios:MapLibre.dynamic` 均 PASS,后者最终日志为 `/tmp/step082-host-maplibre-dynamic-final2.log`,以 `Build completed successfully` 结束。 +- 真实本地产物 `bazel-bin/platform/ios/MapLibre.dynamic.xcframework.zip`:`24639200` bytes,SHA-256=`64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239`。device `ios-arm64` 和 simulator `ios-arm64_x86_64-simulator` 都有 public `Headers/MLNParticleFieldRuntime.h`,两份 `Mapbox.h` 均导入该 header。 +- 两 slice binary 都有 `_OBJC_CLASS_$_MLNParticleFieldRuntime` 和 `_OBJC_CLASS_$_MLNParticleFieldRuntimeConfiguration`;`MLNMapView_Private.h` public export count=0。device 为 arm64,simulator 同时含 x86_64 与 arm64。 +- iOS release manifest 现为 `VALIDATED`,distributionVersion 仍为 `6.28.0-particle.1`、module 为 `MapLibre`;artifact 尚未发布,URL 明确为 `LOCAL_BUILD`。STEP-082 CLOSED / PASS;Git closeout commit/push 将由宿主在本轮文档生成后完成,最终 hash 以宿主回填/最终回复为准。