The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
### Added
* Support for Xcode 12.
* Support for Swift Package Manager in Xcode 11 and Xcode 12
### Changed
* Requires iOS 9 and higher to support Xcode 12
* `EKSerializer` now uses `serializeCollection:withRelationship:` method under the hood instead of `serializeCollection:withMapping:` to support custom serialization resolvers for collection of objects (thanks, @armandzwan)
### Deprecated
* `EKSerializer.serializeCollection:withMapping` in favor of `EKSerializer.serializeCollection:withRelationship`. This allows to support custom serialization resolvers when serializing collections. Similar deprecation applied to `serializeCollection:withMapping:fromContext:`.
#### Changed
* Has many relationships now correctly recognize nested custom mappings during serialization (thanks, @armandzwan)
* Added support for recognizing structs as native types, for example `CLLocationCoordinate2D` - #168(thanks, @sebastianludwig)
* Removed too strict generic constraints from `EKMapper` and `EKManagedObjectMapper` classes.
* `EKSerializer` no longer implies that serializable objects need to conform to `EKMappingProtocol` or `EKManagedMappingProtocol`.
* Fixed a bug in `EKSerializer` that prevented has one relationships from being properly serialized with non-nested keypaths.
* Fixed potential buffer overflow when using scalar Objective-C properties(#155, #156).
* Added support for installation using Carthage and Swift Package Manager.
* `ignoreMissingFields` property now properly differentiates between a truly missing from JSON field and field, that contains null, which is turned into NSNull.null instance by NSJSONSerialization.
* `mapKeyPath:toPoperty:withDateFormatter` method now creates blocks, that return nil instead of `NSNull` if received value is not a NSString or NSDate. `NSNull` instance however is left untouched.
- Added ability to ignore field during serialization - #148(thanks, @vladimirbebeshko)
- Improved types of arrays - #145(thanks, @Uncommon)
- EKRelationshipMapping has been made public for iOS target - #147(thanks, @dvs15)
- Fixed Xcode 8.3 warning in imports.
This release requires iOS 8 / macOS 10.9 / tvOS 9.0 / watchOS 2.0 and higher.
### New
- API was annotated with lightweight Objective-c generics and nullability annotations to be better imported in Swift.
- All relationship mappings, like `hasOne:forKeyPath:`, now return `EKRelationshipMapping` instead of void, and allow mapping customization via condition property.
- It's now possible to switch mappings based on passed representation, like so:
``` objective-c
EKRelationshipMapping * relationship = [mapping hasMany:Dog.class forKeyPath:@"animals" forProperty:@"pets"];
relationship.mappingResolver = ^EKObjectMapping *(id representation){
if ([representation[@"type"] isEqualToString:@"dog"]) {
return [Dog objectMapping];
} else {
return [Wolf objectMapping];
}
};
```
### Breaking API changes
- `EKObjectMapping` `hasOneMappings` and `hasManyMappings` are now arrays instead of being dictionaries.
- `EKRelationshipMapping` now has `mappingResolver` and `serializationResolver` properties instead of `objectClass` property of `EKMappingProtocol` type
- `NSDateFormatter` extension with `ek_dateFormatterForCurrentThread` is removed.
### Fixed
- Crash, that happened when `EKCoreDataImporter` tried to import Swift NSManagedObject subclass, that did not have primaryKeyMapping, which led to calling valueForKeyPath method with nil.