From 0d4d036a865ff3a2645916361c820325ebfeb5ec Mon Sep 17 00:00:00 2001 From: Thibault Vlacich Date: Wed, 7 Sep 2016 10:43:36 +0200 Subject: [PATCH 01/15] Add DEBUG flag to the Debug config --- CoreStore.podspec | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CoreStore.podspec b/CoreStore.podspec index 7c1fbed..cb13485 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -16,8 +16,9 @@ Pod::Spec.new do |s| s.public_header_files = "Sources/**/*.h" s.frameworks = "Foundation", "CoreData" s.requires_arc = true - s.pod_target_xcconfig = { 'OTHER_SWIFT_FLAGS' => '-D USE_FRAMEWORKS', + s.pod_target_xcconfig = { 'OTHER_SWIFT_FLAGS[config=Debug]' => '-D USE_FRAMEWORKS -D DEBUG', + 'OTHER_SWIFT_FLAGS[config=Release]' => '-D USE_FRAMEWORKS', 'GCC_PREPROCESSOR_DEFINITIONS' => 'USE_FRAMEWORKS=1' } - + s.dependency "GCDKit", "1.2.6" -end \ No newline at end of file +end From 4a34012d58f459c65177e6c30271271c7429aae7 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Thu, 8 Sep 2016 00:40:58 +0900 Subject: [PATCH 02/15] version bump --- CoreStore.podspec | 2 +- Sources/Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CoreStore.podspec b/CoreStore.podspec index cb13485..4717659 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "2.0.4" + s.version = "2.0.5" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/Sources/Info.plist b/Sources/Info.plist index 241ef86..38bcc7c 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.4 + 2.0.5 CFBundleSignature ???? CFBundleVersion From f99d3cc21a688ebbbc316abe5f458b4dc620387c Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 10 Sep 2016 22:51:33 +0900 Subject: [PATCH 03/15] fix RecreateStoreOnModelMismatch option not working when an existing xcdatamodel gets updated without adding a new version --- README.md | 2 +- Sources/Migrating/DataStack+Migration.swift | 4 ++-- Sources/ObjectiveC/CSSQliteStore.swift | 2 +- Sources/ObjectiveC/CSStorageInterface.swift | 2 +- Sources/Setup/DataStack.swift | 4 ++-- Sources/Setup/StorageInterfaces/ICloudStore.swift | 10 +++++++++- .../Setup/StorageInterfaces/LegacySQLiteStore.swift | 10 +++++++++- Sources/Setup/StorageInterfaces/SQLiteStore.swift | 10 +++++++++- Sources/Setup/StorageInterfaces/StorageInterface.swift | 4 ++-- 9 files changed, 36 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index b3293a8..4500c76 100644 --- a/README.md +++ b/README.md @@ -308,7 +308,7 @@ public protocol LocalStorage: StorageInterface { var mappingModelBundles: [NSBundle] { get } var localStorageOptions: LocalStorageOptions { get } func storeOptionsForOptions(options: LocalStorageOptions) -> [String: AnyObject]? - func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws + func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws } ``` If you have custom `NSIncrementalStore` or `NSAtomicStore` subclasses, you can implement this protocol and use it similarly to `SQLiteStore`. diff --git a/Sources/Migrating/DataStack+Migration.swift b/Sources/Migrating/DataStack+Migration.swift index d8d50cb..0924e85 100644 --- a/Sources/Migrating/DataStack+Migration.swift +++ b/Sources/Migrating/DataStack+Migration.swift @@ -223,7 +223,7 @@ public extension DataStack { do { - try _ = self.model[metadata].flatMap(storage.eraseStorageAndWait) + _ = try storage.eraseStorageAndWait(soureModel: self.model[metadata]) try self.addStorageAndWait(storage) GCDQueue.Main.async { @@ -388,7 +388,7 @@ public extension DataStack { URL: cacheFileURL, options: storeOptions ) - try _ = self.model[metadata].flatMap(storage.eraseStorageAndWait) + _ = try storage.eraseStorageAndWait(soureModel: self.model[metadata]) try self.createPersistentStoreFromStorage( storage, diff --git a/Sources/ObjectiveC/CSSQliteStore.swift b/Sources/ObjectiveC/CSSQliteStore.swift index 1b0a76c..0170026 100644 --- a/Sources/ObjectiveC/CSSQliteStore.swift +++ b/Sources/ObjectiveC/CSSQliteStore.swift @@ -154,7 +154,7 @@ public final class CSSQLiteStore: NSObject, CSLocalStorage, CoreStoreObjectiveCT Called by the `CSDataStack` to perform actual deletion of the store file from disk. Do not call directly! The `sourceModel` argument is a hint for the existing store's model version. For `CSSQLiteStore`, this converts the database's WAL journaling mode to DELETE before deleting the file. */ @objc - public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel, error: NSErrorPointer) -> Bool { + public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?, error: NSErrorPointer) -> Bool { return bridge(error) { diff --git a/Sources/ObjectiveC/CSStorageInterface.swift b/Sources/ObjectiveC/CSStorageInterface.swift index 9696d8f..999f5b3 100644 --- a/Sources/ObjectiveC/CSStorageInterface.swift +++ b/Sources/ObjectiveC/CSStorageInterface.swift @@ -121,5 +121,5 @@ public protocol CSLocalStorage: CSStorageInterface { Called by the `CSDataStack` to perform actual deletion of the store file from disk. Do not call directly! The `sourceModel` argument is a hint for the existing store's model version. Implementers can use the `sourceModel` to perform necessary store operations. (SQLite stores for example, can convert WAL journaling mode to DELETE before deleting) */ @objc - func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel, error: NSErrorPointer) -> Bool + func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?, error: NSErrorPointer) -> Bool } diff --git a/Sources/Setup/DataStack.swift b/Sources/Setup/DataStack.swift index bad563c..99e2b17 100644 --- a/Sources/Setup/DataStack.swift +++ b/Sources/Setup/DataStack.swift @@ -263,7 +263,7 @@ public final class DataStack { URL: fileURL, options: storeOptions ) - try _ = self.model[metadata].flatMap(storage.eraseStorageAndWait) + _ = try storage.eraseStorageAndWait(soureModel: self.model[metadata]) try self.createPersistentStoreFromStorage( storage, @@ -359,7 +359,7 @@ public final class DataStack { URL: cacheFileURL, options: storeOptions ) - try _ = self.model[metadata].flatMap(storage.eraseStorageAndWait) + _ = try storage.eraseStorageAndWait(soureModel: self.model[metadata]) try self.createPersistentStoreFromStorage( storage, diff --git a/Sources/Setup/StorageInterfaces/ICloudStore.swift b/Sources/Setup/StorageInterfaces/ICloudStore.swift index 06e3e8f..2aecdd4 100644 --- a/Sources/Setup/StorageInterfaces/ICloudStore.swift +++ b/Sources/Setup/StorageInterfaces/ICloudStore.swift @@ -424,11 +424,19 @@ public class ICloudStore: CloudStorage { /** Called by the `DataStack` to perform actual deletion of the store file from disk. Do not call directly! The `sourceModel` argument is a hint for the existing store's model version. For `SQLiteStore`, this converts the database's WAL journaling mode to DELETE before deleting the file. */ - public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws { + public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws { // TODO: check if attached to persistent store let cacheFileURL = self.cacheFileURL + guard let soureModel = soureModel else { + + let fileManager = NSFileManager.defaultManager() + try fileManager.removeItemAtURL(cacheFileURL) + _ = try fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-wal") + _ = try fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-shm") + return + } try cs_autoreleasepool { let journalUpdatingCoordinator = NSPersistentStoreCoordinator(managedObjectModel: soureModel) diff --git a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift index b72c0fc..a7414e1 100644 --- a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift @@ -165,11 +165,19 @@ public final class LegacySQLiteStore: LocalStorage, DefaultInitializableStore { /** Called by the `DataStack` to perform actual deletion of the store file from disk. Do not call directly! The `sourceModel` argument is a hint for the existing store's model version. For `SQLiteStore`, this converts the database's WAL journaling mode to DELETE before deleting the file. */ - public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws { + public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws { // TODO: check if attached to persistent store let fileURL = self.fileURL + guard let soureModel = soureModel else { + + let fileManager = NSFileManager.defaultManager() + try fileManager.removeItemAtURL(fileURL) + _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") + _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") + return + } try cs_autoreleasepool { let journalUpdatingCoordinator = NSPersistentStoreCoordinator(managedObjectModel: soureModel) diff --git a/Sources/Setup/StorageInterfaces/SQLiteStore.swift b/Sources/Setup/StorageInterfaces/SQLiteStore.swift index ee50d73..4a1d1a9 100644 --- a/Sources/Setup/StorageInterfaces/SQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/SQLiteStore.swift @@ -162,11 +162,19 @@ public final class SQLiteStore: LocalStorage, DefaultInitializableStore { /** Called by the `DataStack` to perform actual deletion of the store file from disk. Do not call directly! The `sourceModel` argument is a hint for the existing store's model version. For `SQLiteStore`, this converts the database's WAL journaling mode to DELETE before deleting the file. */ - public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws { + public func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws { // TODO: check if attached to persistent store let fileURL = self.fileURL + guard let soureModel = soureModel else { + + let fileManager = NSFileManager.defaultManager() + try fileManager.removeItemAtURL(fileURL) + _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") + _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") + return + } try cs_autoreleasepool { let journalUpdatingCoordinator = NSPersistentStoreCoordinator(managedObjectModel: soureModel) diff --git a/Sources/Setup/StorageInterfaces/StorageInterface.swift b/Sources/Setup/StorageInterfaces/StorageInterface.swift index 63f37b2..3e10b3c 100644 --- a/Sources/Setup/StorageInterfaces/StorageInterface.swift +++ b/Sources/Setup/StorageInterfaces/StorageInterface.swift @@ -158,7 +158,7 @@ public protocol LocalStorage: StorageInterface { /** Called by the `DataStack` to perform actual deletion of the store file from disk. **Do not call directly!** The `sourceModel` argument is a hint for the existing store's model version. Implementers can use the `sourceModel` to perform necessary store operations. (SQLite stores for example, can convert WAL journaling mode to DELETE before deleting) */ - func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws + func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws } internal extension LocalStorage { @@ -242,7 +242,7 @@ public protocol CloudStorage: StorageInterface { /** Called by the `DataStack` to perform actual deletion of the store file from disk. **Do not call directly!** The `sourceModel` argument is a hint for the existing store's model version. Implementers can use the `sourceModel` to perform necessary store operations. (Cloud stores for example, can set the NSPersistentStoreRemoveUbiquitousMetadataOption option before deleting) */ - func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel) throws + func eraseStorageAndWait(soureModel soureModel: NSManagedObjectModel?) throws } internal extension CloudStorage { From df835114cbbbcc389774c5714c3d288fa17af721 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 10 Sep 2016 22:57:45 +0900 Subject: [PATCH 04/15] ignore errors when deleting wal files --- Sources/Setup/StorageInterfaces/ICloudStore.swift | 4 ++-- Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift | 4 ++-- Sources/Setup/StorageInterfaces/SQLiteStore.swift | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/Setup/StorageInterfaces/ICloudStore.swift b/Sources/Setup/StorageInterfaces/ICloudStore.swift index 2aecdd4..c15c82b 100644 --- a/Sources/Setup/StorageInterfaces/ICloudStore.swift +++ b/Sources/Setup/StorageInterfaces/ICloudStore.swift @@ -433,8 +433,8 @@ public class ICloudStore: CloudStorage { let fileManager = NSFileManager.defaultManager() try fileManager.removeItemAtURL(cacheFileURL) - _ = try fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-wal") - _ = try fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-shm") + _ = try? fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-wal") + _ = try? fileManager.removeItemAtPath("\(cacheFileURL.absoluteString)-shm") return } try cs_autoreleasepool { diff --git a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift index a7414e1..f4bdaf2 100644 --- a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift @@ -174,8 +174,8 @@ public final class LegacySQLiteStore: LocalStorage, DefaultInitializableStore { let fileManager = NSFileManager.defaultManager() try fileManager.removeItemAtURL(fileURL) - _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") - _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") + _ = try? fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") + _ = try? fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") return } try cs_autoreleasepool { diff --git a/Sources/Setup/StorageInterfaces/SQLiteStore.swift b/Sources/Setup/StorageInterfaces/SQLiteStore.swift index 4a1d1a9..a566a89 100644 --- a/Sources/Setup/StorageInterfaces/SQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/SQLiteStore.swift @@ -171,8 +171,8 @@ public final class SQLiteStore: LocalStorage, DefaultInitializableStore { let fileManager = NSFileManager.defaultManager() try fileManager.removeItemAtURL(fileURL) - _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") - _ = try fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") + _ = try? fileManager.removeItemAtPath("\(fileURL.absoluteString)-wal") + _ = try? fileManager.removeItemAtPath("\(fileURL.absoluteString)-shm") return } try cs_autoreleasepool { From 243c4044abc1d6beae8cfb82394ed2d2b99a8e90 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sun, 11 Sep 2016 14:30:25 +0900 Subject: [PATCH 05/15] fix bridging producing base abstract class instead of subclass concrete class --- CoreStoreTests/BridgingTests.m | 37 +++++++++++++++++ .../CSAsynchronousDataTransaction.swift | 10 ++--- .../ObjectiveC/CSBaseDataTransaction.swift | 18 ++++----- .../CSSynchronousDataTransaction.swift | 10 ++--- .../ObjectiveC/CSUnsafeDataTransaction.swift | 10 ++--- Sources/ObjectiveC/CoreStoreBridge.swift | 40 +++++++++++++++---- 6 files changed, 92 insertions(+), 33 deletions(-) diff --git a/CoreStoreTests/BridgingTests.m b/CoreStoreTests/BridgingTests.m index 886bc40..04c2efa 100644 --- a/CoreStoreTests/BridgingTests.m +++ b/CoreStoreTests/BridgingTests.m @@ -197,4 +197,41 @@ XCTAssertNil(sqliteError); } +- (void)test_ThatTransactions_BridgeCorrectly { + + [CSCoreStore + setDefaultStack:[[CSDataStack alloc] + initWithModelName:@"Model" + bundle:[NSBundle bundleForClass:[self class]] + versionChain:nil]]; + [CSCoreStore + addInMemoryStorageAndWait:[CSInMemoryStore new] + error:nil]; + + { + CSUnsafeDataTransaction *transaction = [CSCoreStore beginUnsafe]; + XCTAssertNotNil(transaction); + XCTAssert([transaction isKindOfClass:[CSUnsafeDataTransaction class]]); + } + { + XCTestExpectation *expectation = [self expectationWithDescription:@"sync"]; + [CSCoreStore beginSynchronous:^(CSSynchronousDataTransaction * _Nonnull transaction) { + + XCTAssertNotNil(transaction); + XCTAssert([transaction isKindOfClass:[CSSynchronousDataTransaction class]]); + [expectation fulfill]; + }]; + } + { + XCTestExpectation *expectation = [self expectationWithDescription:@"async"]; + [CSCoreStore beginAsynchronous:^(CSAsynchronousDataTransaction * _Nonnull transaction) { + + XCTAssertNotNil(transaction); + XCTAssert([transaction isKindOfClass:[CSAsynchronousDataTransaction class]]); + [expectation fulfill]; + }]; + } + [self waitForExpectationsWithTimeout:10 handler:nil]; +} + @end diff --git a/Sources/ObjectiveC/CSAsynchronousDataTransaction.swift b/Sources/ObjectiveC/CSAsynchronousDataTransaction.swift index f31609d..bcd0e8f 100644 --- a/Sources/ObjectiveC/CSAsynchronousDataTransaction.swift +++ b/Sources/ObjectiveC/CSAsynchronousDataTransaction.swift @@ -144,7 +144,7 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction { // MARK: CoreStoreObjectiveCType - internal typealias SwiftType = AsynchronousDataTransaction + public typealias SwiftType = AsynchronousDataTransaction public override var bridgeToSwift: AsynchronousDataTransaction { @@ -153,21 +153,21 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction { public required init(_ swiftValue: AsynchronousDataTransaction) { - super.init(swiftValue) + super.init(swiftValue as BaseDataTransaction) } public required init(_ swiftValue: BaseDataTransaction) { - fatalError("init(_:) requires an AsynchronousDataTransaction instance") + super.init(swiftValue as! AsynchronousDataTransaction) } } // MARK: - AsynchronousDataTransaction -extension AsynchronousDataTransaction { +extension AsynchronousDataTransaction: CoreStoreSwiftType { // MARK: CoreStoreSwiftType - internal typealias ObjectiveCType = CSAsynchronousDataTransaction + public typealias ObjectiveCType = CSAsynchronousDataTransaction } diff --git a/Sources/ObjectiveC/CSBaseDataTransaction.swift b/Sources/ObjectiveC/CSBaseDataTransaction.swift index 2362ab2..d86a583 100644 --- a/Sources/ObjectiveC/CSBaseDataTransaction.swift +++ b/Sources/ObjectiveC/CSBaseDataTransaction.swift @@ -292,8 +292,6 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { // MARK: CoreStoreObjectiveCType - public typealias SwiftType = BaseDataTransaction - public required init(_ swiftValue: BaseDataTransaction) { self.swiftTransaction = swiftValue @@ -312,11 +310,11 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { } -// MARK: - BaseDataTransaction - -extension BaseDataTransaction: CoreStoreSwiftType { - - // MARK: CoreStoreSwiftType - - public typealias ObjectiveCType = CSBaseDataTransaction -} +//// MARK: - BaseDataTransaction +// +//extension BaseDataTransaction: CoreStoreSwiftType { +// +// // MARK: CoreStoreSwiftType +// +// public typealias ObjectiveCType = CSBaseDataTransaction +//} diff --git a/Sources/ObjectiveC/CSSynchronousDataTransaction.swift b/Sources/ObjectiveC/CSSynchronousDataTransaction.swift index 166e75f..9403294 100644 --- a/Sources/ObjectiveC/CSSynchronousDataTransaction.swift +++ b/Sources/ObjectiveC/CSSynchronousDataTransaction.swift @@ -143,7 +143,7 @@ public final class CSSynchronousDataTransaction: CSBaseDataTransaction { // MARK: CoreStoreObjectiveCType - internal typealias SwiftType = SynchronousDataTransaction + public typealias SwiftType = SynchronousDataTransaction public override var bridgeToSwift: SynchronousDataTransaction { @@ -152,21 +152,21 @@ public final class CSSynchronousDataTransaction: CSBaseDataTransaction { public required init(_ swiftValue: SynchronousDataTransaction) { - super.init(swiftValue) + super.init(swiftValue as BaseDataTransaction) } public required init(_ swiftValue: BaseDataTransaction) { - fatalError("init(_:) requires a BaseDataTransaction instance") + super.init(swiftValue as! SynchronousDataTransaction) } } // MARK: - SynchronousDataTransaction -extension SynchronousDataTransaction { +extension SynchronousDataTransaction: CoreStoreSwiftType { // MARK: CoreStoreSwiftType - internal typealias ObjectiveCType = CSSynchronousDataTransaction + public typealias ObjectiveCType = CSSynchronousDataTransaction } diff --git a/Sources/ObjectiveC/CSUnsafeDataTransaction.swift b/Sources/ObjectiveC/CSUnsafeDataTransaction.swift index 53d7ee8..57769c4 100644 --- a/Sources/ObjectiveC/CSUnsafeDataTransaction.swift +++ b/Sources/ObjectiveC/CSUnsafeDataTransaction.swift @@ -174,7 +174,7 @@ public final class CSUnsafeDataTransaction: CSBaseDataTransaction { // MARK: CoreStoreObjectiveCType - internal typealias SwiftType = UnsafeDataTransaction + public typealias SwiftType = UnsafeDataTransaction public override var bridgeToSwift: UnsafeDataTransaction { @@ -183,21 +183,21 @@ public final class CSUnsafeDataTransaction: CSBaseDataTransaction { public required init(_ swiftValue: UnsafeDataTransaction) { - super.init(swiftValue) + super.init(swiftValue as BaseDataTransaction) } public required init(_ swiftValue: BaseDataTransaction) { - fatalError("init(_:) requires an UnsafeDataTransaction instance") + super.init(swiftValue as! UnsafeDataTransaction) } } // MARK: - UnsafeDataTransaction -extension UnsafeDataTransaction { +extension UnsafeDataTransaction: CoreStoreSwiftType { // MARK: CoreStoreSwiftType - internal typealias ObjectiveCType = CSUnsafeDataTransaction + public typealias ObjectiveCType = CSUnsafeDataTransaction } diff --git a/Sources/ObjectiveC/CoreStoreBridge.swift b/Sources/ObjectiveC/CoreStoreBridge.swift index bcc2aa6..fbb270c 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.swift +++ b/Sources/ObjectiveC/CoreStoreBridge.swift @@ -118,12 +118,18 @@ internal func bridge(error: NSErrorPointer, @noescape _ c do { let result = try closure() - error.memory = nil + if error != nil { + + error.memory = nil + } return result.bridgeToObjectiveC } catch let swiftError { - error.memory = swiftError.bridgeToObjectiveC + if error != nil { + + error.memory = swiftError.bridgeToObjectiveC + } return nil } } @@ -133,12 +139,18 @@ internal func bridge(error: NSErrorPointer, @noescape _ closure: () throws -> Vo do { try closure() - error.memory = nil + if error != nil { + + error.memory = nil + } return true } catch let swiftError { - error.memory = swiftError.bridgeToObjectiveC + if error != nil { + + error.memory = swiftError.bridgeToObjectiveC + } return false } } @@ -148,12 +160,18 @@ internal func bridge(error: NSErrorPointer, @noescape _ closure: () throws -> do { let result = try closure() - error.memory = nil + if error != nil { + + error.memory = nil + } return result } catch let swiftError { - error.memory = swiftError.bridgeToObjectiveC + if error != nil { + + error.memory = swiftError.bridgeToObjectiveC + } return nil } } @@ -163,12 +181,18 @@ internal func bridge(error: NSErrorPointer, @noescape _ c do { let result = try closure() - error.memory = nil + if error != nil { + + error.memory = nil + } return result.map { $0.bridgeToObjectiveC } } catch let swiftError { - error.memory = swiftError.bridgeToObjectiveC + if error != nil { + + error.memory = swiftError.bridgeToObjectiveC + } return nil } } From 0dbd05b172319a1beb60e0c6c3f1bbe53b95921f Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sun, 11 Sep 2016 14:30:32 +0900 Subject: [PATCH 06/15] version bump --- CoreStore.podspec | 2 +- Sources/Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CoreStore.podspec b/CoreStore.podspec index 4717659..38d7970 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "2.0.5" + s.version = "2.0.6" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/Sources/Info.plist b/Sources/Info.plist index 38bcc7c..0100960 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.5 + 2.0.6 CFBundleSignature ???? CFBundleVersion From aa6bceaaf3ed2760f62d07d8a3c847f3c50ace41 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 12:22:25 +0900 Subject: [PATCH 07/15] working for Swift 2.3! --- Cartfile | 2 +- Cartfile.resolved | 2 +- Carthage/Checkouts/GCDKit | 2 +- CoreStore.podspec | 2 +- CoreStore.xcodeproj/project.pbxproj | 385 +----------------- .../xcschemes/CoreStore iOS7.xcscheme | 104 ----- .../CoreStoreDemo.xcodeproj/project.pbxproj | 3 + CoreStoreTests/BaseTests/BaseTestCase.swift | 4 +- CoreStoreTests/StorageInterfaceTests.swift | 19 +- .../FetchedResultsControllerDelegate.swift | 16 +- .../NSManagedObjectContext+Querying.swift | 13 +- .../Internal/NSManagedObjectModel+Setup.swift | 6 +- Sources/Migrating/DataStack+Migration.swift | 9 +- .../StorageInterfaces/LegacySQLiteStore.swift | 7 +- .../Setup/StorageInterfaces/SQLiteStore.swift | 10 +- 15 files changed, 76 insertions(+), 508 deletions(-) delete mode 100644 CoreStore.xcodeproj/xcshareddata/xcschemes/CoreStore iOS7.xcscheme diff --git a/Cartfile b/Cartfile index b322e93..bcc5dc5 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "JohnEstropia/GCDKit" == 1.2.6 +github "JohnEstropia/GCDKit" == 1.3.0 diff --git a/Cartfile.resolved b/Cartfile.resolved index 86ed4b6..15eb782 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "JohnEstropia/GCDKit" "1.2.6" +github "JohnEstropia/GCDKit" "1.3.0" diff --git a/Carthage/Checkouts/GCDKit b/Carthage/Checkouts/GCDKit index bef1b10..7f88719 160000 --- a/Carthage/Checkouts/GCDKit +++ b/Carthage/Checkouts/GCDKit @@ -1 +1 @@ -Subproject commit bef1b1075f718bc6ebd9d9a7abf2de5b39afda2d +Subproject commit 7f88719fbd4824a378576d679b0b929816973f25 diff --git a/CoreStore.podspec b/CoreStore.podspec index 38d7970..3e79aec 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -20,5 +20,5 @@ Pod::Spec.new do |s| 'OTHER_SWIFT_FLAGS[config=Release]' => '-D USE_FRAMEWORKS', 'GCC_PREPROCESSOR_DEFINITIONS' => 'USE_FRAMEWORKS=1' } - s.dependency "GCDKit", "1.2.6" + s.dependency "GCDKit", "1.3.0" end diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index edc705f..8611ea5 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -70,15 +70,12 @@ 82BA18DF1C4BBE2600A0916E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82BA18DE1C4BBE2600A0916E /* Foundation.framework */; }; 82BA18E11C4BBE2C00A0916E /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82BA18E01C4BBE2C00A0916E /* CoreData.framework */; }; B501FDDD1CA8D05000BE22EF /* CSSectionBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDDC1CA8D05000BE22EF /* CSSectionBy.swift */; }; - B501FDDE1CA8D05000BE22EF /* CSSectionBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDDC1CA8D05000BE22EF /* CSSectionBy.swift */; }; B501FDDF1CA8D05000BE22EF /* CSSectionBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDDC1CA8D05000BE22EF /* CSSectionBy.swift */; }; B501FDE01CA8D05000BE22EF /* CSSectionBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDDC1CA8D05000BE22EF /* CSSectionBy.swift */; }; B501FDE21CA8D1F500BE22EF /* CSListMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE11CA8D1F500BE22EF /* CSListMonitor.swift */; }; - B501FDE31CA8D1F500BE22EF /* CSListMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE11CA8D1F500BE22EF /* CSListMonitor.swift */; }; B501FDE41CA8D1F500BE22EF /* CSListMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE11CA8D1F500BE22EF /* CSListMonitor.swift */; }; B501FDE51CA8D1F500BE22EF /* CSListMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE11CA8D1F500BE22EF /* CSListMonitor.swift */; }; B501FDE71CA8D20500BE22EF /* CSListObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE61CA8D20500BE22EF /* CSListObserver.swift */; }; - B501FDE81CA8D20500BE22EF /* CSListObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE61CA8D20500BE22EF /* CSListObserver.swift */; }; B501FDE91CA8D20500BE22EF /* CSListObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE61CA8D20500BE22EF /* CSListObserver.swift */; }; B501FDEA1CA8D20500BE22EF /* CSListObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501FDE61CA8D20500BE22EF /* CSListObserver.swift */; }; B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50392F81C478FF3009900CA /* NSManagedObject+Transaction.swift */; }; @@ -91,7 +88,6 @@ B519E45B1C4CD2ED00E7B469 /* GCDKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B519E4571C4CD2CA00E7B469 /* GCDKit.framework */; }; B51BE06A1B47FC4B0069F532 /* NSManagedObjectModel+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51BE0691B47FC4B0069F532 /* NSManagedObjectModel+Setup.swift */; }; B51FE5AB1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; }; - B51FE5AC1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; }; B51FE5AD1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; }; B51FE5AE1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; }; B51FE5AF1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; }; @@ -150,12 +146,10 @@ B52557891D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B525578A1D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B52661401CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661411CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; B52661421CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; B52661431CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; B52661441CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; B529C2041CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; - B529C2051CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2061CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2071CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2081CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; @@ -207,38 +201,31 @@ B52DD1C91BE1F94600949AFE /* NSManagedObjectContext+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */; }; B52DD1CA1BE1F94600949AFE /* NSManagedObjectModel+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51BE0691B47FC4B0069F532 /* NSManagedObjectModel+Setup.swift */; }; B52DD1CB1BE1F94600949AFE /* WeakObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F2D1AFF849C0064E85B /* WeakObject.swift */; }; - B538BA761D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; }; B538BA771D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; }; B538BA781D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; }; B538BA791D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; }; B538BA7A1D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; }; B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; }; - B53FB9FF1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; }; B53FBA001CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; }; B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; }; B53FBA021CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; }; B53FBA041CAB300C00F0D40A /* CSMigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */; }; - B53FBA051CAB300C00F0D40A /* CSMigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */; }; B53FBA061CAB300C00F0D40A /* CSMigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */; }; B53FBA071CAB300C00F0D40A /* CSMigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */; }; B53FBA081CAB300C00F0D40A /* CSMigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */; }; B53FBA0B1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */; }; - B53FBA0C1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */; }; B53FBA0D1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */; }; B53FBA0E1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */; }; B53FBA0F1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */; }; B53FBA121CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA111CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift */; }; - B53FBA131CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA111CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift */; }; B53FBA141CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA111CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift */; }; B53FBA151CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA111CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift */; }; B53FBA161CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA111CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift */; }; B53FBA181CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA171CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift */; }; - B53FBA191CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA171CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift */; }; B53FBA1A1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA171CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift */; }; B53FBA1B1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA171CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift */; }; B53FBA1C1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA171CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift */; }; B53FBA1E1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA1D1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift */; }; - B53FBA1F1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA1D1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift */; }; B53FBA201CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA1D1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift */; }; B53FBA211CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FBA1D1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift */; }; B546F9581C99B17400D5AC55 /* CSCoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9571C99B17400D5AC55 /* CSCoreStore+Setup.swift */; }; @@ -288,19 +275,16 @@ B5519A601CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; }; B5519A611CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; }; B5519A621CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; }; - B55717431D15B09D009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B55717441D15B09E009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B55717451D15B09F009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B55717461D15B0A1009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B55717471D15B0A1009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5598BCC1BE2093D0092EFCE /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B5D372821A39CD6900F583D9 /* Model.xcdatamodeld */; }; B559CD431CAA8B6300E4D58B /* CSSetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */; }; - B559CD441CAA8B6300E4D58B /* CSSetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */; }; B559CD451CAA8B6300E4D58B /* CSSetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */; }; B559CD461CAA8B6300E4D58B /* CSSetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */; }; B559CD471CAA8B6300E4D58B /* CSSetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */; }; B559CD491CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */; }; - B559CD4A1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */; }; B559CD4B1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */; }; B559CD4C1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */; }; B559CD4D1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */; }; @@ -363,7 +347,6 @@ B56321B51BD6521C006C9394 /* NSManagedObjectModel+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51BE0691B47FC4B0069F532 /* NSManagedObjectModel+Setup.swift */; }; B56321B61BD6521C006C9394 /* WeakObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F2D1AFF849C0064E85B /* WeakObject.swift */; }; B5677D3D1CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5677D3C1CD3B1E400322BFC /* ICloudStoreObserver.swift */; }; - B5677D3E1CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5677D3C1CD3B1E400322BFC /* ICloudStoreObserver.swift */; }; B5677D3F1CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5677D3C1CD3B1E400322BFC /* ICloudStoreObserver.swift */; }; B5677D401CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5677D3C1CD3B1E400322BFC /* ICloudStoreObserver.swift */; }; B5677D411CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5677D3C1CD3B1E400322BFC /* ICloudStoreObserver.swift */; }; @@ -382,16 +365,13 @@ B59851491C90289D00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */; }; B598514A1C90289E00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */; }; B598514B1C90289F00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */; }; - B59983491CA54BC100E1A417 /* CSBaseDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A581CA2008C002BEF78 /* CSBaseDataTransaction.swift */; }; B59AFF411C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */; }; B59FA0AE1CCBAC95007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; }; - B59FA0AF1CCBACA6007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; }; B59FA0B01CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; }; B59FA0B11CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; }; B59FA0B21CCBACA8007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; }; B5A261211B64BFDB006EB6D3 /* MigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A261201B64BFDB006EB6D3 /* MigrationType.swift */; }; B5A5F2661CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; }; - B5A5F2671CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; }; B5A5F2681CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; }; B5A5F2691CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; }; B5A5F26A1CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; }; @@ -412,82 +392,10 @@ B5D3F6461C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D3F6441C887C0A00C7492A /* LegacySQLiteStore.swift */; }; B5D3F6471C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D3F6441C887C0A00C7492A /* LegacySQLiteStore.swift */; }; B5D3F6481C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D3F6441C887C0A00C7492A /* LegacySQLiteStore.swift */; }; - B5D7A5AF1CA3B738005C752B /* (null) in Sources */ = {isa = PBXBuildFile; }; - B5D7A5B01CA3B738005C752B /* StorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FE4DA11C8481E100FA6A91 /* StorageInterface.swift */; }; - B5D7A5B11CA3B738005C752B /* InMemoryStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FE4DA61C84FB4400FA6A91 /* InMemoryStore.swift */; }; - B5D7A5B21CA3B738005C752B /* SQLiteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FE4DAB1C85D44E00FA6A91 /* SQLiteStore.swift */; }; - B5D7A5B31CA3B738005C752B /* LegacySQLiteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D3F6441C887C0A00C7492A /* LegacySQLiteStore.swift */; }; - B5D7A5B41CA3BAE7005C752B /* NSPersistentStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FEC18D1C9166E200532541 /* NSPersistentStore+Setup.swift */; }; B5D7A5B61CA3BF8F005C752B /* CSInto.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D7A5B51CA3BF8F005C752B /* CSInto.swift */; }; - B5D7A5B71CA3BF8F005C752B /* CSInto.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D7A5B51CA3BF8F005C752B /* CSInto.swift */; }; B5D7A5B81CA3BF8F005C752B /* CSInto.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D7A5B51CA3BF8F005C752B /* CSInto.swift */; }; B5D7A5B91CA3BF8F005C752B /* CSInto.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D7A5B51CA3BF8F005C752B /* CSInto.swift */; }; B5D7A5BA1CA3BF8F005C752B /* CSInto.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D7A5B51CA3BF8F005C752B /* CSInto.swift */; }; - B5D9E2EF1CA2C317007A9D52 /* ObjectMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1C1AFF84860064E85B /* ObjectMonitor.swift */; }; - B5D9E2F01CA2C317007A9D52 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; }; - B5D9E2F11CA2C317007A9D52 /* ImportableUniqueObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5F1DA8F1B9AA991007C5CBB /* ImportableUniqueObject.swift */; }; - B5D9E2F21CA2C317007A9D52 /* CoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B504D0D51B02362500B2BBB1 /* CoreStore+Setup.swift */; }; - B5D9E2F31CA2C317007A9D52 /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; }; - B5D9E2F41CA2C317007A9D52 /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; }; - B5D9E2F51CA2C317007A9D52 /* FetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */; }; - B5D9E2F61CA2C317007A9D52 /* MigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A261201B64BFDB006EB6D3 /* MigrationType.swift */; }; - B5D9E2F71CA2C317007A9D52 /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; }; - B5D9E2F81CA2C317007A9D52 /* SectionBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56007131B3F6C2800A9A8F9 /* SectionBy.swift */; }; - B5D9E2F91CA2C317007A9D52 /* NSManagedObjectContext+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */; }; - B5D9E2FA1CA2C317007A9D52 /* UnsafeDataTransaction+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E21C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift */; }; - B5D9E2FB1CA2C317007A9D52 /* MigrationChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56007151B4018AB00A9A8F9 /* MigrationChain.swift */; }; - B5D9E2FC1CA2C317007A9D52 /* Tweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F001AFF847B0064E85B /* Tweak.swift */; }; - B5D9E2FD1CA2C317007A9D52 /* OrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F041AFF847B0064E85B /* OrderBy.swift */; }; - B5D9E2FE1CA2C317007A9D52 /* NSManagedObjectContext+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */; }; - B5D9E2FF1CA2C317007A9D52 /* CoreStore+Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6AD1B518DCB00714891 /* CoreStore+Migration.swift */; }; - B5D9E3001CA2C317007A9D52 /* CoreStore+Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */; }; - B5D9E3011CA2C317007A9D52 /* Into.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56007101B3F6BD500A9A8F9 /* Into.swift */; }; - B5D9E3021CA2C317007A9D52 /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; }; - B5D9E3031CA2C317007A9D52 /* NSManagedObject+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50392F81C478FF3009900CA /* NSManagedObject+Transaction.swift */; }; - B5D9E3041CA2C317007A9D52 /* NSFetchedResultsController+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */; }; - B5D9E3051CA2C317007A9D52 /* (null) in Sources */ = {isa = PBXBuildFile; }; - B5D9E3061CA2C317007A9D52 /* ObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1F1AFF84860064E85B /* ObjectObserver.swift */; }; - B5D9E3071CA2C317007A9D52 /* NotificationObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F2B1AFF849C0064E85B /* NotificationObserver.swift */; }; - B5D9E3081CA2C317007A9D52 /* ImportableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5F1DA8C1B9AA97D007C5CBB /* ImportableObject.swift */; }; - B5D9E3091CA2C317007A9D52 /* MigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56965231B356B820075EE4A /* MigrationResult.swift */; }; - B5D9E30A1CA2C317007A9D52 /* CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* CoreStore.swift */; }; - B5D9E30B1CA2C317007A9D52 /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; }; - B5D9E30C1CA2C317007A9D52 /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; }; - B5D9E30D1CA2C317007A9D52 /* MigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6AB1B51285300714891 /* MigrationManager.swift */; }; - B5D9E30E1CA2C317007A9D52 /* DataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EEC1AFF846E0064E85B /* DataStack+Transaction.swift */; }; - B5D9E30F1CA2C317007A9D52 /* DataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDB1AFF84500064E85B /* DataStack.swift */; }; - B5D9E3101CA2C317007A9D52 /* Functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E834BA1B7691F3001D3D50 /* Functions.swift */; }; - B5D9E3111CA2C317007A9D52 /* ListMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1D1AFF84860064E85B /* ListMonitor.swift */; }; - B5D9E3121CA2C317007A9D52 /* UnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EED1AFF846E0064E85B /* UnsafeDataTransaction.swift */; }; - B5D9E3131CA2C317007A9D52 /* DataStack+Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */; }; - B5D9E3141CA2C317007A9D52 /* BaseDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EEB1AFF846E0064E85B /* BaseDataTransaction.swift */; }; - B5D9E3151CA2C317007A9D52 /* SaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EF21AFF846E0064E85B /* SaveResult.swift */; }; - B5D9E3161CA2C317007A9D52 /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; }; - B5D9E3181CA2C317007A9D52 /* NSProgress+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6A81B50A4B300714891 /* NSProgress+Convenience.swift */; }; - B5D9E3191CA2C317007A9D52 /* SynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EF31AFF846E0064E85B /* SynchronousDataTransaction.swift */; }; - B5D9E31A1CA2C317007A9D52 /* NSManagedObject+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F271AFF84920064E85B /* NSManagedObject+Convenience.swift */; }; - B5D9E31B1CA2C317007A9D52 /* NSManagedObjectModel+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51BE0691B47FC4B0069F532 /* NSManagedObjectModel+Setup.swift */; }; - B5D9E31C1CA2C317007A9D52 /* NSManagedObjectContext+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */; }; - B5D9E31D1CA2C317007A9D52 /* CoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE51AFF84610064E85B /* CoreStoreLogger.swift */; }; - B5D9E31E1CA2C317007A9D52 /* WeakObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F2D1AFF849C0064E85B /* WeakObject.swift */; }; - B5D9E31F1CA2C317007A9D52 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F021AFF847B0064E85B /* GroupBy.swift */; }; - B5D9E3201CA2C317007A9D52 /* DataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1A1AFF84860064E85B /* DataStack+Observing.swift */; }; - B5D9E3211CA2C317007A9D52 /* CoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EEE1AFF846E0064E85B /* CoreStore+Transaction.swift */; }; - B5D9E3221CA2C317007A9D52 /* NSManagedObjectContext+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F2C1AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift */; }; - B5D9E3231CA2C317007A9D52 /* CoreStore+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1B1AFF84860064E85B /* CoreStore+Observing.swift */; }; - B5D9E3241CA2C317007A9D52 /* BaseDataTransaction+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E834B81B76311F001D3D50 /* BaseDataTransaction+Importing.swift */; }; - B5D9E3251CA2C317007A9D52 /* DefaultLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE31AFF84610064E85B /* DefaultLogger.swift */; }; - B5D9E3261CA2C317007A9D52 /* AsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EEA1AFF846E0064E85B /* AsynchronousDataTransaction.swift */; }; - B5D9E3271CA2C317007A9D52 /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; }; - B5D9E3281CA2C317007A9D52 /* ListObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F1E1AFF84860064E85B /* ListObserver.swift */; }; - B5D9E32C1CA2C317007A9D52 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5D39A0119FD00C9000E91BB /* Foundation.framework */; }; - B5D9E32D1CA2C317007A9D52 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A54C19C5C872005002A5 /* CoreData.framework */; }; - B5D9E32F1CA2C317007A9D52 /* CoreStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F03A53519C5C6DA005002A5 /* CoreStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5D9E3431CA2C6C4007A9D52 /* GCDBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D9E3371CA2C6BF007A9D52 /* GCDBlock.swift */; }; - B5D9E3441CA2C6C4007A9D52 /* GCDGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D9E3381CA2C6BF007A9D52 /* GCDGroup.swift */; }; - B5D9E3461CA2C6C4007A9D52 /* GCDQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D9E33A1CA2C6BF007A9D52 /* GCDQueue.swift */; }; - B5D9E3471CA2C6C4007A9D52 /* GCDSemaphore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D9E33B1CA2C6BF007A9D52 /* GCDSemaphore.swift */; }; - B5D9E3481CA2C6C4007A9D52 /* GCDTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D9E33C1CA2C6BF007A9D52 /* GCDTimer.swift */; }; B5DBE2CD1C9914A900B5CEFA /* CSCoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */; }; B5DBE2CE1C9914A900B5CEFA /* CSCoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */; }; B5DBE2CF1C9914A900B5CEFA /* CSCoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */; }; @@ -506,33 +414,26 @@ B5DC47CB1C93D9C800FA3BF3 /* StorageInterfaceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DC47C91C93D9C800FA3BF3 /* StorageInterfaceTests.swift */; }; B5DC47CC1C93D9C800FA3BF3 /* StorageInterfaceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DC47C91C93D9C800FA3BF3 /* StorageInterfaceTests.swift */; }; B5E1B5931CAA0C15007FD580 /* CSObjectMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5921CAA0C15007FD580 /* CSObjectMonitor.swift */; }; - B5E1B5941CAA0C15007FD580 /* CSObjectMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5921CAA0C15007FD580 /* CSObjectMonitor.swift */; }; B5E1B5951CAA0C15007FD580 /* CSObjectMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5921CAA0C15007FD580 /* CSObjectMonitor.swift */; }; B5E1B5961CAA0C15007FD580 /* CSObjectMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5921CAA0C15007FD580 /* CSObjectMonitor.swift */; }; B5E1B5981CAA0C23007FD580 /* CSObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5971CAA0C23007FD580 /* CSObjectObserver.swift */; }; - B5E1B5991CAA0C23007FD580 /* CSObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5971CAA0C23007FD580 /* CSObjectObserver.swift */; }; B5E1B59A1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5971CAA0C23007FD580 /* CSObjectObserver.swift */; }; B5E1B59B1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5971CAA0C23007FD580 /* CSObjectObserver.swift */; }; B5E1B59D1CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B59C1CAA2568007FD580 /* CSDataStack+Observing.swift */; }; - B5E1B59E1CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B59C1CAA2568007FD580 /* CSDataStack+Observing.swift */; }; B5E1B59F1CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B59C1CAA2568007FD580 /* CSDataStack+Observing.swift */; }; B5E1B5A01CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B59C1CAA2568007FD580 /* CSDataStack+Observing.swift */; }; B5E1B5A21CAA4365007FD580 /* CSCoreStore+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A11CAA4365007FD580 /* CSCoreStore+Observing.swift */; }; - B5E1B5A31CAA4365007FD580 /* CSCoreStore+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A11CAA4365007FD580 /* CSCoreStore+Observing.swift */; }; B5E1B5A41CAA4365007FD580 /* CSCoreStore+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A11CAA4365007FD580 /* CSCoreStore+Observing.swift */; }; B5E1B5A51CAA4365007FD580 /* CSCoreStore+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A11CAA4365007FD580 /* CSCoreStore+Observing.swift */; }; B5E1B5A81CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A71CAA49E2007FD580 /* CSDataStack+Migrating.swift */; }; - B5E1B5A91CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A71CAA49E2007FD580 /* CSDataStack+Migrating.swift */; }; B5E1B5AA1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A71CAA49E2007FD580 /* CSDataStack+Migrating.swift */; }; B5E1B5AB1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A71CAA49E2007FD580 /* CSDataStack+Migrating.swift */; }; B5E1B5AC1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E1B5A71CAA49E2007FD580 /* CSDataStack+Migrating.swift */; }; B5E222231CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222221CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift */; }; - B5E222241CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222221CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift */; }; B5E222251CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222221CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift */; }; B5E222261CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222221CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift */; }; B5E222271CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222221CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift */; }; B5E2222A1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222291CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift */; }; - B5E2222B1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222291CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift */; }; B5E2222C1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222291CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift */; }; B5E2222D1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222291CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift */; }; B5E2222E1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E222291CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift */; }; @@ -572,76 +473,54 @@ B5E84F371AFF85470064E85B /* NSManagedObjectContext+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */; }; B5E84F391AFF85470064E85B /* NSManagedObjectContext+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */; }; B5E84F411AFF8CCD0064E85B /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; }; - B5EA11DD1CA3AFD9002282F8 /* NSPersistentStoreCoordinator+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */; }; B5ECDBDF1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; }; - B5ECDBE01CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; }; B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; }; B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; }; B5ECDBE31CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; }; B5ECDBE51CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */; }; - B5ECDBE61CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */; }; B5ECDBE71CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */; }; B5ECDBE81CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */; }; B5ECDBE91CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */; }; B5ECDBEC1CA6BF2000C7F112 /* CSFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */; }; - B5ECDBED1CA6BF2000C7F112 /* CSFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */; }; B5ECDBEE1CA6BF2000C7F112 /* CSFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */; }; B5ECDBEF1CA6BF2000C7F112 /* CSFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */; }; B5ECDBF01CA6BF2000C7F112 /* CSFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */; }; B5ECDBF91CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBF81CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift */; }; - B5ECDBFA1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBF81CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift */; }; B5ECDBFB1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBF81CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift */; }; B5ECDBFC1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBF81CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift */; }; B5ECDBFD1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBF81CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift */; }; B5ECDBFF1CA80CBA00C7F112 /* CSWhere.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBFE1CA80CBA00C7F112 /* CSWhere.swift */; }; - B5ECDC001CA80CBA00C7F112 /* CSWhere.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBFE1CA80CBA00C7F112 /* CSWhere.swift */; }; B5ECDC011CA80CBA00C7F112 /* CSWhere.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBFE1CA80CBA00C7F112 /* CSWhere.swift */; }; B5ECDC021CA80CBA00C7F112 /* CSWhere.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBFE1CA80CBA00C7F112 /* CSWhere.swift */; }; B5ECDC031CA80CBA00C7F112 /* CSWhere.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBFE1CA80CBA00C7F112 /* CSWhere.swift */; }; B5ECDC051CA8138100C7F112 /* CSOrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC041CA8138100C7F112 /* CSOrderBy.swift */; }; - B5ECDC061CA8138100C7F112 /* CSOrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC041CA8138100C7F112 /* CSOrderBy.swift */; }; B5ECDC071CA8138100C7F112 /* CSOrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC041CA8138100C7F112 /* CSOrderBy.swift */; }; B5ECDC081CA8138100C7F112 /* CSOrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC041CA8138100C7F112 /* CSOrderBy.swift */; }; B5ECDC091CA8138100C7F112 /* CSOrderBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC041CA8138100C7F112 /* CSOrderBy.swift */; }; B5ECDC0B1CA8161B00C7F112 /* CSGroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC0A1CA8161B00C7F112 /* CSGroupBy.swift */; }; - B5ECDC0C1CA8161B00C7F112 /* CSGroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC0A1CA8161B00C7F112 /* CSGroupBy.swift */; }; B5ECDC0D1CA8161B00C7F112 /* CSGroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC0A1CA8161B00C7F112 /* CSGroupBy.swift */; }; B5ECDC0E1CA8161B00C7F112 /* CSGroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC0A1CA8161B00C7F112 /* CSGroupBy.swift */; }; B5ECDC0F1CA8161B00C7F112 /* CSGroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC0A1CA8161B00C7F112 /* CSGroupBy.swift */; }; B5ECDC111CA816E500C7F112 /* CSTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC101CA816E500C7F112 /* CSTweak.swift */; }; - B5ECDC121CA816E500C7F112 /* CSTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC101CA816E500C7F112 /* CSTweak.swift */; }; B5ECDC131CA816E500C7F112 /* CSTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC101CA816E500C7F112 /* CSTweak.swift */; }; B5ECDC141CA816E500C7F112 /* CSTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC101CA816E500C7F112 /* CSTweak.swift */; }; B5ECDC151CA816E500C7F112 /* CSTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC101CA816E500C7F112 /* CSTweak.swift */; }; B5ECDC1D1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC1C1CA81A2100C7F112 /* CSDataStack+Querying.swift */; }; - B5ECDC1E1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC1C1CA81A2100C7F112 /* CSDataStack+Querying.swift */; }; B5ECDC1F1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC1C1CA81A2100C7F112 /* CSDataStack+Querying.swift */; }; B5ECDC201CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC1C1CA81A2100C7F112 /* CSDataStack+Querying.swift */; }; B5ECDC211CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC1C1CA81A2100C7F112 /* CSDataStack+Querying.swift */; }; B5ECDC231CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC221CA81A3900C7F112 /* CSCoreStore+Querying.swift */; }; - B5ECDC241CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC221CA81A3900C7F112 /* CSCoreStore+Querying.swift */; }; B5ECDC251CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC221CA81A3900C7F112 /* CSCoreStore+Querying.swift */; }; B5ECDC261CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC221CA81A3900C7F112 /* CSCoreStore+Querying.swift */; }; B5ECDC271CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC221CA81A3900C7F112 /* CSCoreStore+Querying.swift */; }; B5ECDC291CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC281CA81CC700C7F112 /* CSDataStack+Transaction.swift */; }; - B5ECDC2A1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC281CA81CC700C7F112 /* CSDataStack+Transaction.swift */; }; B5ECDC2B1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC281CA81CC700C7F112 /* CSDataStack+Transaction.swift */; }; B5ECDC2C1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC281CA81CC700C7F112 /* CSDataStack+Transaction.swift */; }; B5ECDC2D1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC281CA81CC700C7F112 /* CSDataStack+Transaction.swift */; }; B5ECDC2F1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC2E1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift */; }; - B5ECDC301CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC2E1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift */; }; B5ECDC311CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC2E1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift */; }; B5ECDC321CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC2E1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift */; }; B5ECDC331CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDC2E1CA81CDC00C7F112 /* CSCoreStore+Transaction.swift */; }; - B5ECDC3A1CA8369400C7F112 /* CSDataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBE2D11C991B3E00B5CEFA /* CSDataStack.swift */; }; - B5ECDC3B1CA836AD00C7F112 /* CoreStoreBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AEFAB41C9962AE00AD137F /* CoreStoreBridge.swift */; }; - B5ECDC3C1CA836B600C7F112 /* CSCoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */; }; - B5ECDC3D1CA836BA00C7F112 /* CSError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A491CA1F4FB002BEF78 /* CSError.swift */; }; - B5ECDC3E1CA836BE00C7F112 /* CSCoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9571C99B17400D5AC55 /* CSCoreStore+Setup.swift */; }; - B5ECDC401CA836C800C7F112 /* CSInMemoryStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9681C9AF26D00D5AC55 /* CSInMemoryStore.swift */; }; - B5ECDC411CA836C800C7F112 /* CSSQliteStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F95C1C9A12B800D5AC55 /* CSSQliteStore.swift */; }; - B5ECDC421CA836CF00C7F112 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; }; - B5ECDC431CA836F800C7F112 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9721C9C553300D5AC55 /* SetupResult.swift */; }; B5F1DA8D1B9AA97D007C5CBB /* ImportableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5F1DA8C1B9AA97D007C5CBB /* ImportableObject.swift */; }; B5F1DA901B9AA991007C5CBB /* ImportableUniqueObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5F1DA8F1B9AA991007C5CBB /* ImportableUniqueObject.swift */; }; B5FAD6A91B50A4B400714891 /* NSProgress+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5FAD6A81B50A4B300714891 /* NSProgress+Convenience.swift */; }; @@ -779,12 +658,6 @@ B5D3F6441C887C0A00C7492A /* LegacySQLiteStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySQLiteStore.swift; sourceTree = ""; }; B5D7A5B51CA3BF8F005C752B /* CSInto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSInto.swift; sourceTree = ""; }; B5D9C8F61B160ED200E64F0E /* CoreStore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; path = CoreStore.podspec; sourceTree = SOURCE_ROOT; }; - B5D9E3341CA2C317007A9D52 /* CoreStore_iOS7.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreStore_iOS7.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B5D9E3371CA2C6BF007A9D52 /* GCDBlock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GCDBlock.swift; path = Carthage/Checkouts/GCDKit/Sources/GCDBlock.swift; sourceTree = ""; }; - B5D9E3381CA2C6BF007A9D52 /* GCDGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GCDGroup.swift; path = Carthage/Checkouts/GCDKit/Sources/GCDGroup.swift; sourceTree = ""; }; - B5D9E33A1CA2C6BF007A9D52 /* GCDQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GCDQueue.swift; path = Carthage/Checkouts/GCDKit/Sources/GCDQueue.swift; sourceTree = ""; }; - B5D9E33B1CA2C6BF007A9D52 /* GCDSemaphore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GCDSemaphore.swift; path = Carthage/Checkouts/GCDKit/Sources/GCDSemaphore.swift; sourceTree = ""; }; - B5D9E33C1CA2C6BF007A9D52 /* GCDTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GCDTimer.swift; path = Carthage/Checkouts/GCDKit/Sources/GCDTimer.swift; sourceTree = ""; }; B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSCoreStore.swift; sourceTree = ""; }; B5DBE2D11C991B3E00B5CEFA /* CSDataStack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSDataStack.swift; sourceTree = ""; }; B5DBE2DA1C9939E100B5CEFA /* CoreStoreTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CoreStoreTests-Bridging-Header.h"; sourceTree = ""; }; @@ -925,15 +798,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B5D9E32A1CA2C317007A9D52 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B5D9E32C1CA2C317007A9D52 /* Foundation.framework in Frameworks */, - B5D9E32D1CA2C317007A9D52 /* CoreData.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -957,7 +821,6 @@ B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */, 82BA18891C4BBCBA00A0916E /* CoreStore.framework */, 82BA18921C4BBCBA00A0916E /* CoreStoreTests.xctest */, - B5D9E3341CA2C317007A9D52 /* CoreStore_iOS7.framework */, ); name = Products; sourceTree = ""; @@ -1030,7 +893,6 @@ 2F291E3119C6D4D3007AF63F /* Frameworks */ = { isa = PBXGroup; children = ( - B5D9E3361CA2C6A3007A9D52 /* GCDKit iOS7 */, B519E4571C4CD2CA00E7B469 /* GCDKit.framework */, B5548CD71BD65AE50077652A /* CoreData.framework */, B56321791BD650DE006C9394 /* CoreData.framework */, @@ -1152,18 +1014,6 @@ name = Swift; sourceTree = ""; }; - B5D9E3361CA2C6A3007A9D52 /* GCDKit iOS7 */ = { - isa = PBXGroup; - children = ( - B5D9E3371CA2C6BF007A9D52 /* GCDBlock.swift */, - B5D9E3381CA2C6BF007A9D52 /* GCDGroup.swift */, - B5D9E33A1CA2C6BF007A9D52 /* GCDQueue.swift */, - B5D9E33B1CA2C6BF007A9D52 /* GCDSemaphore.swift */, - B5D9E33C1CA2C6BF007A9D52 /* GCDTimer.swift */, - ); - name = "GCDKit iOS7"; - sourceTree = ""; - }; B5DBE2CB1C99148100B5CEFA /* ObjectiveC */ = { isa = PBXGroup; children = ( @@ -1414,15 +1264,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B5D9E32E1CA2C317007A9D52 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B55717431D15B09D009BDBCA /* CoreStoreBridge.h in Headers */, - B5D9E32F1CA2C317007A9D52 /* CoreStore.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1552,24 +1393,6 @@ productReference = B563216F1BD65082006C9394 /* CoreStore.framework */; productType = "com.apple.product-type.framework"; }; - B5D9E2ED1CA2C317007A9D52 /* CoreStore iOS7 */ = { - isa = PBXNativeTarget; - buildConfigurationList = B5D9E3311CA2C317007A9D52 /* Build configuration list for PBXNativeTarget "CoreStore iOS7" */; - buildPhases = ( - B5D9E2EE1CA2C317007A9D52 /* Sources */, - B5D9E32A1CA2C317007A9D52 /* Frameworks */, - B5D9E32E1CA2C317007A9D52 /* Headers */, - B5D9E3301CA2C317007A9D52 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "CoreStore iOS7"; - productName = CoreStore; - productReference = B5D9E3341CA2C317007A9D52 /* CoreStore_iOS7.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1582,24 +1405,31 @@ TargetAttributes = { 2F03A52F19C5C6DA005002A5 = { CreatedOnToolsVersion = 6.0; + LastSwiftMigration = 0800; }; 2F03A53A19C5C6DA005002A5 = { CreatedOnToolsVersion = 6.0; + LastSwiftMigration = 0800; }; 82BA18881C4BBCBA00A0916E = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 82BA18911C4BBCBA00A0916E = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; B52DD1731BE1F8CC00949AFE = { CreatedOnToolsVersion = 7.1; + LastSwiftMigration = 0800; }; B52DD17C1BE1F8CC00949AFE = { CreatedOnToolsVersion = 7.1; + LastSwiftMigration = 0800; }; B563216E1BD65082006C9394 = { CreatedOnToolsVersion = 7.0.1; + LastSwiftMigration = 0800; }; }; }; @@ -1616,7 +1446,6 @@ projectDirPath = ""; projectRoot = ""; targets = ( - B5D9E2ED1CA2C317007A9D52 /* CoreStore iOS7 */, 2F03A52F19C5C6DA005002A5 /* CoreStore iOS */, 2F03A53A19C5C6DA005002A5 /* CoreStoreTests iOS */, 82BA18881C4BBCBA00A0916E /* CoreStore tvOS */, @@ -1678,13 +1507,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B5D9E3301CA2C317007A9D52 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -2249,130 +2071,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B5D9E2EE1CA2C317007A9D52 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B5ECDC0C1CA8161B00C7F112 /* CSGroupBy.swift in Sources */, - B5EA11DD1CA3AFD9002282F8 /* NSPersistentStoreCoordinator+Setup.swift in Sources */, - B53FBA191CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, - B538BA761D15B3E30003A766 /* CoreStoreBridge.m in Sources */, - B5ECDC3A1CA8369400C7F112 /* CSDataStack.swift in Sources */, - B5D9E2EF1CA2C317007A9D52 /* ObjectMonitor.swift in Sources */, - B5ECDC3B1CA836AD00C7F112 /* CoreStoreBridge.swift in Sources */, - B5ECDC431CA836F800C7F112 /* SetupResult.swift in Sources */, - B59983491CA54BC100E1A417 /* CSBaseDataTransaction.swift in Sources */, - B5E2222B1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */, - B501FDE81CA8D20500BE22EF /* CSListObserver.swift in Sources */, - B5D9E2F01CA2C317007A9D52 /* CoreStoreFetchedResultsController.swift in Sources */, - B5D9E3461CA2C6C4007A9D52 /* GCDQueue.swift in Sources */, - B5E1B5A31CAA4365007FD580 /* CSCoreStore+Observing.swift in Sources */, - B5D9E2F11CA2C317007A9D52 /* ImportableUniqueObject.swift in Sources */, - B5D9E2F21CA2C317007A9D52 /* CoreStore+Setup.swift in Sources */, - B5D7A5B31CA3B738005C752B /* LegacySQLiteStore.swift in Sources */, - B5D7A5AF1CA3B738005C752B /* (null) in Sources */, - B5D7A5B11CA3B738005C752B /* InMemoryStore.swift in Sources */, - B5ECDC3E1CA836BE00C7F112 /* CSCoreStore+Setup.swift in Sources */, - B5D9E2F31CA2C317007A9D52 /* CoreStoreError.swift in Sources */, - B5D9E2F41CA2C317007A9D52 /* Where.swift in Sources */, - B5677D3E1CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */, - B5D9E2F51CA2C317007A9D52 /* FetchedResultsControllerDelegate.swift in Sources */, - B5D9E2F61CA2C317007A9D52 /* MigrationType.swift in Sources */, - B5D9E2F71CA2C317007A9D52 /* DataStack+Querying.swift in Sources */, - B5D9E2F81CA2C317007A9D52 /* SectionBy.swift in Sources */, - B5D9E2F91CA2C317007A9D52 /* NSManagedObjectContext+Transaction.swift in Sources */, - B52661411CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, - B5D9E2FA1CA2C317007A9D52 /* UnsafeDataTransaction+Observing.swift in Sources */, - B5E1B5991CAA0C23007FD580 /* CSObjectObserver.swift in Sources */, - B5ECDC061CA8138100C7F112 /* CSOrderBy.swift in Sources */, - B5ECDC401CA836C800C7F112 /* CSInMemoryStore.swift in Sources */, - B5D9E2FB1CA2C317007A9D52 /* MigrationChain.swift in Sources */, - B5E1B5941CAA0C15007FD580 /* CSObjectMonitor.swift in Sources */, - B5D9E2FC1CA2C317007A9D52 /* Tweak.swift in Sources */, - B5D9E2FD1CA2C317007A9D52 /* OrderBy.swift in Sources */, - B5D9E2FE1CA2C317007A9D52 /* NSManagedObjectContext+Setup.swift in Sources */, - B5D9E2FF1CA2C317007A9D52 /* CoreStore+Migration.swift in Sources */, - B5D9E3001CA2C317007A9D52 /* CoreStore+Logging.swift in Sources */, - B5ECDC1E1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */, - B5D9E3011CA2C317007A9D52 /* Into.swift in Sources */, - B5ECDC301CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */, - B5D9E3021CA2C317007A9D52 /* Select.swift in Sources */, - B53FBA1F1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */, - B5D7A5B41CA3BAE7005C752B /* NSPersistentStore+Setup.swift in Sources */, - B5D9E3031CA2C317007A9D52 /* NSManagedObject+Transaction.swift in Sources */, - B53FBA0C1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */, - B5D9E3041CA2C317007A9D52 /* NSFetchedResultsController+Convenience.swift in Sources */, - B5D9E3051CA2C317007A9D52 /* (null) in Sources */, - B51FE5AC1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */, - B5D9E3061CA2C317007A9D52 /* ObjectObserver.swift in Sources */, - B5D9E3071CA2C317007A9D52 /* NotificationObserver.swift in Sources */, - B53FBA051CAB300C00F0D40A /* CSMigrationType.swift in Sources */, - B5D9E3081CA2C317007A9D52 /* ImportableObject.swift in Sources */, - B53FBA131CAB63CB00F0D40A /* NSProgress+ObjectiveC.swift in Sources */, - B5ECDC3C1CA836B600C7F112 /* CSCoreStore.swift in Sources */, - B5D9E3091CA2C317007A9D52 /* MigrationResult.swift in Sources */, - B53FB9FF1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */, - B5D9E30A1CA2C317007A9D52 /* CoreStore.swift in Sources */, - B5D9E30B1CA2C317007A9D52 /* ClauseTypes.swift in Sources */, - B5D9E30C1CA2C317007A9D52 /* BaseDataTransaction+Querying.swift in Sources */, - B5D9E30D1CA2C317007A9D52 /* MigrationManager.swift in Sources */, - B5D9E30E1CA2C317007A9D52 /* DataStack+Transaction.swift in Sources */, - B5A5F2671CAEC50F004AB9AF /* CSSelect.swift in Sources */, - B5D9E30F1CA2C317007A9D52 /* DataStack.swift in Sources */, - B5D9E3101CA2C317007A9D52 /* Functions.swift in Sources */, - B5D9E3431CA2C6C4007A9D52 /* GCDBlock.swift in Sources */, - B501FDE31CA8D1F500BE22EF /* CSListMonitor.swift in Sources */, - B5D9E3111CA2C317007A9D52 /* ListMonitor.swift in Sources */, - B5ECDC2A1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */, - B5E222241CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */, - B5D9E3121CA2C317007A9D52 /* UnsafeDataTransaction.swift in Sources */, - B5ECDBE01CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */, - B5D9E3131CA2C317007A9D52 /* DataStack+Migration.swift in Sources */, - B5D9E3141CA2C317007A9D52 /* BaseDataTransaction.swift in Sources */, - B559CD441CAA8B6300E4D58B /* CSSetupResult.swift in Sources */, - B5E1B59E1CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */, - B5ECDC241CA81A3900C7F112 /* CSCoreStore+Querying.swift in Sources */, - B5D9E3151CA2C317007A9D52 /* SaveResult.swift in Sources */, - B529C2051CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */, - B5E1B5A91CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */, - B5D9E3161CA2C317007A9D52 /* From.swift in Sources */, - B5ECDC421CA836CF00C7F112 /* CSAsynchronousDataTransaction.swift in Sources */, - B5D7A5B71CA3BF8F005C752B /* CSInto.swift in Sources */, - B5D9E3181CA2C317007A9D52 /* NSProgress+Convenience.swift in Sources */, - B5D9E3191CA2C317007A9D52 /* SynchronousDataTransaction.swift in Sources */, - B5ECDBE61CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */, - B559CD4A1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */, - B5D9E31A1CA2C317007A9D52 /* NSManagedObject+Convenience.swift in Sources */, - B5D9E31B1CA2C317007A9D52 /* NSManagedObjectModel+Setup.swift in Sources */, - B5D7A5B01CA3B738005C752B /* StorageInterface.swift in Sources */, - B5ECDBED1CA6BF2000C7F112 /* CSFrom.swift in Sources */, - B5D9E3441CA2C6C4007A9D52 /* GCDGroup.swift in Sources */, - B5D9E31C1CA2C317007A9D52 /* NSManagedObjectContext+Querying.swift in Sources */, - B5ECDC001CA80CBA00C7F112 /* CSWhere.swift in Sources */, - B5ECDC121CA816E500C7F112 /* CSTweak.swift in Sources */, - B5D9E31D1CA2C317007A9D52 /* CoreStoreLogger.swift in Sources */, - B5D9E31E1CA2C317007A9D52 /* WeakObject.swift in Sources */, - B5ECDC411CA836C800C7F112 /* CSSQliteStore.swift in Sources */, - B5D7A5B21CA3B738005C752B /* SQLiteStore.swift in Sources */, - B501FDDE1CA8D05000BE22EF /* CSSectionBy.swift in Sources */, - B5D9E3471CA2C6C4007A9D52 /* GCDSemaphore.swift in Sources */, - B5D9E31F1CA2C317007A9D52 /* GroupBy.swift in Sources */, - B5D9E3201CA2C317007A9D52 /* DataStack+Observing.swift in Sources */, - B5ECDBFA1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */, - B5D9E3211CA2C317007A9D52 /* CoreStore+Transaction.swift in Sources */, - B5D9E3221CA2C317007A9D52 /* NSManagedObjectContext+CoreStore.swift in Sources */, - B5D9E3481CA2C6C4007A9D52 /* GCDTimer.swift in Sources */, - B59FA0AF1CCBACA6007C9BCA /* ICloudStore.swift in Sources */, - B5D9E3231CA2C317007A9D52 /* CoreStore+Observing.swift in Sources */, - B5ECDC3D1CA836BA00C7F112 /* CSError.swift in Sources */, - B5D9E3241CA2C317007A9D52 /* BaseDataTransaction+Importing.swift in Sources */, - B5D9E3251CA2C317007A9D52 /* DefaultLogger.swift in Sources */, - B5D9E3261CA2C317007A9D52 /* AsynchronousDataTransaction.swift in Sources */, - B5D9E3271CA2C317007A9D52 /* CoreStore+Querying.swift in Sources */, - B5D9E3281CA2C317007A9D52 /* ListObserver.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -2513,6 +2211,7 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; }; name = Debug; }; @@ -2528,6 +2227,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_VERSION = 2.3; }; name = Release; }; @@ -2546,6 +2246,7 @@ SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; }; name = Debug; }; @@ -2559,6 +2260,7 @@ PRODUCT_NAME = CoreStoreTests; SDKROOT = iphoneos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; + SWIFT_VERSION = 2.3; }; name = Release; }; @@ -2576,6 +2278,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; @@ -2593,6 +2296,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; }; name = Release; @@ -2609,6 +2313,7 @@ SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; @@ -2625,6 +2330,7 @@ PRODUCT_NAME = CoreStoreTests; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 3; }; name = Release; @@ -2647,6 +2353,7 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; }; name = Debug; }; @@ -2668,6 +2375,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_VERSION = 2.3; }; name = Release; }; @@ -2686,6 +2394,7 @@ SDKROOT = macosx; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; }; name = Debug; }; @@ -2704,6 +2413,7 @@ PRODUCT_NAME = CoreStoreTests; SDKROOT = macosx; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; + SWIFT_VERSION = 2.3; }; name = Release; }; @@ -2722,6 +2432,7 @@ SDKROOT = watchos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 4; }; name = Debug; @@ -2741,56 +2452,11 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = 4; }; name = Release; }; - B5D9E3321CA2C317007A9D52 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "USE_FRAMEWORKS=0", - "SWIFT_OBJC_INTERFACE_HEADER_NAME=<$(SWIFT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)>", - ); - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = "-D DEBUG"; - PRODUCT_NAME = CoreStore_iOS7; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - B5D9E3331CA2C317007A9D52 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "USE_FRAMEWORKS=0", - "SWIFT_OBJC_INTERFACE_HEADER_NAME=<$(SWIFT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)>", - ); - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_NAME = CoreStore_iOS7; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2866,15 +2532,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B5D9E3311CA2C317007A9D52 /* Build configuration list for PBXNativeTarget "CoreStore iOS7" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B5D9E3321CA2C317007A9D52 /* Debug */, - B5D9E3331CA2C317007A9D52 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ diff --git a/CoreStore.xcodeproj/xcshareddata/xcschemes/CoreStore iOS7.xcscheme b/CoreStore.xcodeproj/xcshareddata/xcschemes/CoreStore iOS7.xcscheme deleted file mode 100644 index f69a837..0000000 --- a/CoreStore.xcodeproj/xcshareddata/xcschemes/CoreStore iOS7.xcscheme +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj b/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj index 48e8c9e..0a6ca15 100644 --- a/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj +++ b/CoreStoreDemo/CoreStoreDemo.xcodeproj/project.pbxproj @@ -277,6 +277,7 @@ TargetAttributes = { B54AAD481AF4D26E00848AE0 = { CreatedOnToolsVersion = 6.3; + LastSwiftMigration = 0800; }; }; }; @@ -461,6 +462,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; }; name = Debug; }; @@ -473,6 +475,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; }; name = Release; }; diff --git a/CoreStoreTests/BaseTests/BaseTestCase.swift b/CoreStoreTests/BaseTests/BaseTestCase.swift index 022b05b..f3f1fe3 100644 --- a/CoreStoreTests/BaseTests/BaseTestCase.swift +++ b/CoreStoreTests/BaseTests/BaseTestCase.swift @@ -49,8 +49,8 @@ class BaseTestCase: XCTestCase { try stack.addStorageAndWait( SQLiteStore( fileURL: SQLiteStore.defaultRootDirectory - .URLByAppendingPathComponent(NSUUID().UUIDString) - .URLByAppendingPathComponent("\(self.dynamicType)_\(($0 ?? "-null-")).sqlite"), + .URLByAppendingPathComponent(NSUUID().UUIDString)! + .URLByAppendingPathComponent("\(self.dynamicType)_\(($0 ?? "-null-")).sqlite")!, configuration: $0, localStorageOptions: .RecreateStoreOnModelMismatch ) diff --git a/CoreStoreTests/StorageInterfaceTests.swift b/CoreStoreTests/StorageInterfaceTests.swift index 8c2e494..2037f8f 100644 --- a/CoreStoreTests/StorageInterfaceTests.swift +++ b/CoreStoreTests/StorageInterfaceTests.swift @@ -66,13 +66,12 @@ final class StorageInterfaceTests: XCTestCase { let defaultRootDirectory = defaultSystemDirectory.URLByAppendingPathComponent( NSBundle.mainBundle().bundleIdentifier ?? "com.CoreStore.DataStack", - isDirectory: true - ) + isDirectory: true)! let applicationName = (NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as? String) ?? "CoreData" let defaultFileURL = defaultRootDirectory - .URLByAppendingPathComponent(applicationName, isDirectory: false) - .URLByAppendingPathExtension("sqlite") + .URLByAppendingPathComponent(applicationName, isDirectory: false)! + .URLByAppendingPathExtension("sqlite")! XCTAssertEqual(SQLiteStore.defaultRootDirectory, defaultRootDirectory) XCTAssertEqual(SQLiteStore.defaultFileURL, defaultFileURL) @@ -95,8 +94,8 @@ final class StorageInterfaceTests: XCTestCase { dynamic func test_ThatFileURLSQLiteStores_ConfigureCorrectly() { let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()) - .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false) - .URLByAppendingPathExtension("db") + .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false)! + .URLByAppendingPathExtension("db")! let bundles = [NSBundle(forClass: self.dynamicType)] let store = SQLiteStore( @@ -151,8 +150,8 @@ final class StorageInterfaceTests: XCTestCase { ).first! let legacyDefaultFileURL = legacyDefaultRootDirectory - .URLByAppendingPathComponent(DataStack.applicationName, isDirectory: false) - .URLByAppendingPathExtension("sqlite") + .URLByAppendingPathComponent(DataStack.applicationName, isDirectory: false)! + .URLByAppendingPathExtension("sqlite")! XCTAssertEqual(LegacySQLiteStore.defaultRootDirectory, legacyDefaultRootDirectory) XCTAssertEqual(LegacySQLiteStore.defaultFileURL, legacyDefaultFileURL) @@ -175,8 +174,8 @@ final class StorageInterfaceTests: XCTestCase { dynamic func test_ThatFileURLLegacySQLiteStores_ConfigureCorrectly() { let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()) - .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false) - .URLByAppendingPathExtension("db") + .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false)! + .URLByAppendingPathExtension("db")! let bundles = [NSBundle(forClass: self.dynamicType)] let store = LegacySQLiteStore( diff --git a/Sources/Internal/FetchedResultsControllerDelegate.swift b/Sources/Internal/FetchedResultsControllerDelegate.swift index fe35a11..fbbe544 100644 --- a/Sources/Internal/FetchedResultsControllerDelegate.swift +++ b/Sources/Internal/FetchedResultsControllerDelegate.swift @@ -108,7 +108,7 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult return } - guard let actualType = NSFetchedResultsChangeType(rawValue: type.rawValue) else { + guard var actualType = NSFetchedResultsChangeType(rawValue: type.rawValue) else { // This fix is for a bug where iOS passes 0 for NSFetchedResultsChangeType, but this is not a valid enum case. // Swift will then always execute the first case of the switch causing strange behaviour. @@ -121,6 +121,16 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult // https://forums.developer.apple.com/message/9998#9998 // https://forums.developer.apple.com/message/31849#31849 + if #available(iOS 10.0, tvOS 10.0, watchOS 3.0, *) { + + // I don't know if iOS 10 even attempted to fix this mess... + if case .Update = actualType + where indexPath != nil && newIndexPath != nil { + + actualType = .Move + } + } + switch actualType { case .Update: @@ -130,8 +140,8 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult } if self.deletedSections.contains(section) || self.insertedSections.contains(section) { - - return + + return } case .Move: diff --git a/Sources/Internal/NSManagedObjectContext+Querying.swift b/Sources/Internal/NSManagedObjectContext+Querying.swift index 9563f77..81dd9d3 100644 --- a/Sources/Internal/NSManagedObjectContext+Querying.swift +++ b/Sources/Internal/NSManagedObjectContext+Querying.swift @@ -205,15 +205,22 @@ internal extension NSManagedObjectContext { internal func fetchCount(fetchRequest: NSFetchRequest) -> Int? { var count = 0 - var error: NSError? + var countError: ErrorType? self.performBlockAndWait { - count = self.countForFetchRequest(fetchRequest, error: &error) + do { + + count = try self.countForFetchRequest(fetchRequest) + } + catch { + + countError = error + } } if count == NSNotFound { CoreStore.log( - CoreStoreError(error), + CoreStoreError(countError), "Failed executing fetch request." ) return nil diff --git a/Sources/Internal/NSManagedObjectModel+Setup.swift b/Sources/Internal/NSManagedObjectModel+Setup.swift index 46b9147..2440d60 100644 --- a/Sources/Internal/NSManagedObjectModel+Setup.swift +++ b/Sources/Internal/NSManagedObjectModel+Setup.swift @@ -42,7 +42,7 @@ internal extension NSManagedObjectModel { } let modelFileURL = NSURL(fileURLWithPath: modelFilePath) - let versionInfoPlistURL = modelFileURL.URLByAppendingPathComponent("VersionInfo.plist", isDirectory: false) + let versionInfoPlistURL = modelFileURL.URLByAppendingPathComponent("VersionInfo.plist", isDirectory: false)! guard let versionInfo = NSDictionary(contentsOfURL: versionInfoPlistURL), let versionHashes = versionInfo["NSManagedObjectModel_VersionHashes"] as? [String: AnyObject] else { @@ -83,7 +83,7 @@ internal extension NSManagedObjectModel { var modelVersionFileURL: NSURL? for modelVersion in modelVersions { - let fileURL = modelFileURL.URLByAppendingPathComponent("\(modelVersion).mom", isDirectory: false) + let fileURL = modelFileURL.URLByAppendingPathComponent("\(modelVersion).mom", isDirectory: false)! if modelVersion == currentModelVersion { @@ -190,7 +190,7 @@ internal extension NSManagedObjectModel { } let versionModelFileURL = modelFileURL.URLByAppendingPathComponent("\(modelVersion).mom", isDirectory: false) - guard let model = NSManagedObjectModel(contentsOfURL: versionModelFileURL) else { + guard let model = NSManagedObjectModel(contentsOfURL: versionModelFileURL!) else { return nil } diff --git a/Sources/Migrating/DataStack+Migration.swift b/Sources/Migrating/DataStack+Migration.swift index 0924e85..9935dea 100644 --- a/Sources/Migrating/DataStack+Migration.swift +++ b/Sources/Migrating/DataStack+Migration.swift @@ -756,20 +756,19 @@ public extension DataStack { let fileURL = storage.fileURL let temporaryDirectoryURL = NSURL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true) - .URLByAppendingPathComponent(NSBundle.mainBundle().bundleIdentifier ?? "com.CoreStore.DataStack") + .URLByAppendingPathComponent(NSBundle.mainBundle().bundleIdentifier ?? "com.CoreStore.DataStack")! .URLByAppendingPathComponent(NSProcessInfo().globallyUniqueString) let fileManager = NSFileManager.defaultManager() try! fileManager.createDirectoryAtURL( - temporaryDirectoryURL, + temporaryDirectoryURL!, withIntermediateDirectories: true, attributes: nil ) - let temporaryFileURL = temporaryDirectoryURL.URLByAppendingPathComponent( + let temporaryFileURL = temporaryDirectoryURL!.URLByAppendingPathComponent( fileURL.lastPathComponent!, - isDirectory: false - ) + isDirectory: false)! let migrationManager = MigrationManager( sourceModel: sourceModel, diff --git a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift index f4bdaf2..f3abdd9 100644 --- a/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift @@ -65,8 +65,7 @@ public final class LegacySQLiteStore: LocalStorage, DefaultInitializableStore { self.fileURL = LegacySQLiteStore.defaultRootDirectory.URLByAppendingPathComponent( fileName, - isDirectory: false - ) + isDirectory: false)! self.configuration = configuration self.mappingModelBundles = mappingModelBundles self.localStorageOptions = localStorageOptions @@ -210,8 +209,8 @@ public final class LegacySQLiteStore: LocalStorage, DefaultInitializableStore { }() internal static let defaultFileURL = LegacySQLiteStore.defaultRootDirectory - .URLByAppendingPathComponent(DataStack.applicationName, isDirectory: false) - .URLByAppendingPathExtension("sqlite") + .URLByAppendingPathComponent(DataStack.applicationName, isDirectory: false)! + .URLByAppendingPathExtension("sqlite")! // MARK: Private diff --git a/Sources/Setup/StorageInterfaces/SQLiteStore.swift b/Sources/Setup/StorageInterfaces/SQLiteStore.swift index a566a89..15c273c 100644 --- a/Sources/Setup/StorageInterfaces/SQLiteStore.swift +++ b/Sources/Setup/StorageInterfaces/SQLiteStore.swift @@ -63,7 +63,7 @@ public final class SQLiteStore: LocalStorage, DefaultInitializableStore { public init(fileName: String, configuration: String? = nil, mappingModelBundles: [NSBundle] = NSBundle.allBundles(), localStorageOptions: LocalStorageOptions = nil) { self.fileURL = SQLiteStore.defaultRootDirectory - .URLByAppendingPathComponent(fileName, isDirectory: false) + .URLByAppendingPathComponent(fileName, isDirectory: false)! self.configuration = configuration self.mappingModelBundles = mappingModelBundles self.localStorageOptions = localStorageOptions @@ -79,7 +79,7 @@ public final class SQLiteStore: LocalStorage, DefaultInitializableStore { */ public init() { - self.fileURL = SQLiteStore.defaultFileURL + self.fileURL = SQLiteStore.defaultFileURL! self.configuration = nil self.mappingModelBundles = NSBundle.allBundles() self.localStorageOptions = nil @@ -206,15 +206,13 @@ public final class SQLiteStore: LocalStorage, DefaultInitializableStore { return defaultSystemDirectory.URLByAppendingPathComponent( NSBundle.mainBundle().bundleIdentifier ?? "com.CoreStore.DataStack", - isDirectory: true - ) + isDirectory: true)! }() internal static let defaultFileURL = SQLiteStore.defaultRootDirectory .URLByAppendingPathComponent( (NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as? String) ?? "CoreData", - isDirectory: false - ) + isDirectory: false)! .URLByAppendingPathExtension("sqlite") From 6cef8f4b4fc6bb1686c1375fea74b7da2ba55956 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 13:23:56 +0900 Subject: [PATCH 08/15] updated travis yml --- .travis.yml | 25 ++++++++++---------- Carthage/Checkouts/GCDKit | 2 +- CoreStore.podspec | 2 +- README.md | 35 ++++++++++------------------ Sources/ObjectiveC/CoreStoreBridge.m | 15 ------------ 5 files changed, 27 insertions(+), 52 deletions(-) diff --git a/.travis.yml b/.travis.yml index ca29d13..71b6942 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode7.3 +osx_image: xcode8 sudo: false git: submodules: false @@ -9,17 +9,18 @@ env: global: - LC_CTYPE=en_US.UTF-8 - LANG=en_US.UTF-8 - matrix: - - DESTINATION="OS=9.3,name=iPhone 6s" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=8.4,name=iPhone 6" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=8.3,name=iPhone 5S" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=8.2,name=iPhone 5" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=8.1,name=iPhone 4S" SCHEME="CoreStore iOS" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="YES" - - DESTINATION="OS=8.1,name=iPhone 4S" SCHEME="CoreStore iOS7" SDK=iphonesimulator9.3 RUN_TESTS="YES" POD_LINT="YES" - - DESTINATION="arch=x86_64" SCHEME="CoreStore OSX" SDK=macosx10.11 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=2.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator2.2 RUN_TESTS="NO" POD_LINT="NO" - - DESTINATION="OS=9.2,name=Apple TV 1080p" SCHEME="CoreStore tvOS" SDK=appletvsimulator9.2 RUN_TESTS="YES" POD_LINT="NO" + matrix: + - DESTINATION="OS=10.0,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=9.3,name=iPhone 6s" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=8.4,name=iPhone 6" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=8.3,name=iPhone 5S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=8.2,name=iPhone 5" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=8.1,name=iPhone 4S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="YES" + - DESTINATION="arch=x86_64" SCHEME="CoreStore OSX" SDK=macosx10.12 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=3.0,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator3.0 RUN_TESTS="NO" POD_LINT="NO" + - DESTINATION="OS=2.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator3.0 RUN_TESTS="NO" POD_LINT="NO" + - DESTINATION="OS=9.2,name=Apple TV 1080p" SCHEME="CoreStore tvOS" SDK=appletvsimulator10.0 RUN_TESTS="YES" POD_LINT="NO" before_install: - gem install cocoapods --no-rdoc --no-ri --no-document --quiet - gem install xcpretty --no-rdoc --no-ri --no-document --quiet diff --git a/Carthage/Checkouts/GCDKit b/Carthage/Checkouts/GCDKit index 7f88719..a7f2b8a 160000 --- a/Carthage/Checkouts/GCDKit +++ b/Carthage/Checkouts/GCDKit @@ -1 +1 @@ -Subproject commit 7f88719fbd4824a378576d679b0b929816973f25 +Subproject commit a7f2b8ac848eaa3ec97682f165505fa377f1fe8c diff --git a/CoreStore.podspec b/CoreStore.podspec index 3e79aec..785a259 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "2.0.6" + s.version = "2.1.0" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/README.md b/README.md index 4500c76..8d8b65b 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,12 @@ Unleashing the real power of Core Data with the elegance and safety of Swift Reach me on Twitter!

-* Swift 2.2 (Xcode 7.3) + * iOS 7+ / macOS 10.10+ / watchOS 2.0+ / tvOS 9.0+ +- for Swift 2.2 (Xcode 7.3 and iOS 7): Use version [2.0.6](https://github.com/JohnEstropia/CoreStore/releases/tag/2.0.6) or the [master_ios_7_to_9](https://github.com/JohnEstropia/CoreStore/tree/master_ios_7_to_9) branch +- for Swift 2.3 (Xcode 8): Use version [2.1.0](https://github.com/JohnEstropia/CoreStore/releases/tag/2.1.0) or the [master](https://github.com/JohnEstropia/CoreStore/tree/master) branch +- for Swift 3 (Xcode 8): Use the [swift3_develop](https://github.com/JohnEstropia/CoreStore/tree/swift3_develop) branch + * **New in CoreStore 2.0:** Objective-C support! All CoreStore types now have their corresponding Objective-C "bridging classes". Perfect for projects transitioning from Objective-C to Swift! Upgrading from CoreStore 1.x to 2.x? Check out the [new features](#new-in-corestore-20) and make sure to read the [Migration guide](#upgrading-from-1xx-to-2xx). @@ -1411,13 +1415,7 @@ NSArray *objects = CSSortAscending(CSKeyPath(MYPerson, firstName)), nil)]]; ``` -To use these syntax sugars, include *CoreStoreBridge.h* in your Objective-C source files. For projects that support iOS 7 (and thus cannot build CoreStore as a module), you will need to add -``` -SWIFT_OBJC_INTERFACE_HEADER_NAME=$(SWIFT_OBJC_INTERFACE_HEADER_NAME) -``` -to your target's `GCC_PREPROCESSOR_DEFINITIONS` build setting. - -GCC_PREPROCESSOR_DEFINITIONS +To use these syntax sugars, include *CoreStoreBridge.h* in your Objective-C source files. # Roadmap @@ -1429,14 +1427,14 @@ to your target's `GCC_PREPROCESSOR_DEFINITIONS` build setting. # Installation - Requires: - - iOS 7 SDK and above - - Swift 2.2 (Xcode 7.3) + - iOS 8 SDK and above + - Swift 2.3 (Xcode 8) - Dependencies: - [GCDKit](https://github.com/JohnEstropia/GCDKit) - Other notes: - The `com.apple.CoreData.ConcurrencyDebug` debug argument should be turned off for the app. CoreStore already guarantees safety for you by making the main context read-only, and by only executing transactions serially. -### Install with CocoaPods (iOS 7 not supported) +### Install with CocoaPods ``` pod 'CoreStore' ``` @@ -1445,8 +1443,8 @@ This installs CoreStore as a framework. Declare `import CoreStore` in your swift ### Install with Carthage In your `Cartfile`, add ``` -github "JohnEstropia/CoreStore" >= 2.0.0 -github "JohnEstropia/GCDKit" >= 1.2.5 +github "JohnEstropia/CoreStore" >= 2.1.0 +github "JohnEstropia/GCDKit" >= 1.3.0 ``` and run ``` @@ -1459,7 +1457,7 @@ git submodule add https://github.com/JohnEstropia/CoreStore.git - - # Changesets ### Upgrading from 1.x.x to 2.x.x **Obsoleted** diff --git a/Sources/ObjectiveC/CoreStoreBridge.m b/Sources/ObjectiveC/CoreStoreBridge.m index 6c770c5..64f42a4 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.m +++ b/Sources/ObjectiveC/CoreStoreBridge.m @@ -26,23 +26,8 @@ #import "CoreStoreBridge.h" -#if USE_FRAMEWORKS #import -#elif !defined(SWIFT_OBJC_INTERFACE_HEADER_NAME) -#error Add "SWIFT_OBJC_INTERFACE_HEADER_NAME=$(SWIFT_OBJC_INTERFACE_HEADER_NAME)" to the project's GCC_PREPROCESSOR_DEFINITIONS settings - -#elif __has_include(SWIFT_OBJC_INTERFACE_HEADER_NAME) -#import SWIFT_OBJC_INTERFACE_HEADER_NAME - -#else -#define _STRINGIFY(x) #x -#define STRINGIFY(x) _STRINGIFY(x) -#import STRINGIFY(SWIFT_OBJC_INTERFACE_HEADER_NAME) - -#endif - - #pragma mark - Clauses From effa231719054f0d336eadb8708fd55bf604f3bc Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 13:37:00 +0900 Subject: [PATCH 09/15] fix travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 71b6942..3e38fa1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ env: global: - LC_CTYPE=en_US.UTF-8 - LANG=en_US.UTF-8 - matrix: + matrix: - DESTINATION="OS=10.0,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=9.3,name=iPhone 6s" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" From e5f162c5e11ba26301e6388a8dd8e35f632a44e1 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 13:59:04 +0900 Subject: [PATCH 10/15] minor readme edits --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8d8b65b..114485a 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ Unleashing the real power of Core Data with the elegance and safety of Swift

* iOS 7+ / macOS 10.10+ / watchOS 2.0+ / tvOS 9.0+ -- for Swift 2.2 (Xcode 7.3 and iOS 7): Use version [2.0.6](https://github.com/JohnEstropia/CoreStore/releases/tag/2.0.6) or the [master_ios_7_to_9](https://github.com/JohnEstropia/CoreStore/tree/master_ios_7_to_9) branch -- for Swift 2.3 (Xcode 8): Use version [2.1.0](https://github.com/JohnEstropia/CoreStore/releases/tag/2.1.0) or the [master](https://github.com/JohnEstropia/CoreStore/tree/master) branch -- for Swift 3 (Xcode 8): Use the [swift3_develop](https://github.com/JohnEstropia/CoreStore/tree/swift3_develop) branch + - for Swift 2.2 (Xcode 7.3 and iOS 7): Use version [2.0.6](https://github.com/JohnEstropia/CoreStore/releases/tag/2.0.6) or the [master_ios_7_to_9](https://github.com/JohnEstropia/CoreStore/tree/master_ios_7_to_9) branch + - for Swift 2.3 (Xcode 8): Use version [2.1.0](https://github.com/JohnEstropia/CoreStore/releases/tag/2.1.0) or the [master](https://github.com/JohnEstropia/CoreStore/tree/master) branch + - for Swift 3 (Xcode 8): Use the [swift3_develop](https://github.com/JohnEstropia/CoreStore/tree/swift3_develop) branch * **New in CoreStore 2.0:** Objective-C support! All CoreStore types now have their corresponding Objective-C "bridging classes". Perfect for projects transitioning from Objective-C to Swift! From 2da659a967b57acaa544bffeda0a9a87c70878ff Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 14:14:29 +0900 Subject: [PATCH 11/15] travis yml update --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3e38fa1..00d07cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: - LANG=en_US.UTF-8 matrix: - DESTINATION="OS=10.0,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=9.3,name=iPhone 6s" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" + - DESTINATION="OS=9.3,name=iPhone 6S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=8.4,name=iPhone 6" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=8.3,name=iPhone 5S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" From af141d4a3122814626818506b0034f514eff6eca Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 14:26:33 +0900 Subject: [PATCH 12/15] travis yml update --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 00d07cc..2a700db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,6 @@ env: - LANG=en_US.UTF-8 matrix: - DESTINATION="OS=10.0,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - - DESTINATION="OS=9.3,name=iPhone 6S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=8.4,name=iPhone 6" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" - DESTINATION="OS=8.3,name=iPhone 5S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.0 RUN_TESTS="YES" POD_LINT="NO" From f18d62f64307c2d06358b35f33a5cc9d1c3290c9 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 17 Sep 2016 14:27:36 +0900 Subject: [PATCH 13/15] travis yml update --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2a700db..869e0d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,8 +36,8 @@ script: xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; fi - - xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator9.3" -destination "OS=9.3,name=iPhone 6s" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; - - xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator9.3" -destination "OS=9.3,name=iPhone 6s" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; + - xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator10.0" -destination "OS=10.0,name=iPhone 7" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; + - xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator10.0" -destination "OS=10.0,name=iPhone 7" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c; - if [ $POD_LINT == "YES" ]; then pod lib lint --quick; fi From 4d2ebe4ea8875bbacc7435124bb87c9708d1c35b Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Tue, 27 Sep 2016 02:39:28 +0900 Subject: [PATCH 14/15] workaround #100 (NSFetchRequest.affectedStores ARC bug) --- CoreStore.podspec | 2 +- CoreStore.xcodeproj/project.pbxproj | 10 ----- Sources/Info.plist | 2 +- Sources/Internal/CoreStoreFetchRequest.swift | 42 -------------------- Sources/ObjectiveC/CoreStoreBridge.h | 9 +++++ Sources/ObjectiveC/CoreStoreBridge.m | 18 +++++++++ 6 files changed, 29 insertions(+), 54 deletions(-) delete mode 100644 Sources/Internal/CoreStoreFetchRequest.swift diff --git a/CoreStore.podspec b/CoreStore.podspec index 785a259..5091e12 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "2.1.0" + s.version = "2.1.1" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 8611ea5..cc811ec 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -145,10 +145,6 @@ B52557881D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B52557891D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B525578A1D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; - B52661401CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661421CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661431CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661441CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; B529C2041CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2061CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2071CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; @@ -600,7 +596,6 @@ B525577F1D029D2500E51965 /* TweakTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TweakTests.swift; sourceTree = ""; }; B52557831D02A07400E51965 /* SectionByTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionByTests.swift; sourceTree = ""; }; B52557871D02DE8100E51965 /* FetchTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchTests.swift; sourceTree = ""; }; - B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreFetchRequest.swift; sourceTree = ""; }; B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSaveResult.swift; sourceTree = ""; }; B52DD1741BE1F8CC00949AFE /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1178,7 +1173,6 @@ B5E834BA1B7691F3001D3D50 /* Functions.swift */, B5FAD6AB1B51285300714891 /* MigrationManager.swift */, B5E84F2B1AFF849C0064E85B /* NotificationObserver.swift */, - B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */, B5E84F2C1AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift */, B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */, B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */, @@ -1558,7 +1552,6 @@ B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */, B5DBE2D21C991B3E00B5CEFA /* CSDataStack.swift in Sources */, B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */, - B52661401CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, B53FBA181CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */, B5519A591CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, @@ -1708,7 +1701,6 @@ 82BA18B41C4BBD3900A0916E /* BaseDataTransaction+Importing.swift in Sources */, B53FBA1A1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, 82BA18CA1C4BBD5900A0916E /* MigrationResult.swift in Sources */, - B52661421CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, B5519A5A1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */, 82BA18C11C4BBD5300A0916E /* CoreStore+Observing.swift in Sources */, @@ -1857,7 +1849,6 @@ B52DD1C71BE1F94600949AFE /* NSManagedObjectContext+Querying.swift in Sources */, B52DD1C81BE1F94600949AFE /* NSManagedObjectContext+Setup.swift in Sources */, B52DD1C31BE1F94600949AFE /* NotificationObserver.swift in Sources */, - B52661441CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */, B5220E221D130818009BC71E /* CSSectionBy.swift in Sources */, B52DD1BC1BE1F94000949AFE /* MigrationResult.swift in Sources */, @@ -2001,7 +1992,6 @@ B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */, B5DBE2D41C991B3E00B5CEFA /* CSDataStack.swift in Sources */, B50392FA1C47963F009900CA /* NSManagedObject+Transaction.swift in Sources */, - B52661431CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, B53FBA1B1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, B5519A5B1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */, diff --git a/Sources/Info.plist b/Sources/Info.plist index 0100960..449c7b6 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.6 + 2.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/Sources/Internal/CoreStoreFetchRequest.swift b/Sources/Internal/CoreStoreFetchRequest.swift deleted file mode 100644 index 033b2df..0000000 --- a/Sources/Internal/CoreStoreFetchRequest.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// CoreStoreFetchRequest.swift -// CoreStore -// -// Copyright © 2016 John Rommel Estropia -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation -import CoreData - - -// MARK: - CoreStoreFetchRequest - -// Bugfix for NSFetchRequest messing up memory management for `affectedStores` -// http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified -internal final class CoreStoreFetchRequest: NSFetchRequest { - - @objc - override var affectedStores: [NSPersistentStore]? { - - get { return super.affectedStores } - set { super.affectedStores = newValue } - } -} diff --git a/Sources/ObjectiveC/CoreStoreBridge.h b/Sources/ObjectiveC/CoreStoreBridge.h index bf8faf3..7809fd1 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.h +++ b/Sources/ObjectiveC/CoreStoreBridge.h @@ -570,4 +570,13 @@ CORESTORE_EXTERN CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RETURNS_RETAINED; +#pragma mark CoreStoreFetchRequest + +// Bugfix for NSFetchRequest messing up memory management for `affectedStores` +// http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified +NS_SWIFT_NAME(CoreStoreFetchRequest) +@interface _CSFetchRequest: NSFetchRequest +@end + + #endif /* CoreStoreBridge_h */ diff --git a/Sources/ObjectiveC/CoreStoreBridge.m b/Sources/ObjectiveC/CoreStoreBridge.m index 64f42a4..2a7039d 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.m +++ b/Sources/ObjectiveC/CoreStoreBridge.m @@ -218,3 +218,21 @@ CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RE return [[CSWhere alloc] initWithPredicate:predicate]; } + + +#pragma mark CoreStoreFetchRequest + +@interface _CSFetchRequest () +@end + +@implementation _CSFetchRequest + +- (NSArray *)affectedStores { + + // Bugfix for NSFetchRequest messing up memory management for `affectedStores` + // http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified + CFBridgingRetain([super affectedStores]); + return [super affectedStores]; +} + +@end From ed8c7b35e8c32131dc9ddb4cfa62c33be441b91e Mon Sep 17 00:00:00 2001 From: John Estropia Date: Tue, 27 Sep 2016 17:31:08 +0900 Subject: [PATCH 15/15] Reduce leaking (a little) on the workaround for NSFetchRequest.affectedStores ARC bug --- CoreStoreTests/FromTests.swift | 120 +++++++++++++-------------- CoreStoreTests/GroupByTests.swift | 2 +- CoreStoreTests/OrderByTests.swift | 2 +- CoreStoreTests/TweakTests.swift | 2 +- CoreStoreTests/WhereTests.swift | 2 +- Sources/ObjectiveC/CoreStoreBridge.h | 3 + Sources/ObjectiveC/CoreStoreBridge.m | 25 +++++- Sources/Observing/ListMonitor.swift | 4 +- 8 files changed, 91 insertions(+), 69 deletions(-) diff --git a/CoreStoreTests/FromTests.swift b/CoreStoreTests/FromTests.swift index 48665ce..5c03671 100644 --- a/CoreStoreTests/FromTests.swift +++ b/CoreStoreTests/FromTests.swift @@ -74,33 +74,33 @@ final class FromTests: BaseTestCase { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"]) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } } @@ -115,102 +115,102 @@ final class FromTests: BaseTestCase { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config1"]) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config1"]) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } } @@ -225,99 +225,99 @@ final class FromTests: BaseTestCase { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(Set(affectedConfigurations), ["PF_DEFAULT_CONFIGURATION_NAME", "Config1"] as Set) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config1"]) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"]) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } } @@ -332,96 +332,96 @@ final class FromTests: BaseTestCase { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config1"]) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config1"]) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From() - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config2"]) } do { let from = From("Config1") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = self.expectLogger([.LogWarning]) { from.applyToFetchRequest(request, context: dataStack.mainContext) } XCTAssertFalse(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertTrue(affectedConfigurations.isEmpty) } do { let from = From("Config2") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext) XCTAssertTrue(storesFound) XCTAssertNotNil(request.entity) - XCTAssertNotNil(request.affectedStores) + XCTAssertNotNil(request.safeAffectedStores) XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName)) - let affectedConfigurations = request.affectedStores!.map { $0.configurationName } + let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName } XCTAssertEqual(affectedConfigurations, ["Config2"]) } } diff --git a/CoreStoreTests/GroupByTests.swift b/CoreStoreTests/GroupByTests.swift index 5ed3aa2..3bc8fd7 100644 --- a/CoreStoreTests/GroupByTests.swift +++ b/CoreStoreTests/GroupByTests.swift @@ -68,7 +68,7 @@ final class GroupByTests: BaseTestCase { let groupBy = GroupBy("testString") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() _ = From(TestEntity1).applyToFetchRequest(request, context: dataStack.mainContext) groupBy.applyToFetchRequest(request) diff --git a/CoreStoreTests/OrderByTests.swift b/CoreStoreTests/OrderByTests.swift index 483f508..2eea837 100644 --- a/CoreStoreTests/OrderByTests.swift +++ b/CoreStoreTests/OrderByTests.swift @@ -179,7 +179,7 @@ final class OrderByTests: XCTestCase { dynamic func test_ThatOrderByClauses_ApplyToFetchRequestsCorrectly() { let orderBy = OrderBy(.Ascending("key")) - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() orderBy.applyToFetchRequest(request) XCTAssertNotNil(request.sortDescriptors) XCTAssertEqual(request.sortDescriptors ?? [], orderBy.sortDescriptors) diff --git a/CoreStoreTests/TweakTests.swift b/CoreStoreTests/TweakTests.swift index 18416d4..d8f1aae 100644 --- a/CoreStoreTests/TweakTests.swift +++ b/CoreStoreTests/TweakTests.swift @@ -43,7 +43,7 @@ final class TweakTests: XCTestCase { $0.fetchLimit = 200 $0.predicate = predicate } - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() tweak.applyToFetchRequest(request) XCTAssertEqual(request.fetchOffset, 100) XCTAssertEqual(request.fetchLimit, 200) diff --git a/CoreStoreTests/WhereTests.swift b/CoreStoreTests/WhereTests.swift index 053e657..24044e5 100644 --- a/CoreStoreTests/WhereTests.swift +++ b/CoreStoreTests/WhereTests.swift @@ -142,7 +142,7 @@ final class WhereTests: XCTestCase { dynamic func test_ThatWhereClauses_ApplyToFetchRequestsCorrectly() { let whereClause = Where("key", isEqualTo: "value") - let request = NSFetchRequest() + let request = CoreStoreFetchRequest() whereClause.applyToFetchRequest(request) XCTAssertNotNil(request.predicate) XCTAssertEqual(request.predicate, whereClause.predicate) diff --git a/Sources/ObjectiveC/CoreStoreBridge.h b/Sources/ObjectiveC/CoreStoreBridge.h index 7809fd1..e685223 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.h +++ b/Sources/ObjectiveC/CoreStoreBridge.h @@ -576,6 +576,9 @@ CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RE // http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified NS_SWIFT_NAME(CoreStoreFetchRequest) @interface _CSFetchRequest: NSFetchRequest + +@property (nullable, nonatomic, copy, readonly) NSArray *safeAffectedStores; + @end diff --git a/Sources/ObjectiveC/CoreStoreBridge.m b/Sources/ObjectiveC/CoreStoreBridge.m index 2a7039d..2ded9b0 100644 --- a/Sources/ObjectiveC/CoreStoreBridge.m +++ b/Sources/ObjectiveC/CoreStoreBridge.m @@ -223,16 +223,35 @@ CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RE #pragma mark CoreStoreFetchRequest @interface _CSFetchRequest () + +@property (nullable, nonatomic, copy) NSArray *safeAffectedStores; +@property (nullable, nonatomic, assign) CFArrayRef releaseArray; + @end @implementation _CSFetchRequest -- (NSArray *)affectedStores { +// MARK: NSFetchRequest + +- (void)setAffectedStores:(NSArray *_Nullable)affectedStores { // Bugfix for NSFetchRequest messing up memory management for `affectedStores` // http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified - CFBridgingRetain([super affectedStores]); - return [super affectedStores]; + + if (NSFoundationVersionNumber < NSFoundationVersionNumber10_0) { + + self.safeAffectedStores = affectedStores; + [super setAffectedStores:affectedStores]; + return; + } + if (self.releaseArray != NULL) { + + CFRelease(self.releaseArray); + self.releaseArray = NULL; + } + self.safeAffectedStores = affectedStores; + [super setAffectedStores:affectedStores]; + self.releaseArray = CFBridgingRetain([super affectedStores]); } @end diff --git a/Sources/Observing/ListMonitor.swift b/Sources/Observing/ListMonitor.swift index e4742ad..24cc7fd 100644 --- a/Sources/Observing/ListMonitor.swift +++ b/Sources/Observing/ListMonitor.swift @@ -1123,7 +1123,7 @@ public final class ListMonitor: Hashable { self.isPersistentStoreChanging = true guard let removedStores = (note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore]).flatMap(Set.init) - where !Set(self.fetchedResultsController.fetchRequest.affectedStores ?? []).intersect(removedStores).isEmpty else { + where !Set((self.fetchedResultsController.fetchRequest as! CoreStoreFetchRequest).safeAffectedStores ?? []).intersect(removedStores).isEmpty else { return } @@ -1144,7 +1144,7 @@ public final class ListMonitor: Hashable { if !self.isPendingRefetch { - let previousStores = Set(self.fetchedResultsController.fetchRequest.affectedStores ?? []) + let previousStores = Set((self.fetchedResultsController.fetchRequest as! CoreStoreFetchRequest).safeAffectedStores ?? []) let currentStores = previousStores .subtract(note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore] ?? []) .union(note.userInfo?[NSAddedPersistentStoresKey] as? [NSPersistentStore] ?? [])