我将受密码保护的zip文件作为备份上传到iCloud,然后将其上传,然后下载,解压缩并使用相同的文件,只有当我们在同一设备上进行所有这些出色的工作时,它才能正常工作。

考虑这种情况,1.从一个设备压缩并上传文件。 2.从其他设备下载并解压缩(无法解压缩,因为它无法识别该文件为zip格式)

注意:我已通过启用iTunes文件共享来交叉验证文件是否已成功下载到其他设备中。

但是我无法解压缩文件。

#1楼 票数:1 已采纳

我自己找到了解决方案,希望这可以节省其他人的时间,将受密码保护的zip文件转换为数据并进行上传,下载和解压缩

可以将任何文件上传到任何大小的iCloud容器(是的,您应该在iCloud中拥有足够的空间),以SampleData.zip为例

// 1 This method will upload or sync SampleData.zip file in iCloud container, iCloud actually checks the metadata of your file before it uploads it into your iCloud container (so for first time it will upload the file and from next time it will only upload the changes)

-(void) iCloudSyncing:(id)sender
{
    //Doc dir
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"SampleData.zip"];
    NSURL *u = [[NSURL alloc] initFileURLWithPath:filePath];
    NSData *data = [[NSData alloc] initWithContentsOfURL:u];

    //Get iCloud container URL
    NSURL *ubiq = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil];// in place of nil you can add your container name
    //Create Document dir in iCloud container and upload/sync SampleData.zip
    NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"]URLByAppendingPathComponent:@"SampleData.zip"];
    Mydoc = [[MyDocument alloc] initWithFileURL:ubiquitousPackage];
    Mydoc.zipDataContent = data;

    [Mydoc saveToURL:[Mydoc fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success)
     {
         if (success)
         {
             NSLog(@"SampleData.zip: Synced with icloud");
         }
         else
             NSLog(@"SampleData.zip: Syncing FAILED with icloud");

     }];
}



  // 2 Download data from the iCloud Container

- (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");

        NSError *error = nil;
        NSURL *ubiq = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil];// in place of nil you can add your container name
        NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"]URLByAppendingPathComponent:@"SampleData.zip"];
        BOOL isFileDounloaded = [[NSFileManager defaultManager]startDownloadingUbiquitousItemAtURL:ubiquitousPackage error:&error];
        if (isFileDounloaded) {
            NSLog(@"%d",isFileDounloaded);
            NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
            //changing the file name as SampleData.zip is already present in doc directory which we have used for upload
            NSString* fileName = [NSString stringWithFormat:@"RecSampleData.zip"];
            NSString* fileAtPath = [documentsDirectory stringByAppendingPathComponent:fileName];
            NSData *dataFile = [NSData dataWithContentsOfURL:ubiquitousPackage];
            BOOL fileStatus = [dataFile writeToFile:fileAtPath atomically:NO];
            if (fileStatus) {
                NSLog(@"success");
            }
        }
        else{
            NSLog(@"%d",isFileDounloaded);
        }
    }
}

//3 voila its done :)

  ask by Rein rPavi translate from so

未解决问题?本站智能推荐:

1回复

应用程序名称未显示在设置> iCloud> iCloud驱动器上

当我在模拟器上导航至“设置”>“ iCloud”>“ iCloud Drive”时,出现我的应用程序图标,但未显示该应用程序的文本/标题。 如何设置?
1回复

如何判断iCloud文件是否已下载?

我有以下代码。 我的目标是在文件下载到设备后解码数据。 我使用 fileExists 来检查文件是否存在于 iCloud 上。 然后 startDownloadingUbiquitousItem 下载它。 但是我不知道如何判断它是否已下载。 请问有没有办法告诉它下载了? 像完成处理程序或通知?
1回复

从iCloud发送的通知中区分记录类型

我在区分具有创建,更新或删除哪种记录类型时遇到问题。 我有两个CKSubscription用于不同类型的记录; 狗和猫。 从[String : AnyObject] ,没有任何方法可以区分是狗还是猫发生了什么事。 这样的事情作为远程通知发送到应用程序。 有没有人能够这
1回复

使用CloudKit从iCloud获取公共记录

我有以下代码将我的资产上传到iCloud 它绝对有效,因为我能够进入CloudKit仪表板,并实际查看记录并下载其附件。 这是从该函数输出的saveRecord的示例: 我认为,由于这是公共记录,因此我可以在共享相同自定义iCloud容器字符串的另一个应用程序中下载此文件。
1回复

是否可以从CloudKit检索iCloud用户的图标?

我需要在iCloud中设置的小照片。 有办法吗?
1回复

当存储空间已满时,将应用程序数据保存到用户的iCloud(CloudKit)吗?

这更多是一个理论/方法问题。 因此,我有一个需要将数据保存/备份到iCloud的应用程序。 因此,如果用户意外卸载了该应用程序,他们仍然可以从其iCloud存储中检索该应用程序。 问题是: 使用Cloudkit将应用程序数据保存/备份到iCloud的一般方法是什么? 数据应该自
1回复

CloudKit中私有存储的数据是否存储在用户的iCloud帐户中?

我的应用程序涉及用户创建数据并将其保存到其私有数据库。 数据会占用iCloud帐户的空间,还是会成为我的CloudKit存储配额的一部分? 谢谢!
2回复

来自iCloud / CloudKit的序列号

我想使用CloudKit,Swift 4.2+和iOS 11+从iCloud获取序列发票号。 我从未使用iCloud做到这一点。 不知道最好的方法是什么。 该数字将被写入PDF文档,然后将其保存回公共iCloud数据库。 谓词是有限的。 我认为我不能使用max(number