Skip to content

ThemeKit 1.3.0 — iOS 15.6 deployment floor

Latest

Choose a tag to compare

@isamercan isamercan released this 21 Jul 05:22

Lower the iOS deployment floor: iOS 17 → iOS 15.6 (macOS stays 14)

The whole package (Core + ThemeKit + Travel) now compiles clean at the iOS 15.6 floor — 0 availability errors. Additive for existing 17+ consumers (the support matrix only widens). Implements ADR-0007; merged in #342.

⚠️ Migration (minor — two recorded exceptions)

  1. Compile-time: reading a presenter via the object environment no longer compiles — @Environment(SheetPresenter.self) (and DrawerPresenter/FeedbackPresenter) → @EnvironmentObject.
  2. SILENT runtime — check every owned instance: @State on a presenter or FormValidator still compiles but stops updating views → replace with @StateObject (SheetPresenter, DrawerPresenter, FeedbackPresenter, TourController, UploadController, FormValidator). This is the sharpest edge — grep your code for @State next to those six types.
  3. ThemeKitCalendar add-on now requires iOS 17+ (its Almanac / HorizonCalendar dependency declares an iOS-17 floor; SwiftPM can't elevate one target above the package floor). The dependency-free core and every other add-on/edition support 15.6; the Calendar trait defaults off, so default resolution is unaffected.

Unchanged: @Environment(\.theme), .themeKit(), .theme(_:) per-subtree overrides, and every component's public API.

What changed under the hood

  • Core observation @ObservableObservableObject/@Published (Observation doesn't back-deploy below 17); per-subtree theming, the .id(revision) rebuild, and the live language switch preserved and test-pinned.
  • Reimplementations behind unchanged public APIs (single-path, every OS): Charts → Canvas/Path (render-visible), custom Layout (FlowLayout/Masonry/Flex) → measured, ViewThatFitsAdaptiveFit, Grid → rows (BoardingPass), Gauge → ring/bar, LocationCard map, KanbanBoard drag-drop, ticket-notch → arc geometry. New Core Shape polyfills ThemeAnyShape / ThemeUnevenRoundedRect.
  • Graceful-degrade (named, directly-tested legacy branches) for pure-polish iOS-16/17 API: sheet presentationDetents, ShareLink, .symbolEffect, scroll-target snapping, .onKeyPress.
  • Demo app migrated to the floor (deployment target 15.6, builds & deep-link verified).
  • CI: advisory ios-floor compile-floor canary lane (ADR-0007 §D5 — the compiler is the airtight 15.6 guardrail since no iOS 15 sim runtime exists under the tools-6.2 toolchain).

Verification

swift build clean · swift test 366 (macOS) + 462 (iOS sim), 0 failures · full-package floor canary 0 availability errors · all CI gates green on #342 (incl. the iOS 15.6 floor canary). check-api clean (31 breakages, all allowlisted — FlowLayout Layout-conformance removal, presenter Observable removals, incidental Charts Array conformances).

Install

.package(url: "https://github.com/isamercan/ThemeKit.git", from: "1.3.0"),

📄 Full detail in the CHANGELOG.