KMPCharts/.paul/STATE.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

4.1 KiB
Raw Blame History

Project State

Project Reference

See: .paul/PROJECT.md (updated 2026-05-21)

Core value: Android devs plot 200Hz+ multi-signal sensor data without frame drops Current focus: v0.3.0 iOS build pipeline SHIPPED — 33 tests pass on iOS sim, XCFramework produced

Current Position

Milestone: v0.3.0-ios-build Phase: 6 of 6 — Complete Plan: .paul/phases/v0.3.0-ios-build-plan.md Status: Complete Last activity: 2026-05-21 — iOS pipeline: compile 3 targets, link debug framework, iosSimulatorArm64Test green (33 tests, 0 failures), XCFramework "ChartRealtime" output (ios-arm64 + ios-arm64_x86_64-simulator slices). Android non-regression confirmed.

Progress:

  • v0.1.0 milestone: [██████████] 100% SHIPPED
  • v0.2.0 milestone: [██████████] 100% SHIPPED
  • v0.3.0 milestone: [██████████] 100% SHIPPED

Loop Position

PLAN ──▶ APPLY ──▶ UNIFY
  ✓        ✓        ✓     [v0.3.0 iOS build SHIPPED — v0.5.0-SNAPSHOT]

Accumulated Context

Decisions

Decision Phase Impact
Canvas custom rendering (no lib) Init Core architecture
Render/data decoupled withFrameNanos Init RenderLoop design
TieredBuffer over flat ring v0.2.0 O(N×constant) memory, 20+ signals
MIN_MAX tier binning (not MEAN) v0.2.0 Composable, no artifacts at tier boundaries
MEAN removed from LodMode v0.2.0 Cleaner API, no synthetic values
LodDecimator as class (pre-alloc scratch) v0.2.0 Zero GC at render time
Sensor cap 200Hz (5_000μs) v0.2.0 Thermal/battery optimization
Package dev.dtrentin v0.2.0 Personal project, not company
iOS targets shipped v0.3.0 iosX64/iosArm64/iosSimulatorArm64 + Platform.ios.kt
iOS build pipeline green v0.3.0 iOS 33 tests pass on iOS sim, XCFramework "ChartRealtime" produced
timeIntervalSinceReferenceDate + epoch offset v0.3.0 iOS K/Native binding doesn't expose timeIntervalSince1970; use 978_307_200s constant
applyDefaultHierarchyTemplate() explicit v0.3.0 iOS iosMain/iosTest auto-wired across 3 iOS targets
Manual format helpers in AxisRenderer v0.3.0 iOS String.format JVM-only; private formatFixed/formatScientific/pow10
kotlin.concurrent.Volatile + kotlin.jvm.JvmName imports v0.3.0 iOS Multiplatform replacements for JVM-default annotations

Deferred Issues

Issue Origin Effort Revisit
Dirty flag render (skip frame if no new data) v0.2.0 S ✓ v0.3.0
targetFps=30 default v0.2.0 S ✓ v0.3.0
iOS expect/actual beyond currentTimeMs Init L ✓ v0.3.0
KDoc on public API surface v0.2.0 M ✓ v0.3.0
README with integration example v0.2.0 S ✓ v0.3.0
iOS build/test pipeline (compile + iosTest + XCFramework) v0.3.0 plan M ✓ v0.3.0 iOS
Publish to Maven Central / GitHub Packages v0.2.0 M v0.4.0
iOS demo app (SwiftUI) v0.3.0 iOS L v0.4.0
CI workflow for iOS build (GitHub Actions) v0.3.0 iOS M v0.4.0
Compose compiler unstable warning on SignalConfig v0.3.0 iOS S v0.4.0

Blockers/Concerns

None.

Session Continuity

Last session: 2026-05-21 (iOS build pipeline) Stopped at: v0.3.0 iOS shipped. All 5 acceptance items pass (A1-A5). 33 tests green on iOS sim. ChartRealtime.xcframework at chart-realtime/build/XCFrameworks/release/. Next action: Define v0.4.0 scope (Maven Central publish, iOS demo app, CI) Resume context:

  • Library: chart-realtime, published dev.dtrentin:chart-realtime:0.5.0-SNAPSHOT to mavenLocal
  • App: AndroidChartsApp consuming library, builds clean
  • Remote: ssh://git@3nt-git.duckdns.org:222/davide.trentin/KMPCharts.git
  • Package: dev.dtrentin.chart
  • iOS: 3 targets compile, link, test (33 tests). XCFramework name ChartRealtime, baseName CamelCase.
  • Local Mac setup: Xcode.app at /Applications/Xcode.app, iOS sim runtime installed (iPhone 17 family), local.properties points to ~/Library/Android/sdk, JDK 21 Temurin via JAVA_HOME.

STATE.md — Updated after every significant action