KMPCharts/.paul/ROADMAP.md
Trentin Davide d6f51cdef2 feat(ios): iOS build pipeline + XCFramework, fix K/Native source bugs
Modules: chart-realtime (commonMain, iosMain), root, .paul

- chart-realtime/build.gradle.kts: applyDefaultHierarchyTemplate() + XCFramework("ChartRealtime") over iosX64/iosArm64/iosSimulatorArm64, baseName CamelCase
- commonMain RealtimeChartState/CircularBuffer: switch to kotlin.concurrent.Volatile, add kotlin.jvm.JvmName import (OptionalExpectation)
- commonMain AxisRenderer: replace JVM-only String.format with multiplatform formatFixed/formatScientific/pow10 helpers
- iosMain Platform.ios.kt: NSDate() + timeIntervalSinceReferenceDate + 978_307_200s 1970-epoch offset (K/Native binding has no direct timeIntervalSince1970)
- gradle.properties: remove Linux JDK pin (rely on JAVA_HOME)
- .paul: phases plan, STATE+ROADMAP updates

Acceptance: A1 compile 3 iOS targets, A2 linkDebugFrameworkIosSimulatorArm64, A3 iosSimulatorArm64Test (33 tests, 0 failures), A4 assembleChartRealtimeXCFramework (ios-arm64 + ios-arm64_x86_64-simulator slices), A5 Android assembleRelease/publishToMavenLocal --dry-run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 12:45:21 +02:00

3.1 KiB

Roadmap: chart-realtime

Overview

KMP real-time chart library. Six phases v0.1.0 MVP shipped; v0.2.0 polish shipped.

Milestones

Milestone Version Status Completed
v0.1.0 MVP 0.1.0 ✓ Shipped 2026-05-20
v0.2.0 Polish 0.5.0-SNAPSHOT ✓ Shipped 2026-05-21
v0.3.0 iOS Build Pipeline 0.5.0-SNAPSHOT ✓ Shipped 2026-05-21
v0.4.0 (TBD) - Not started -

v0.1.0 — MVP (SHIPPED)

Status: ✓ Complete
Phases: 6 of 6 complete

Phases

Phase Name Status Completed
1 Module Scaffold ✓ Done 2026-05-20
2 Buffer + LoD ✓ Done 2026-05-20
3 State API ✓ Done 2026-05-20
4 Render Engine ✓ Done 2026-05-20
5 Demo App ✓ Done 2026-05-20
6 Polish + Docs ✓ Done 2026-05-20

Delivered: CircularBuffer, LodDecimator, RealtimeChart composable, basic AxisRenderer.


v0.2.0 — Polish (SHIPPED as v0.5.0-SNAPSHOT)

Status: ✓ Complete
Summary: .paul/phases/v0.2.0-plan-SUMMARY.md

Delivered

  • TieredBuffer (3-tier 1h ring buffer, MIN_MAX binning, zero-alloc)
  • LodMode enum (MIN_MAX, LTTB) — MEAN removed
  • LTTB render-time decimation (O(n) Largest-Triangle-Three-Buckets)
  • AxisLabelMode (INSIDE/BESIDE/HIDDEN) with chartLeft/chartBottom insets
  • T0-relative X-axis timestamps with mm:ss/hh:mm:ss formatting, negative support
  • Material3 dynamic theming (light/dark, wallpaper-based, API 31+)
  • Camera cutout / edge-to-edge support
  • Sensor domain layer (Clean Architecture)
  • Koin 4.0.0 DI wiring
  • Package rename: eu.henesis → dev.dtrentin
  • Git remote: ssh://git@3nt-git.duckdns.org:222/davide.trentin/KMPCharts.git
  • Sensor rate cap: 200Hz (5_000μs)

v0.3.0 — iOS Build Pipeline (SHIPPED)

Status: ✓ Complete Plan: .paul/phases/v0.3.0-ios-build-plan.md

Delivered

  • 3 iOS targets compile green (iosX64, iosArm64, iosSimulatorArm64)
  • applyDefaultHierarchyTemplate() wires iosMain/iosTest across targets
  • linkDebugFrameworkIosSimulatorArm64 green
  • iosSimulatorArm64Test green — 33 tests, 0 failures
  • XCFramework ChartRealtime produced (debug + release): ios-arm64 + ios-arm64_x86_64-simulator slices
  • Pre-existing compile bugs fixed:
    • @Volatilekotlin.concurrent.Volatile import
    • @JvmNamekotlin.jvm.JvmName import (OptionalExpectation)
    • String.format in AxisRenderer → manual formatFixed/formatScientific/pow10 helpers
    • NSDate.date()NSDate() + timeIntervalSinceReferenceDate + 1970 epoch offset
  • Android non-regression confirmed (assembleRelease, publishToMavenLocal --dry-run)
  • Local Mac config: removed Linux JDK pin from gradle.properties, added local.properties for Android SDK

v0.4.0 — Potential Scope (TBD)

Item Effort Priority
Publish to Maven Central / GitHub Packages M Medium
iOS demo app (SwiftUI) L Medium
CI workflow GitHub Actions (Android + iOS) M Medium
Compose compiler stability annotation on SignalConfig S Low
CocoaPods / SPM publication M Low

Roadmap updated: 2026-05-21