Skip to content

Releases: DevKitOrganization/DevFoundation

1.10.0

Choose a tag to compare

@prachigauriar prachigauriar released this 30 Jun 19:37

This release adds a new utility type called CurrentValueMulticaster. The type, similar to ObservableReference, stores a value and multicasts value updates via its values() async sequence. This type is preferable to use over ObservableReference when you’re not using SwiftUI or other observable types.

1.9.0

Choose a tag to compare

@prachigauriar prachigauriar released this 23 Mar 22:23
9df5e91

This release adds some conveniences for working with Dates with integral seconds and milliseconds.

1.8.1

Choose a tag to compare

@prachigauriar prachigauriar released this 19 Mar 04:40

This is a small release that fixes a compiler error with Xcode 26.4 RC1.

1.8.0

Choose a tag to compare

@prachigauriar prachigauriar released this 13 Jan 22:34
1764b4f

This release adds helpers for using remote content for localization.

  • Create a remote content bundle using Bundle.makeRemoteContentBundle(at:localizedStrings:)
  • Set the default remote content bundle using Bundle.defaultRemoteContentBundle
  • Access your remote localized strings (with a local fallback) using #remoteLocalizedString(_:bundle:) and #remoteLocalizedString(format:bundle:_:)

1.7.0

Choose a tag to compare

@prachigauriar prachigauriar released this 28 Oct 01:18

This is a small release that updates ExpiringValue to work better with DateProvider. Specifically, the two initializers spelled ExpiringValue.init(_:lifetimeDuration:) have been updated to include an any DateProvider parameter that defaults to DateProviders.current. The new initializers are spelled ExpiringValue.init(_:dateProvider:lifetimeDuration:).

1.6.0

Choose a tag to compare

@prachigauriar prachigauriar released this 24 Oct 21:33

This release introduces the LiveQuery subsystem, a set of types for managing search-as-you-type functionality and other query-based operations. Live queries automatically handle scheduling, deduplication, and caching as query fragments change.

  • LiveQuery is an Observable type that produces results as its query fragment changes. It coordinates between user input and result production, managing debouncing, duplicate removal, and error handling.
  • LiveQueryResultsProducer is a protocol that defines how to generate results for query fragments. Conforming types specify their scheduling strategy and implement result production logic.
  • LiveQuerySchedulingStrategy determines when results are generated: .passthrough for immediate results (best for cheap operations like local filtering), or .debounce(_:) to wait for typing to pause (best for expensive operations like network requests).

The live query subsystem is fully thread-safe, Sendable, and integrates seamlessly with SwiftUI through the Observation framework.

1.5.0

Choose a tag to compare

@prachigauriar prachigauriar released this 23 Oct 03:22
ff874c0

This release adds the UserSelection type, a generic structure that manages a user’s selection with a fallback to a default value. This type prioritizes explicit user choices over programmatic defaults while maintaining separate tracking of both values, ensuring user preferences are never accidentally overwritten by programmatic updates to defaults.

1.4.0

Choose a tag to compare

@prachigauriar prachigauriar released this 08 Oct 23:20

We’ve added Duration-based alternatives to all APIs that take a TimeInterval. Specifically,

  • We’ve added an overload of DateProvider.offset(by:) that takes a Duration.
  • We’ve added an overload of ExpiringValue.init(_:lifetimeDuration:) that takes a Duration.

1.3.0

Choose a tag to compare

@prachigauriar prachigauriar released this 08 Oct 16:25
  • We’ve added a computed property to Duration spelled timeInterval, which returns the duration as a TimeInterval.
  • We’ve updated the internal implementation of ContextualEventBusObserver to use an actor instead of a class with a dispatch queue. This should have no impact on consumers.

1.2.0

Choose a tag to compare

@prachigauriar prachigauriar released this 24 Sep 23:20
a2abdda

This release introduces the ObservableReference type and updates ExecutionGroup to enable greater flexibility and testability.

  • This version updates the minimum supported versions of Apple’s OSes to 26.
  • ObservableReference is a simple reference type that conforms to Observable. This enables easily observing changes to the value.
  • There are now two variants of ExecutionGroup.addTask(priority:operation:): the original version for non-throwing operations, and a new version for throwing operations. Both functions now have a generic parameter for the operation’s return type. Together, these changes allow us to return the created Task, which you can use to monitor its progress, get its result, or cancel it.