Skip to content

Releases: SwiftKitz/Datez

5.3.0

20 Feb 19:05

Choose a tag to compare

What's Changed

  • Platform minimums: Bumped watchOS from 8 to 9 and tvOS from 15 to 16. Both platforms require these versions for Task.sleep(for:) used in DiscreteTimer.
  • Platform verification: Added scripts/verify-platforms.sh — builds the library against all declared platform targets (iOS, macOS, tvOS, watchOS) to catch deployment target mismatches early.

Supported Platforms

Platform Minimum
iOS 16+
macOS 13+
tvOS 16+
watchOS 9+

5.2.0

20 Feb 15:44

Choose a tag to compare

What's Changed

  • DiscreteTimer: Removed @MainActor requirement — the class is now naturally Sendable by using a static runLoop method, making timerTask a let constant with no mutable state.
  • Tests: Migrated all 14 test suites from XCTest to Swift Testing (@Suite, @Test, #expect, #require, confirmation).
  • DiscreteTimer tests: Expanded from 1 to 5 tests — added coverage for minute time unit, date truncation, dealloc cancellation, and sequential tick firing.

5.1.1

20 Feb 07:36

Choose a tag to compare

What's Changed

  • Raised minimum iOS deployment target from 15 to 16, fixing a build error where DiscreteTimer used Task.sleep(for:) which requires iOS 16+.

5.1.0

20 Feb 05:03

Choose a tag to compare

What's Changed

  • Modernized DiscreteTimer with @MainActor and structured concurrency

    • Replaced @unchecked Sendable with @MainActor for correct isolation
    • Replaced recursive DispatchQueue.main.asyncAfter with a Task-based loop using Task.sleep(for:) for proper cancellation support
    • Timer task is now automatically cancelled in deinit
  • Bumped macOS minimum to 13 to support the Task.sleep(for:) API

Platform Minimums

Platform Minimum
iOS 15+
macOS 13+
tvOS 15+
watchOS 8+

v5.0.0

19 Feb 11:48

Choose a tag to compare

Swift 6 & Modernization

A major upgrade bringing full Swift 6 compatibility and modern platform support.

Breaking Changes

  • Swift 6 language mode enabled with strict concurrency checking
  • Platform minimums raised: iOS 15+, macOS 12+, tvOS 15+, watchOS 8+
  • CocoaPods support removed — use Swift Package Manager
  • CalendarComponents Equatable now compares all fields (including weekOfYear and weekOfMonth, previously omitted)

Concurrency Safety

  • CalendarComponents and DateView conform to Sendable
  • DiscreteTimer marked @unchecked Sendable with @Sendable closures
  • DiscreteTimer.TimeUnit conforms to Sendable

Improvements

  • Replaced force unwrap with guard/preconditionFailure in date arithmetic
  • Switch expressions in DiscreteTimer
  • Replaced deprecated NSTimeZone.default usage in tests
  • Updated CI to actions/checkout@v4
  • Fixed file headers referencing old project name

Mark Your Calendars

19 Dec 22:45

Choose a tag to compare

The library has been in private beta, and only made public after shipping it with my apps to the AppStore. You can rest assured it is battle tested.