Created
June 18, 2013 05:58
-
-
Save chbeer/5802954 to your computer and use it in GitHub Desktop.
Short example how I setup the synchronisation for iCloud sync with TICoreDataSync
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void) registerSyncManager | |
{ | |
if (self.applicationSyncManager) return; | |
TICDSLogVerbosity logVerbosity = [[NSUserDefaults standardUserDefaults] integerForKey:kIVTICDSLogVerbosity]; | |
[TICDSLog setVerbosity:logVerbosity]; | |
if (![self hasLocalDatabase]) { | |
[self setDownloadStoreAfterRegistering:YES]; | |
} | |
TICDSiCloudBasedApplicationSyncManager *manager = [TICDSiCloudBasedApplicationSyncManager defaultApplicationSyncManager]; | |
manager.shouldUseEncryption = NO; | |
self.applicationSyncManager = manager; | |
NSURL *iCloudLocation = self.cloudStoreURL; | |
NSAssert(iCloudLocation != nil, @"Must be able to determine iCloud location to run this example"); | |
#ifdef DEBUG | |
NSLog(@"Using Sync Path: %@", iCloudLocation); | |
#endif | |
if (!_ubiquityMonitor) { | |
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"(%K = FALSE OR %K = FALSE) AND NOT %K LIKE %@", NSMetadataUbiquitousItemIsDownloadedKey, NSMetadataUbiquitousItemIsUploadedKey, NSMetadataItemPathKey, @"*/ExternalResources/*"]; | |
_ubiquityMonitor = [[TIUbiquityMonitor alloc] initWithPredicate:newPredicate]; | |
_ubiquityMonitor.initiateTransfers = YES; | |
/* | |
[_ubiquityMonitor startMonitoringWithProgressBlock:^(long long bytesToDownload, double percentageDownloading, long long bytesToUpload, double percentageUploading) { | |
if (bytesToUpload > 0 || bytesToDownload > 0) { | |
NSLog(@">>> ubiquity bytesToDownload: %lld bytesToUpload: %lld", bytesToDownload, bytesToUpload); | |
} | |
}]; | |
*/ | |
} | |
[manager setApplicationContainingDirectoryLocation:iCloudLocation]; | |
NSString *clientUuid = [[NSUserDefaults standardUserDefaults] stringForKey:kIVAppSyncClientUUID]; | |
if( !clientUuid ) { | |
clientUuid = [TICDSUtilities uuidString]; | |
[[NSUserDefaults standardUserDefaults] setValue:clientUuid forKey:kIVAppSyncClientUUID]; | |
} | |
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activityDidIncrease:) name:TICDSApplicationSyncManagerDidIncreaseActivityNotification object:manager]; | |
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activityDidDecrease:) name:TICDSApplicationSyncManagerDidDecreaseActivityNotification object:manager]; | |
[manager registerWithDelegate:self | |
globalAppIdentifier:kIVGlobalAppIdentifier | |
uniqueClientIdentifier:clientUuid | |
description:[self deviceDescription] | |
userInfo:[self ticdsUserInfo]]; | |
} |
Yes, exactly that. It's just SyncData in my case ;)
I can't remember exactly, but as far as I remember you need it to load all changed files directly on iOS as on iOS the iCloud data is lazyly loaded, AFAIK. It would be better to integrate that into the DocumentManager, though.
Okay, so you're using the TIUbiquityMonitor to monitor when data changes in iCloud. Are you doing anything else with it in your App Delegate or does something need to be implemented in startMonitoringWithProgressBlock to tell TICDS to sync?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Could you post the code for your cloudStoreURL? Is it just something like:
return [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:@"SyncFolder"];
}
Also, do I need to create my own TIUbiquityMonitor like you are doing? If so, what is it being used for and what predicate should I use?