iOS开发-iCloud环境配置及使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-iCloud环境配置及使用相关的知识,希望对你有一定的参考价值。
参考技术A 配置iCloud,首先你就先要有一个真实的苹果开发者账号,没错,就是一年688的那个。开通了之后,在Xcode中新建一个项目。然后在 TARGETS -> Capabilities -> iCloud 中打开开关就可以了。就像这样,是不是很简单啊。
诶,可是好像有什么地方不对,有些地方爆红了。
这是因为我们还没有给这个App ID 注册,所以接下来我们去苹果的 开发者官网 添加一个App ID,在添加的时候勾选 iCloud 服务就可以啦。
什么?你说你已经创建过App ID了???没关系,在管理App ID这边选择 Edit ,然后在勾选 iCloud 也是一样的。
这时候回到Xcode中在看一下,应该就已经没有爆红了吧。
什么???还有爆红??? 那你重启一下XCode试试吧。再不行,你重启一下电脑试试好了。
在Xcode中 iCloud 下边一共有三个可以勾选的服务,其中第一个就是 key-value storage ,这个也是最简单的 iCloud 使用方法了,他跟 NSUserDefaults 的使用方法基本一样,都是以键值对的方式存储数据。只不过处理iCloud的类为 NSUbiquitousKeyValueStore 。
存储数据的方式很简单,只要使用 setObject:forkey: 之后,使用 synchronize 同步一下就可以了。
获取数据的方式也一样,是要使用 objectForKey 就可以了。
看一下 NSUbiquitousKeyValueStore 的头文件,我们发现他还有一个通知消息
注册这个通知,就可以在数据修改的时候接收到通知,然后做对应的处理。最好的验证方法就是在存储了数据之后直接删除掉这个app,然后再次安装,这个时候就会触发该通知。
先放一下demo的[ 地址 。
以上就是关于配置iCloud和key-value存储的简单使用,后边我们再看看其他两种服务是怎么样使用的。
相较于key-value的存储类型,Documents是用来管理一些比较大的文件,比如用户创建的文档等等。
在我们打开iCloud选项的时候,系统就是自动为我们添加一个 xxx.entitlements 的文件,这个东西用来保证应用的安全性,确保只有你的应用才能访问你自己创建的文档,系统也是依赖于他来区分用户的iCloud账户中每个应用的文档。
查看这个 xxx.entitlements 我们会发现在他里边有这样的一个key Ubiquity Container Identifiers ,对应的value为 iCloud.$(CFBundleIdentifier) 。其实这个 $(CFBundleIdentifier) 就代表这你的APP ID。所以也可以看成是 iCloud.com.zzr.ZZRiCloudDemo 。
NSFileManager 主要是对文件的操作,我们用它来获取iCloud的存储地址。
根据我们的entitlements,通过 NSFileManager 就可以获得iCloud的存储地址,在获取地址之后,我们要先判断一下获取的地址是否为空,如果这个地址为空,则说明用户的iCloud暂时不可用,接下来一切的操作都没办法进行下去。
UIDocument 主要是用于对文件内容的操作。
其实获取了文件的地址之后,我们已经可以直接对文件进行操作了,但是官方还是让我们通过 UIDocument 来操作,因为当我们在对iCloud进行操作的时候,不止是只有我们自己对他进行操作, iCloud daemon 也会对iCloud操作,用 UIDocument 操作能够保证存取安全。
在使用 UIDocument 之前,我们新建一个类,继承于 UIDocument ,并且重写两个方法:
NSMetadataQuery 主要用来查询数据。
有了之前的准备工作,创建一个文档就非常简单了,只要创建好我们要保存的文件,通过
就可以将文档上传到iCloud中了。
我们以一个txt文件作为示范。
修改文档,其实就是重写文档,就是将上边创建文档中的 UIDocumentSaveForCreating 改为 UIDocumentSaveForOverwriting 。
删除文档其实就是通过之前的地址获取到文件,然后调用remove方法即可。
之前讲了增加、删除、修改,好像增删改查中只剩下查询这个方法没有介绍了。查询和前边几个有点不同,他需要用到 NSMetadataQuery 。
直接调用 startQuery 开始查询,iCloud就已经开始帮我们查询了,查询好之后,iCloud会通过通知来告诉我们查询到了东西。
所以我们注册两个通知
并相应他们
其中
就是查询到的内容的数组,遍历他,就可以获取到对应目录下的全部文件了。
先放一下demo的 地址 。
demo简单的制作了一个text文档的存储功能,一些交互没有完善,但是基本的增删改查功能都已经实现了。
以上就是 iCloud Document 的简单使用。此文章仅供个人学习使用,如有不当,希望大佬指出。
iOS开发:浏览本地文件+iCloud配置
工欲善其事必先利其器
话不多说,直接上图了。
-
先去Apple官网配置证书
这里你可以多创建几个开发的正式的,IDENTIFIER不一样就可以了。 -
找到你项目的IDENTIFIER
点进去选择你给这个证书创建的iCloud就可以了。 -
配置Xcode,每个项目的正式和测试都有对应的ICloud,选择对应的就可以了
UIDocumentPickerViewController浏览文件
@property (nonatomic, strong) UIDocumentPickerViewController *documentPicker;
@property (nonatomic, copy) NSArray *types;
-(NSArray *)types {
return @[
@"public.data",
];
}
- (UIDocumentPickerViewController *)documentPicker {
if (_documentPicker == nil) {
_documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:self.types inMode:UIDocumentPickerModeOpen];
_documentPicker.delegate = self;
_documentPicker.modalPresentationStyle = UIModalPresentationFullScreen;
}
return _documentPicker;
}
[self presentViewController:self.documentPicker animated:YES completion:nil];
#pragma mark - UIDocumentPickerDelegate
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
NSError *error;
[fileCoordinator coordinateReadingItemAtURL:urls.firstObject options:0 error:&error byAccessor:^(NSURL *newURL) {
//读取文件
NSString *fileName = [newURL lastPathComponent];
NSError *error = nil;
NSData *fileData = [NSData dataWithContentsOfURL:newURL options:NSDataReadingMappedIfSafe error:&error];
if (fileData != nil) {
}
//写入沙盒Documents
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName];
// [data writeToFile:path atomically:YES];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isExists = [fileManager fileExistsAtPath:filePath];
if (isExists) {
[fileManager removeItemAtPath:filePath error:nil];
}
BOOL isCreate = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
if (isCreate) {
BOOL isWrite = [fileData writeToFile:filePath options:NSDataWritingAtomic error:nil];
if (isWrite) {
//写入成功 写你自己的业务逻辑
}
}
}];
[urls.firstObject stopAccessingSecurityScopedResource];
}
计算文件大小 返回字节数
- (unsigned long long)fileSizeOfPath:(NSString *)path
{
// 总大小
unsigned long long size = 0;
NSFileManager *manager = [NSFileManager defaultManager];
BOOL isDir = NO;
BOOL exist = [manager fileExistsAtPath:path isDirectory:&isDir];
// 判断路径是否存在
if (!exist) return size;
if (isDir) { // 是文件夹
NSDirectoryEnumerator *enumerator = [manager enumeratorAtPath:path];
for (NSString *subPath in enumerator) {
NSString *fullPath = [path stringByAppendingPathComponent:subPath];
size += [manager attributesOfItemAtPath:fullPath error:nil].fileSize;
}
}else{ // 是文件
size += [manager attributesOfItemAtPath:path error:nil].fileSize;
}
return size;
}
以上是关于iOS开发-iCloud环境配置及使用的主要内容,如果未能解决你的问题,请参考以下文章