From 6f290213fa3da22989b64f09200826765223c101 Mon Sep 17 00:00:00 2001 From: John Estropia Date: Sun, 31 Mar 2019 00:05:13 +0900 Subject: [PATCH] update README --- README.md | 89 +++++---------------------- Sources/CSCoreStore+Transaction.swift | 2 +- 2 files changed, 15 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 3697f99..0c92815 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Unleashing the real power of Core Data with the elegance and safety of Swift

-* **Swift 4.2:** 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) +* **Swift 5.0:** iOS 10+ / macOS 10.12+ / watchOS 3.0+ / tvOS 10.0+ +* 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). @@ -59,7 +59,6 @@ CoreStore was (and is) heavily shaped by real-world needs of developing data-dep - [Setting up](#setting-up) - [In-memory store](#in-memory-store) - [Local store](#local-store) - - [iCloud store](#icloud-store) - [Migrations](#migrations) - [Declaring model versions](#declaring-model-versions) - [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`. -### 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 @@ -1675,14 +1614,13 @@ CoreStore.perform(
 [CSCoreStore beginAsynchronous:^(CSAsynchronousDataTransaction *transaction) {
     // ...
-    [transaction commitWithCompletion:^(CSSaveResult *result) {
-        if (result.isSuccess) {
-            NSLog(@"Done");
-        }
-        else if (result.isFailure) {
-            NSLog(@"error: %@", result.error);
-        }
-    }];
+    [transaction 
+     commitWithSuccess:^{
+        NSLog(@"Done");
+     }
+     failure: ^(CSError *error) {
+        NSLog(@"error: %@", result.error);
+     }];
 }];
 
@@ -1863,7 +1801,8 @@ Once the version lock is set, any changes in the properties or to the model will # Installation - Requires: - 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: - *None* - 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 In your `Podfile`, add ``` -pod 'CoreStore', '~> 6.1' +pod 'CoreStore', '~> 6.3' ``` and run ``` @@ -1883,7 +1822,7 @@ This installs CoreStore as a framework. Declare `import CoreStore` in your swift ### Install with Carthage In your `Cartfile`, add ``` -github "JohnEstropia/CoreStore" >= 6.2.1 +github "JohnEstropia/CoreStore" >= 6.3.0 ``` and run ``` @@ -1894,7 +1833,7 @@ This installs CoreStore as a framework. Declare `import CoreStore` in your swift #### Install with Swift Package Manager: ```swift 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. diff --git a/Sources/CSCoreStore+Transaction.swift b/Sources/CSCoreStore+Transaction.swift index 74db9ef..67b9e07 100644 --- a/Sources/CSCoreStore+Transaction.swift +++ b/Sources/CSCoreStore+Transaction.swift @@ -45,7 +45,7 @@ extension CSCoreStore { 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`. - - 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 public static func beginSynchronous(_ closure: @escaping (_ transaction: CSSynchronousDataTransaction) -> Void, error: NSErrorPointer) -> Bool {