The changelog for Foil
. Also see the releases on GitHub.
- TBA
This release closes the 5.0.1 milestone.
- Addressed some potential edge cases and issues with optional types and failable initializers. (#95, @jessesquires)
- The default implementation of
UserDefaultsSerializable
for Swift built-in types (Int
,Double
,String
, etc.) now provides a non-failable initializer because these initializers cannot fail. This still satisfies the protocol requirements. - Added an
assertionFailure
to theUserDefaultsSerializable
implementation forRawRepresentable
to catch potential bugs when storing and fetching data after making changes to aRawRepresentable
type. - Documentation has been updated with thorough explanations of edge cases and considerations for
RawRepresentable
types. Please see theREADME
for further details.
- The default implementation of
This release closes the 5.0.0 milestone.
-
The
UserDefaultsSerializable
protocol has changed. Previously, it declared the initializerinit(storedValue:)
. It is now failable:init?(storedValue:)
. This change was necessary to accommodateCodable
types (see below). (#92, @jessesquires) -
Both property wrappers have been renamed.
@WrappedDefault
is now@FoilDefaultStorage
and@WrappedDefaultOptional
is now@FoilDefaultStorageOptional
. To migrate, you can simply find-and-replace these names. Nothing else has changed. (#73, #94, @jessesquires)
-
Support for
Codable
types. (Please don't abuse this. See the docs.) (#72, #92, @jessesquires) -
Added privacy manifest for iOS 17. (@jessesquires)
- Upgrade to Xcode 15
- Upgrade to Swift 5.9
This release closes the 4.0.1 milestone.
WrappedDefaultOptional
no longer crashes when the type stored inUserDefaults
does not match the type being requested,nil
is now returned instead. (#70, @ejensen)
This release closes the 4.0.0 milestone.
- The publisher projected by the property wrapper now sends values when user defaults changes from anywhere. Previously, only when using the property wrapper's setter would the projected publisher send a new value. (#61, @nolanw)
- Due to #61 (see above), there are some (potentially) breaking changes with key names. If any of your keys are named like the following examples and you need to observe changes, you will need to migrate your key names.
- Key names starting with an
@
character do not notify observers on updates.- Example:
@my-key-name
- Example:
- Key names containing a
.
character anywhere in the name do not notify observers on updates. (This is a side-effect ofKeyPaths
which include periods.)- Example:
com.myApp.my-key-name
- Example:
- Key names starting with an
- Upgrade to Xcode 14
- Upgrade to Swift 5.7
This release closes the 3.0.0 milestone.
- Refined the Combine API for responding to changes. This removes the need for the
.publisher(for:)
KVO API call. See the updated documentation for additional details. (#38, @JonnyBeeGod)
- Updated minimum deployment targets for all platforms
- iOS 13.0
- tvOS 13.0
- watchOS 6.0
- macOS 11.0
This release closes the 2.0.0 milestone.
- Implemented more succinct implicit initialization. See example below. (#36, @jessesquires)
// OLD
@WrappedDefault(keyName: "flag", defaultValue: true)
var flag: Bool
// NEW
@WrappedDefault(key: "flag")
var flag = true
- Various project infra updates: Xcode 13, Swift 5.5, etc. (#34, @jessesquires)
This release closes the 1.2.0 milestone.
-
Fix deployment target inconsistencies between CocoaPods and SwiftPM. (#18, #19, @kambala-decapitator, @jessesquires)
-
Lower deployment targets to support iOS/tvOS 9.0 and above. (#16, #19, @kambala-decapitator, @jessesquires)
This release closes the 1.1.0 milestone.
-
Added support for custom
RawRepresentable
types (#10, @basememara) -
Add default support for
UInt
(#3, #12, @jessesquires) -
Updated documentation with examples for observing changes in defaults (#4, #5, @basememara)
-
Updated documentation with examples for observing changes in defaults when using Foil (#4, #5, @basememara)
-
Minor documentation and internal library improvements (@jessesquires)
Initial release. 🎉