Awesome
CoreData Kit
<div align="center"> <img width="600px" src="./Extras/Images/Banner-1.png" alt="CypherPoetCoreDataKit Header Image"> </div> <p> <img src="https://img.shields.io/badge/Swift-5.5-F06C33.svg" /> <img src="https://img.shields.io/badge/iOS-15.0+-865EFC.svg" /> <img src="https://img.shields.io/badge/iPadOS-15.0+-F65EFC.svg" /> <img src="https://img.shields.io/badge/macOS-12.0+-179AC8.svg" /> <img src="https://img.shields.io/badge/tvOS-15.0+-41465B.svg" /> <img src="https://img.shields.io/badge/watchOS-8.0+-1FD67A.svg" /> <img src="https://img.shields.io/badge/License-MIT-blue.svg" /> <img src="https://github.com/CypherPoet/CypherPoetCoreDataKit/workflows/Build%20&%20Test/badge.svg" /> <a href="https://github.com/apple/swift-package-manager"> <img src="https://img.shields.io/badge/spm-compatible-brightgreen.svg?style=flat" /> </a> <a href="https://twitter.com/cypher_poet"> <img src="https://img.shields.io/badge/Contact-@cypher_poet-lightgrey.svg?style=flat" alt="Twitter: @cypher_poet" /> </a> </p> <p align="center">A collection of utilities for building Core Data-backed applications in Swift.
<p />🚧 Disclaimer
This library is still very much a WIP as I study/experiment with/develop best practices, patterns, and affordances for Core Data after the releases of Swift 5.5 and "SwiftUI 3.0". Please treat it as a guideline/reference for the time being 🙂.
Features
- ✅ A
CoreDataManager
that handles setting up a "Core Data Stack". - ✅ A
rich set of utilities
for performing Core Data migrations. - ✅ A
FetchedResultsControlling
protocol that helps architectNSFetchedResultsController
instances and extract data from theirNSFetchRequest
results. - ✅ Utilities for composing
NSPredicate
instances in a strongly-typed fashion. - ✅ Strongly-typed errors under types like
CoreDataManager
,PersistentStoreMigrator
and more. - ✅
NSPersistentStore
helpers for using different SQLite writing locations in development and production.
Installation
Xcode Projects
Select File
-> Swift Packages
-> Add Package Dependency
and enter https://github.com/CypherPoet/CypherPoetCoreDataKit
.
Swift Package Manager Projects
You can add this project as a package dependency in your Package.swift
file:
let package = Package(
//...
dependencies: [
.package(
url: "https://github.com/CypherPoet/CoreDataKit",
.exact("0.0.21")
),
],
//...
)
From there, refer to the CoreDataKit
"product" delivered by the CypherPoetCoreDataKit
"package" inside of any of your project's target dependencies:
targets: [
.target(
name: "YourLibrary",
dependencies: [
.product(name: "CoreDataKit", package: "CypherPoetCoreDataKit"),
],
...
),
...
]
Then simply import CoreDataKit
wherever you’d like to use it.
Usage
Currently, usage of these utilities is best demonstrated by the various example applications here. But a few pointers...
Dynamically initializing a Core Data Stack for your app depending on whether it's running for production or for Xcode Previews.
Setting up the Core Data stack on launch
<!-- ### [Advanced Fetching]() (adapted from _Core Data by Tutorials_) -->Core Data Migrations
Requirements
- Xcode 13.0+ (Recommended)
📜 Generating Documentation
Documentation is generated by Swift Doc. Installation instructions can be found here, and as soon as you have it set up, docs can be generated simply by running ./Scripts/generate-html-docs.zsh
from the command line.
📝 Note that this will only generate a .build/documentation
folder for you to view locally. This folder is being ignored by git
, and a GitHub action exists to automatically generate docs at the root level and serve them on the project's gh-pages
branch.
🏷 License
CypherPoetCoreDataKit
is available under the MIT license. See the LICENSE file for more info.