mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-29 22:01:56 +02:00
update README
This commit is contained in:
89
README.md
89
README.md
@@ -19,8 +19,8 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
|
|||||||
<br />
|
<br />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* **Swift 4.2:** iOS 10+ / macOS 10.12+ / watchOS 3.0+ / tvOS 10.0+
|
* **Swift 5.0:** iOS 10+ / macOS 10.12+ / watchOS 3.0+ / tvOS 10.0+
|
||||||
* Other Swift versions: [Swift 3.2(version 4.2.3)](https://github.com/JohnEstropia/CoreStore/tree/4.2.3)
|
* Previously supported Swift versions: [Swift 3.2](https://github.com/JohnEstropia/CoreStore/tree/4.2.3), [Swift 4.2](https://github.com/JohnEstropia/CoreStore/tree/6.2.1)
|
||||||
|
|
||||||
Upgrading from CoreStore 5.x (min iOS 9) to 6.x (min iOS 10)? Check out the [new features](#features) and make sure to read the [Change logs](https://github.com/JohnEstropia/CoreStore/releases).
|
Upgrading from CoreStore 5.x (min iOS 9) to 6.x (min iOS 10)? Check out the [new features](#features) and make sure to read the [Change logs](https://github.com/JohnEstropia/CoreStore/releases).
|
||||||
|
|
||||||
@@ -59,7 +59,6 @@ CoreStore was (and is) heavily shaped by real-world needs of developing data-dep
|
|||||||
- [Setting up](#setting-up)
|
- [Setting up](#setting-up)
|
||||||
- [In-memory store](#in-memory-store)
|
- [In-memory store](#in-memory-store)
|
||||||
- [Local store](#local-store)
|
- [Local store](#local-store)
|
||||||
- [iCloud store](#icloud-store)
|
|
||||||
- [Migrations](#migrations)
|
- [Migrations](#migrations)
|
||||||
- [Declaring model versions](#declaring-model-versions)
|
- [Declaring model versions](#declaring-model-versions)
|
||||||
- [Starting migrations](#starting-migrations)
|
- [Starting migrations](#starting-migrations)
|
||||||
@@ -313,66 +312,6 @@ public protocol LocalStorage: StorageInterface {
|
|||||||
```
|
```
|
||||||
If you have custom `NSIncrementalStore` or `NSAtomicStore` subclasses, you can implement this protocol and use it similarly to `SQLiteStore`.
|
If you have custom `NSIncrementalStore` or `NSAtomicStore` subclasses, you can implement this protocol and use it similarly to `SQLiteStore`.
|
||||||
|
|
||||||
### iCloud Store
|
|
||||||
> ⚠️**Important:** The iCloud Store is being deprecated. Please use with caution. If you have any concerns please do send me a message on [Twitter](https://twitter.com/JohnEstropia) or on the [CoreStore Slack Team](http://swift-corestore-slack.herokuapp.com/)
|
|
||||||
|
|
||||||
As a counterpart to `LocalStorage`, the `CloudStorage` protocol abstracts stores managed in the cloud. CoreStore currently provides the concrete class `ICloudStore`. Unlike `InMemoryStore` and `SQLiteStore` though, the `ICloudStore`'s initializer may return `nil` if the iCloud container could not be located or if iCloud is not available on the device:
|
|
||||||
```swift
|
|
||||||
guard let storage = ICloudStore(
|
|
||||||
ubiquitousContentName: "MyAppCloudData", // the name of the store in iCloud
|
|
||||||
ubiquitousContentTransactionLogsSubdirectory: "logs/config1", // optional. Subdirectory path for the transaction logs
|
|
||||||
ubiquitousContainerID: "iCloud.com.mycompany.myapp.containername", // optional. The container if your app has multiple ubiquity container identifiers in its entitlements
|
|
||||||
ubiquitousPeerToken: "9614d658014f4151a95d8048fb717cf0", // optional. A per-application salt to allow multiple apps on the same device to share a Core Data store integrated with iCloud
|
|
||||||
configuration: "Config1", // optional. Use entities from the "Config1" configuration in the .xcdatamodeld file
|
|
||||||
cloudStorageOptions: .recreateLocalStoreOnModelMismatch // optional. Provides settings that tells the DataStack how to setup the persistent store
|
|
||||||
) else {
|
|
||||||
// The iCloud container could not be located or if iCloud is not available on the device.
|
|
||||||
// Handle appropriately
|
|
||||||
return
|
|
||||||
}
|
|
||||||
CoreStore.addStorage(,
|
|
||||||
storage,
|
|
||||||
completion: { result in
|
|
||||||
switch result {
|
|
||||||
case .success(let storage): // ...
|
|
||||||
case .failure(let error): // ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
If your app is using iCloud stores, you may want to be notified of particular iCloud events. The `ICloudStoreObserver` functions are all optional, so you may implement only the ones your app is interested in:
|
|
||||||
```swift
|
|
||||||
public protocol ICloudStoreObserver: class {
|
|
||||||
func iCloudStoreWillFinishUbiquitousStoreInitialImport(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreDidFinishUbiquitousStoreInitialImport(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreWillAddAccount(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreDidAddAccount(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreWillRemoveAccount(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreDidRemoveAccount(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreWillRemoveContent(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
func iCloudStoreDidRemoveContent(storage storage: ICloudStore, dataStack: DataStack)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
To register your `ICloudStoreObserver`, call `addObserver(_:)` on the `ICloudStore` instance:
|
|
||||||
|
|
||||||
```swift
|
|
||||||
guard let storage = ICloudStore(/* ... */) else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
storage.addObserver(self) // assuming self implements ICloudStoreObserver
|
|
||||||
CoreStore.addStorage(,
|
|
||||||
storage,
|
|
||||||
completion: { result in
|
|
||||||
switch result {
|
|
||||||
case .success(let storage): // ... You may also call storage.addObserver(_:) here
|
|
||||||
case .failure(let error): // ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
```
|
|
||||||
The `ICloudStore` only keeps weak references of the registered observers. You may call `removeObserver(_:)` for precise deregistration, but `ICloudStore` automatically removes deallocated observers.
|
|
||||||
|
|
||||||
|
|
||||||
## Migrations
|
## Migrations
|
||||||
|
|
||||||
@@ -1675,14 +1614,13 @@ CoreStore.perform(
|
|||||||
<td><pre lang=objc>
|
<td><pre lang=objc>
|
||||||
[CSCoreStore beginAsynchronous:^(CSAsynchronousDataTransaction *transaction) {
|
[CSCoreStore beginAsynchronous:^(CSAsynchronousDataTransaction *transaction) {
|
||||||
// ...
|
// ...
|
||||||
[transaction commitWithCompletion:^(CSSaveResult *result) {
|
[transaction
|
||||||
if (result.isSuccess) {
|
commitWithSuccess:^{
|
||||||
NSLog(@"Done");
|
NSLog(@"Done");
|
||||||
}
|
}
|
||||||
else if (result.isFailure) {
|
failure: ^(CSError *error) {
|
||||||
NSLog(@"error: %@", result.error);
|
NSLog(@"error: %@", result.error);
|
||||||
}
|
}];
|
||||||
}];
|
|
||||||
}];
|
}];
|
||||||
</pre></td>
|
</pre></td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -1863,7 +1801,8 @@ Once the version lock is set, any changes in the properties or to the model will
|
|||||||
# Installation
|
# Installation
|
||||||
- Requires:
|
- Requires:
|
||||||
- iOS 10 SDK and above
|
- iOS 10 SDK and above
|
||||||
- Swift 4.2 (Xcode 10+)
|
- Swift 5.0 (Xcode 10+)
|
||||||
|
- For previous Swift versions: [Swift 3.2](https://github.com/JohnEstropia/CoreStore/tree/4.2.3), [Swift 4.2](https://github.com/JohnEstropia/CoreStore/tree/6.2.1)
|
||||||
- Dependencies:
|
- Dependencies:
|
||||||
- *None*
|
- *None*
|
||||||
- Other notes:
|
- Other notes:
|
||||||
@@ -1872,7 +1811,7 @@ Once the version lock is set, any changes in the properties or to the model will
|
|||||||
### Install with CocoaPods
|
### Install with CocoaPods
|
||||||
In your `Podfile`, add
|
In your `Podfile`, add
|
||||||
```
|
```
|
||||||
pod 'CoreStore', '~> 6.1'
|
pod 'CoreStore', '~> 6.3'
|
||||||
```
|
```
|
||||||
and run
|
and run
|
||||||
```
|
```
|
||||||
@@ -1883,7 +1822,7 @@ This installs CoreStore as a framework. Declare `import CoreStore` in your swift
|
|||||||
### Install with Carthage
|
### Install with Carthage
|
||||||
In your `Cartfile`, add
|
In your `Cartfile`, add
|
||||||
```
|
```
|
||||||
github "JohnEstropia/CoreStore" >= 6.2.1
|
github "JohnEstropia/CoreStore" >= 6.3.0
|
||||||
```
|
```
|
||||||
and run
|
and run
|
||||||
```
|
```
|
||||||
@@ -1894,7 +1833,7 @@ This installs CoreStore as a framework. Declare `import CoreStore` in your swift
|
|||||||
#### Install with Swift Package Manager:
|
#### Install with Swift Package Manager:
|
||||||
```swift
|
```swift
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/JohnEstropia/CoreStore.git", from: "6.2.1"))
|
.package(url: "https://github.com/JohnEstropia/CoreStore.git", from: "6.3.0"))
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
Declare `import CoreStore` in your swift file to use the library.
|
Declare `import CoreStore` in your swift file to use the library.
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ extension CSCoreStore {
|
|||||||
Using the `defaultStack`, begins a transaction synchronously where `NSManagedObject` creates, updates, and deletes can be made.
|
Using the `defaultStack`, begins a transaction synchronously where `NSManagedObject` creates, updates, and deletes can be made.
|
||||||
|
|
||||||
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
||||||
- returns: a `CSSaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
|
- returns: `YES` if the commit succeeded, `NO` if the commit failed. If `NO`, the `error` argument will hold error information.
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public static func beginSynchronous(_ closure: @escaping (_ transaction: CSSynchronousDataTransaction) -> Void, error: NSErrorPointer) -> Bool {
|
public static func beginSynchronous(_ closure: @escaping (_ transaction: CSSynchronousDataTransaction) -> Void, error: NSErrorPointer) -> Bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user