Search code examples
iosobjective-ciphoneicloud

How can I backup and restore .zip file on iCloud Drive?


I want to store .zip files on iCloud. Anybody help me how to upload and restore? I have read the Apple guideline for iCloud backup and now I have created one folder with some files and two folders with multiple images and then generate zip file of that folder.


Solution

    1. First Save your File and Folder on Local Storage.
    2. Then Create this File & Folder's Zip File.
    3. And Last Upload Your zip file on iCloud.
    4. For get this file doing reverse process.
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self CreatFileAndFolder];
    
    }
    

    Create Folder on local and save file in this folder that you want upload on iCloud Drive.

    -(void)CreatFileAndFolder{
    
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
        NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/meetInChat"];
    
        if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
            [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
    
    
        NSString *stringToWrite = @"1\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n4";
    
    
        NSString *exportPath = [dataPath stringByAppendingString:@"/mytext.txt"];
        [stringToWrite writeToFile:exportPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
    
    }
    

    Create Action that First Create Zip file your Folder and then Upload your Zip file on iCloud Drive.

    -(IBAction) iCloudSyncing:(id)sender
    {
        [self zipFolder];
    
        //--------------------------Zip Folder Upload on iCloud-----------------------------//
    
        NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *zipFilePath = [documentsDirectory stringByAppendingPathComponent:@"meetInChat.zip"];
        NSLog(@"FilePath=>%@",zipFilePath);
        NSURL *u = [[NSURL alloc] initFileURLWithPath:zipFilePath];
        NSData *data = [[NSData alloc] initWithContentsOfURL:u];
    
        NSURL *ubiq = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil];
        NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"]URLByAppendingPathComponent:@"meetInChat.zip"];
        Mydoc = [[MyDocument alloc] initWithFileURL:ubiquitousPackage];
        Mydoc.zipDataContent = data;
    
        [Mydoc saveToURL:[Mydoc fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success)
         {
             if (success)
             {
                 NSLog(@"PictureZip: Synced with icloud");
    
                 [[NSUbiquitousKeyValueStore defaultStore]setData:data forKey:@"meetInChat"];
             }
             else
                 NSLog(@"PictureZip: Syncing FAILED with icloud");
    
         }];
    }
    

    Create Zip file from your folder

    -(BOOL)zipFolder
    {
    
    //--------------------------Create Zip Folder -----------------------------//
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *docDirectory = [paths objectAtIndex:0];
        BOOL isDir=NO;
        NSArray *subpaths = nil;
        NSString *exportPath = [docDirectory stringByAppendingString:@"/meetInChat"];
    
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if ([fileManager fileExistsAtPath:exportPath isDirectory:&isDir] && isDir){
            subpaths = [fileManager subpathsAtPath:exportPath];
        }
    
        NSString *meetInChatPath = [docDirectory stringByAppendingString:[NSString stringWithFormat:@"/%@.zip",@"meetInChat"]];
    
        ZipArchive *archiver = [[ZipArchive alloc] init];
        [archiver CreateZipFile2:meetInChatPath];
    
    
        if (isDir) {
            for(NSString *path in subpaths){
                NSString *fullPath = [exportPath stringByAppendingPathComponent:path];
                if([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir){
                    [archiver addFileToZip:fullPath newname:path];
                }
            }
        } else {
            [archiver addFileToZip:exportPath newname:@"meetInChat"];
        }
    
        BOOL successCompressing = [archiver CloseZipFile2];
        if(successCompressing)
            return YES;
        else
            return NO;
    }
    

    Here Get ZipFile back From iCloud Drive then Doing reverse process Unzip your file and get data back.

    - (IBAction)GetData:(id)sender {
    
        //--------------------------Get data back from iCloud -----------------------------//
        id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
        if (token == nil)
        {
            NSLog(@"ICloud Is not LogIn");
        }
        else
        {
            NSLog(@"ICloud Is LogIn");
    
            NSData *dataFile = [[NSUbiquitousKeyValueStore defaultStore]dataForKey:@"meetInChat"];
    
            NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
            NSString* fileName = [NSString stringWithFormat:@"meetInChat.zip"];
            NSString* fileAtPath = [documentsDirectory stringByAppendingPathComponent:fileName];
    
            [dataFile writeToFile:fileAtPath atomically:NO];
    
        }      
    }