Skip to content
This repository has been archived by the owner on Dec 17, 2018. It is now read-only.

Commit

Permalink
Improve SetupOperation logic (#3)
Browse files Browse the repository at this point in the history
* Setup operation fixes

* Bump version to 0.1.2

* Comment unused file
  • Loading branch information
Sorix authored Apr 26, 2017
1 parent b3ebeb2 commit 3824e37
Show file tree
Hide file tree
Showing 11 changed files with 202 additions and 165 deletions.
2 changes: 1 addition & 1 deletion CloudCore.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "CloudCore"
s.summary = "Framework that enables syncing between iCloud (CloudKit) and Core Data"
s.version = "0.1.1"
s.version = "0.1.2"
s.homepage = "https://github.com/sorix/CloudCore"
s.license = 'MIT'
s.author = { "Vasily Ulianov" => "[email protected]" }
Expand Down
8 changes: 0 additions & 8 deletions CloudCore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@
E247EF9A1E678EAC00EBD75E /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E247EF981E678EA200EBD75E /* CustomFunctions.swift */; };
E24F44A61E4595B900F78819 /* CoreDataRelationship.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24F44A51E4595B900F78819 /* CoreDataRelationship.swift */; };
E2564BFF1E5061BC002E518B /* ErrorBlockProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2564BFE1E5061BC002E518B /* ErrorBlockProxy.swift */; };
E277DB071E7726FB00DC334A /* PublicDatabaseSubscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E277DB061E7726FB00DC334A /* PublicDatabaseSubscriptions.swift */; };
E277DB081E7726FB00DC334A /* PublicDatabaseSubscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E277DB061E7726FB00DC334A /* PublicDatabaseSubscriptions.swift */; };
E277DB0D1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E277DB0C1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift */; };
E277DB0E1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E277DB0C1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift */; };
E28F0B8E1E671DFA00BF532A /* CoreDataTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = E29BB2411E439E040020F5B6 /* CoreDataTestCase.swift */; };
E28F0B8F1E671DFA00BF532A /* CorrectObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E29BB2431E43AEAF0020F5B6 /* CorrectObject.swift */; };
E28F0B931E671E7400BF532A /* CKRecordTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28F0B911E671E6500BF532A /* CKRecordTests.swift */; };
Expand Down Expand Up @@ -641,7 +637,6 @@
E21FA03E1E4A7E7200B1DAA2 /* RecordToCoreDataOperation.swift in Sources */,
E2E4D8411E76D5A600550CBE /* FetchAndSaveOperation.swift in Sources */,
E2C02A141E4CC2A5001B2871 /* FetchRecordZoneChangesOperation.swift in Sources */,
E277DB071E7726FB00DC334A /* PublicDatabaseSubscriptions.swift in Sources */,
E2C02A101E4CBEBB001B2871 /* FetchDatabaseChangesOperation.swift in Sources */,
E2C02A191E4CDEF1001B2871 /* DeleteFromCoreDataOperation.swift in Sources */,
E29BB21A1E4334590020F5B6 /* CloudCoreConfig.swift in Sources */,
Expand All @@ -659,7 +654,6 @@
E29BB2371E4377F80020F5B6 /* CoreDataAttribute.swift in Sources */,
E2E296CA1E49DA0800E7D6ED /* Tokens.swift in Sources */,
E2075FFF1E4BCD7E00E31F1F /* ObjectToRecordOperation.swift in Sources */,
E277DB0D1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift in Sources */,
E2564BFF1E5061BC002E518B /* ErrorBlockProxy.swift in Sources */,
E2C02A0E1E4C99AD001B2871 /* ObjectToRecordConverter.swift in Sources */,
E2FA74481E769D9400C3489D /* RecordIDWithDatabase.swift in Sources */,
Expand All @@ -679,7 +673,6 @@
E2E4D8401E76D5A500550CBE /* FetchAndSaveOperation.swift in Sources */,
E29D11911E69B31E00E3DCBF /* RecordToCoreDataOperation.swift in Sources */,
E28FBCE41E43DE6F0081FF3B /* CloudCoreConfig.swift in Sources */,
E277DB081E7726FB00DC334A /* PublicDatabaseSubscriptions.swift in Sources */,
E29D11971E69B32900E3DCBF /* ErrorBlockProxy.swift in Sources */,
E29D118E1E69B31E00E3DCBF /* DeleteFromCoreDataOperation.swift in Sources */,
E23C47981E48CE9C004310F9 /* CloudSaveOperationQueue.swift in Sources */,
Expand All @@ -696,7 +689,6 @@
E29D11951E69B32900E3DCBF /* CloudCore.swift in Sources */,
E28FBCE31E43DE6F0081FF3B /* CloudCoreError.swift in Sources */,
E29D119C1E69B33400E3DCBF /* Tokens.swift in Sources */,
E277DB0E1E77F96400DC334A /* FetchPublicSubscriptionsOperation.swift in Sources */,
E28FBCE21E43DE6F0081FF3B /* NSManagedObject.swift in Sources */,
E29D11941E69B32400E3DCBF /* ObjectToRecordOperation.swift in Sources */,
E2FA74491E769D9400C3489D /* RecordIDWithDatabase.swift in Sources */,
Expand Down
20 changes: 10 additions & 10 deletions Example/CloudCoreExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
objects = {

/* Begin PBXBuildFile section */
E23BE70C1EA4FD78008F4F23 /* ReferenceProxy in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BE6FB1EA4CC1C008F4F23 /* CloudCore.framework */; };
E23BE70D1EA4FD78008F4F23 /* ReferenceProxy in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E23BE6FB1EA4CC1C008F4F23 /* CloudCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E23BE70C1EA4FD78008F4F23 /* CloudCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E23BE6FB1EA4CC1C008F4F23 /* CloudCore.framework */; };
E23BE70D1EA4FD78008F4F23 /* CloudCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E23BE6FB1EA4CC1C008F4F23 /* CloudCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E261E0581EAFEA8A00F1CA61 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E261E0571EAFEA8A00F1CA61 /* CloudKit.framework */; };
E26BDD991E75A0AC00994CE7 /* MasterViewController+FRC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E26BDD981E75A0AC00994CE7 /* MasterViewController+FRC.swift */; };
E2C3E3541E53299800A733BF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C3E3531E53299800A733BF /* AppDelegate.swift */; };
E2C3E3571E53299800A733BF /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = E2C3E3551E53299800A733BF /* Model.xcdatamodeld */; };
Expand All @@ -17,7 +18,6 @@
E2C3E35E1E53299800A733BF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E2C3E35C1E53299800A733BF /* Main.storyboard */; };
E2C3E3601E53299800A733BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E2C3E35F1E53299800A733BF /* Assets.xcassets */; };
E2C3E3631E53299800A733BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E2C3E3611E53299800A733BF /* LaunchScreen.storyboard */; };
E2C3E3701E532AA600A733BF /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E2C3E36F1E532AA600A733BF /* CloudKit.framework */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -65,7 +65,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
E23BE70D1EA4FD78008F4F23 /* ReferenceProxy in Embed Frameworks */,
E23BE70D1EA4FD78008F4F23 /* CloudCore.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
Expand All @@ -74,6 +74,7 @@

/* Begin PBXFileReference section */
E23BE6F31EA4CC1C008F4F23 /* CloudCore.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CloudCore.xcodeproj; path = ../CloudCore.xcodeproj; sourceTree = "<group>"; };
E261E0571EAFEA8A00F1CA61 /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = System/Library/Frameworks/CloudKit.framework; sourceTree = SDKROOT; };
E26BDD981E75A0AC00994CE7 /* MasterViewController+FRC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MasterViewController+FRC.swift"; sourceTree = "<group>"; };
E2C3E3501E53299800A733BF /* CloudCoreExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CloudCoreExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
E2C3E3531E53299800A733BF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
Expand All @@ -85,16 +86,15 @@
E2C3E3621E53299800A733BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
E2C3E3641E53299800A733BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E2C3E36A1E532A6E00A733BF /* CloudCoreExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = CloudCoreExample.entitlements; sourceTree = "<group>"; };
E2C3E36F1E532AA600A733BF /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = System/Library/Frameworks/CloudKit.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
E2C3E34D1E53299800A733BF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E2C3E3701E532AA600A733BF /* CloudKit.framework in Frameworks */,
E23BE70C1EA4FD78008F4F23 /* ReferenceProxy in Frameworks */,
E23BE70C1EA4FD78008F4F23 /* CloudCore.framework in Frameworks */,
E261E0581EAFEA8A00F1CA61 /* CloudKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -158,7 +158,7 @@
EC26894FD30A1DA2AD22664A /* Frameworks */ = {
isa = PBXGroup;
children = (
E2C3E36F1E532AA600A733BF /* CloudKit.framework */,
E261E0571EAFEA8A00F1CA61 /* CloudKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
Expand Down Expand Up @@ -427,7 +427,7 @@
INFOPLIST_FILE = Resources/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = uvasily.CloudCoreExample;
PRODUCT_BUNDLE_IDENTIFIER = changeMe.change;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
Expand All @@ -443,7 +443,7 @@
INFOPLIST_FILE = Resources/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = uvasily.CloudCoreExample;
PRODUCT_BUNDLE_IDENTIFIER = changeMe.change;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
Expand Down
2 changes: 1 addition & 1 deletion Example/Sources/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele
// MARK: - CloudCore

func cloudCore(saveToCloudDidFailed error: Error) {
print("\(error)")
print("SaveToCloudDidFailed: \(error)")
}

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
Expand Down
3 changes: 2 additions & 1 deletion Example/Sources/MasterViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ class MasterViewController: UITableViewController {

// Force refresh data from iCloud
@IBAction func refreshButton(_ sender: UIBarButtonItem) {
NSLog(">> (CloudCore.fetchAndSave) Started updating from iCloud")
CloudCore.fetchAndSave(container: persistentContainer, error: { (error) in
print(error)
}) {
NSLog("Fetch from CloudKit completed")
NSLog("<< (CloudCore.fetchAndSave) Fetch from iCloud completed")
}
}

Expand Down
2 changes: 1 addition & 1 deletion Resources/Info-Mac.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.1.1</string>
<string>0.1.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
Expand Down
2 changes: 1 addition & 1 deletion Resources/Info-iOS.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.1.1</string>
<string>0.1.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,38 @@
import CloudKit

/// Fetch CloudCore's subscriptions from Public CKDatabase
class FetchPublicSubscriptionsOperation: AsynchronousOperation {
var errorBlock: ErrorBlock?
var fetchCompletionBlock: (([CKSubscription]) -> Void)?

private let prefix = CloudCore.config.publicSubscriptionIDPrefix

override func main() {
super.main()

CKContainer.default().publicCloudDatabase.fetchAllSubscriptions { (subscriptions, error) in
defer {
self.state = .finished
}

if let error = error {
self.errorBlock?(error)
return
}

guard let subscriptions = subscriptions else {
self.fetchCompletionBlock?([CKSubscription]())
return
}

var cloudCoreSubscriptions = [CKSubscription]()
for subscription in subscriptions {
if !subscription.subscriptionID.hasPrefix(self.prefix) { continue }
cloudCoreSubscriptions.append(subscription)
}

self.fetchCompletionBlock?(cloudCoreSubscriptions)
}
}
}
// TODO: Add Public support in future versions
//class FetchPublicSubscriptionsOperation: AsynchronousOperation {
// var errorBlock: ErrorBlock?
// var fetchCompletionBlock: (([CKSubscription]) -> Void)?
//
// private let prefix = CloudCore.config.publicSubscriptionIDPrefix
//
// override func main() {
// super.main()
//
// CKContainer.default().publicCloudDatabase.fetchAllSubscriptions { (subscriptions, error) in
// defer {
// self.state = .finished
// }
//
// if let error = error {
// self.errorBlock?(error)
// return
// }
//
// guard let subscriptions = subscriptions else {
// self.fetchCompletionBlock?([CKSubscription]())
// return
// }
//
// var cloudCoreSubscriptions = [CKSubscription]()
// for subscription in subscriptions {
// if !subscription.subscriptionID.hasPrefix(self.prefix) { continue }
// cloudCoreSubscriptions.append(subscription)
// }
//
// self.fetchCompletionBlock?(cloudCoreSubscriptions)
// }
// }
//}
Loading

0 comments on commit 3824e37

Please sign in to comment.