完成此Demo前,应该对iCloud有个基本概念。(查看 iCloud简介)


一、准备工作(xcode 4.X  iOS 5.0 sdk)

1.需要创建一个新的app id,要是有了一个的话,保证着个app id 不是一个通配符(即app id 不能是“com.yourcompany.*”形式)。

2.创建完成之后,开启设备的iCloud,然后在创建一个新的Provisional Profile,若已有则不需要创建。

(即,生成的证书,需要支持iCloud,类似推送通知的证书一样。若最后你项目完成,真机运行调试时出现:The executable was signed with invalid entitlements. 则去检查一下证书是否生成正确,及*.entitlements文件里面的字段是否填写正确。)

3.选择工程的summary,滚动到entitlement点击entitlements,xcode会自动的创建一个*.entitlements文件,如下图所示:

4.点击创建的*.entitlements,分别把pist列表里的三个字段都添上内容,格式为 “Team_ID.Bundle Identifie”,不要把team_id 跟 app_id弄混了啊,team_id是你创建完Provisional的时候,在最前面显示的那10个字符。

Xcode ——> Organizer ——> 相应证书的App Identifier 查看

二、代码编写

1、首先验证iCloud是否开启激活

// 得到文件管理器NSFileManager *manager = [NSFileManager defaultManager];// 验证iCloud是否激活NSURL *url = [manager URLForUbiquityContainerIdentifier:nil];if (url == nil) {NSLog(@"iCloud未激活");return;}

2、关于上传文件

// 另起一个线程上传[NSThread detachNewThreadSelector:@selector(uploadICloud) toTarget:self withObject:nil];

而在uploadICloud方法中,首先判断本地将要上传到iCloud的文件是否存在,若不存在则创建:

// 判断本地文件是否存在if (![manager fileExistsAtPath:self.filePath]) {// 不存在则创建if (![data writeToFile:self.filePath atomically:YES]) {[self performSelectorOnMainThread:@selector(setLabelText:)withObject:@"写本地文件失败"waitUntilDone:NO];}}

然后判断在iCloud中该文件是否存在,若存在则进行修改操作(仅上传元数据和修改部分),若不存在则上传文本所有内容:

// 判断iCloud里该文件是否存在if ([manager isUbiquitousItemAtURL:self.iCloudURL]) {// 存在则修改if (![data writeToURL:self.iCloudURL atomically:YES]) {[self performSelectorOnMainThread:@selector(setLabelText:)withObject:@"写iCloud文件失败"waitUntilDone:NO];}[self performSelectorOnMainThread:@selector(setLabelText:)withObject:@"上传成功"waitUntilDone:NO];return;}// (若将下面写在else中,则可能导致2台机子各有备份,即一个设备的iCloud存储管理里面存在一个app的2个备份)// 上传至iCloud// 指定本地文件完整路径NSURL *url = [NSURL fileURLWithPath:self.filePath];NSError *error;// 官方文档建议本方法不要在主进程里执行if (![manager setUbiquitous:YES itemAtURL:url destinationURL:self.iCloudURL error:&error]) {NSLog(@"setUbiquitous error %@,\n%@", error, [error userInfo]);self.myLabel.text = @"上传失败";return;}self.myLabel.text = @"上传成功";

3、关于下载:利用官方文档提供的方法,用来检查文件状态并下载

- (BOOL)downloadFileIfNotAvailable:(NSURL*)file {NSNumber*  isIniCloud = nil;if ([file getResourceValue:&isIniCloud forKey:NSURLIsUbiquitousItemKey error:nil]) {// If the item is in iCloud, see if it is downloaded.if ([isIniCloud boolValue]) {NSNumber*  isDownloaded = nil;if ([file getResourceValue:&isDownloaded forKey:NSURLUbiquitousItemIsDownloadedKey error:nil]) {if ([isDownloaded boolValue]){return YES;}// Download the file.NSFileManager*  fm = [NSFileManager defaultManager];if (![fm startDownloadingUbiquitousItemAtURL:file error:nil]) {return NO;}return YES;}}}// Return YES as long as an explicit download was not started.return YES;
}

三、运行结果

1、初始界面:(最上的label显示了iCloud URL)

2、上传成功后,你会在 设置-- iCloud -- 储存与备份 -- 管理储存空间 看到项目刚刚上传的备份,如左图所示,然后下载成功的界面如右图:

  

3、在设备1(白色iPhone4)中更改textview内容,并上传成功(如左下图);然后用设备2(黑色iPod)下载成功(如右下图)。

四、源码下载

真机调试运行,需要进行证书更换,及*.entitlements文件里的相应字段进行更改,详见 一、准备工作。

iCloud上传备份和下载的Demo相关推荐

  1. 腾讯对象存储服务COS加密签名上传文件与下载文件的剖析,福利提供给所有使用Android的小伙伴们!

    在做一些用户需求的时候,公司往往需要工程师采集到更多有用的关于用户的个人信息,然后对用户群进行分析,今天我不是来分析这些的,今天我主要是说 腾讯推出的款云产品,那就是对象存储服务COS,这个产品面向所 ...

  2. 轻松搞定阿里OSS文件上传和图片下载

    轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备   1.1 注册阿里云账号,并开通OSS存储服务   1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...

  3. 百度云盘上传文件和下载文件慢的解决办法

    百度云盘上传文件和下载文件慢的解决办法 一:上传文件慢 1. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...

  4. servlet文件上传下载_Servlet上传文件和下载文件示例

    servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...

  5. Servlet上传文件和下载文件示例

    Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例. 用例 我们的用例是提供一 ...

  6. ie8 ajaxSubmit 上传文件提示下载

    转载 解决ie下ajaxsubmit上传文件提示下载文件问题 主要是应为放回类型为json,返回text/html 转载于:https://www.cnblogs.com/yang-C-J/p/896 ...

  7. SpringBoot整合oss实现文件的上传,查看,删除,下载

    springboot整合oss实现文件的上传,查看,删除,下载 1.什么是对象存储 OSS? 答:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量. ...

  8. 断点下载 (记录上传、或下载的量

    #pragma mark - test 断点下载 (记录上传.或下载的量) - (void) test { NSURL *urlStr = [NSURL URLWithString:@"ht ...

  9. centos 下载文件很慢_百度云盘上传文件和下载文件慢的解决办法

    百度云盘上传文件和下载文件慢的解决办法 一:上传文件慢 1. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...

最新文章

  1. leetcode前缀树java_LeetCode 实现 Trie (前缀树)
  2. MySQL Query Log
  3. OpenCV3.1.0+VS2015开发环境配置
  4. android ontoch事件无反应_一切从android的handler说起(三)
  5. 有多少恐怖小说家就应该有多少种吓唬人的方法
  6. 判断字符串出现次数最多的字符 及 次数
  7. 网络知识 | 《图解HTTP》读书笔记(上)
  8. oracle arp绑定mac地址,使用ARP命令来绑定IP和MAC地址
  9. ssh-copy-id命令的介绍,使免密更方便
  10. 2022年计算机软件水平考试嵌入式系统设计师(中级)练习题及答案
  11. 电脑文件分区壁纸--超级马里奥、樱桃小丸子主题
  12. 思维导图与知识树的区别
  13. linux重装系统驱动,linux系统下安装驱动方法
  14. Windows11 无法打开应用商店
  15. 2021年中国百香果果汁进出口贸易分析:贸易逆差明显,越南是主要进口国[图]
  16. 关于浏览器打开时自动打开部分网页(浏览器被劫持)的解决办法
  17. GEE-Python遥感大数据分析、管理与可视化技术应用
  18. 【SVM之菜鸟实现】—5步SVM
  19. linux中的sleep函数和delay函数
  20. trs 同步模版 栏目修改(高级)

热门文章

  1. sd卡打不开,里面的文件可以恢复吗?
  2. 转:80%的人没有真正参与组织工作,你还在专制管理吗?
  3. 企业运维实战--k8s学习笔记 k8s网络通信、Flannel vxlan模式简介、calico网络插件替换、网络策略范例总结
  4. 2020.10.19-10.26 人工智能行业每周技术精华文章汇总
  5. posenet怎么玩?真人录制火柴人,骚气起来! | Mixlab 技术前沿
  6. c语言输出王字图形,C语言编程宝典(王大刚) 3 关键字和标识符
  7. 《PCL点云库学习VS2010(X64)》Part 37 FLANN——快速最近邻搜索库
  8. 姑娘,你为什么要学编程?是抖音不好玩还是王者太坑?
  9. MAC系统JDK环境变量配置(包含找安装路径和解决执行source .bash_profile报错)
  10. 新手站长如何快速查看心仪的网站使用的什么模板和插件?