最近在做一个和iCloud有关的项目,主要是做一个客户端,访问iCloud上的文件,诸如:音乐,照片,文档等等.

主管项目的是技术出身,边设计产品边coding.作为程序员,我照需求做就是了,但是私底下,我对这个产品深深的吐槽.

产品设计者根本没有理解iCLoud的核心,亏着还是个技术人员.

下面,就谈谈我对iCloud的理解,也欢迎大家一起探讨,并批评指正.

icloud是苹果推出的云服务,它的核心就是可以保存用户的数据(照片,音乐,文档,程序以及设置等等)并在用户的所有设备上(iphone,itouch,mac以及pc)保持同步更新.

每位用户都可以免费使用5G存储空间.正是利用这空间,用户可以备份程序,邮件,日历.这样当我在一个新的机器上设置好iCloud账号后,就可以把之前备份的数据同步下来.此外,当你下载了某个程序,icloud会自动同步到你的其他苹果设备上去.这个功能非常讨人喜欢.说了这么多,icloud似乎就是类似网盘一样的东西,只不过多了一个备份和推送更新. 其实不然.这5G的空间虽然是免费提供给用户,但用户并不能"直接"使用.我所谓直接呢,就是指像dropbox一样,有一个客户端,用户可以存任何文件.而icloud不行,你可以存文件,但是必须通过某个程序.相应的,有icloud功能的程序也只能访问自己程序上传的文件,这称之为shoebox.这秉承了Apple一贯的作风,因为iOS本身是一个封闭的系统,程序只能在沙盒中运行,那么icloud折腾出个shoebox也不足为奇了,其中的逻辑是很显而易见的.

所以iCloud核心是保持设备的同步而不是可以存储.运用iCloud,我首先能想到的就是利用它来保存游戏的记录, 从而使得游戏在不同设备上保持相同进度.比如我在ipad上玩了火线追击,在ipad2上就得重新再玩.如果有了icloud,只需同步我的游戏记录,不管我在哪个机子上都可以继续玩.

对于其他书籍新闻杂志类的app,icloud似乎并不是一个福音.在谈这个问题之前,我们需要探讨一下icloud上的文件读取.根据开发文档,每台机器上会有一个文件镜像来帮助实现更新.文件镜像的作用在于你打开某个icloud文件时,其实是先下载到镜像成为一个"本地"文件,读写都在本地,保存时才上传到icoud实现同步更新.那么我有几个文件,依次读取后,本地镜像中应该存在了.那么我继续读,镜像中的文件是不是会越来越多,从而占据很大的本地存储空间呢?当然不会,苹果有其存储策略.它的icloud guidline中提到:

<程序>/documents下的文件会自动备份,所以其中只能存必要的文件.那些可以重复生成或者可以下载的应该放到library或是cache里.另外,当存储空间不够时,ios会自动删除cache和library里的文件,来节约空间.所以我们可以猜想,云端的文件下载到镜像后,并不会一直被保存,有可能会被删除.这个在开发的时候深有体会:使用NSFileManager,可以探测到某个icloud文件存在,但是却无法读取其数据.原因就在于还没有下载到本地镜像.所以我们不要无限制的存很多数据并同步到icloud上去,只能存储必不可少的文件.而像当下的一些新闻杂志类app为了追求特效,往往一期杂志一份报纸的数据都很大,这是不符合icloud产品的设计思路的.举个其他例子佐证:如果开启了photo stream,iphone和itouch上的photo只会存储最新的1000张照片,而mac或pc上就可以存储所有的照片.这也是基于存储空间的考虑.所以新闻类app,如果一期的数据有几十M,用户订阅了十几期,全同步到云端可是不小的压力,所以要审慎存储数据.

 

最后,回到开头所提到的项目,我的感觉就是自己找罪受,就是多此一举的事情.设计者的出发点就是认为这5G空间用户可以自己掌控从而异想天开的要开发一个所谓的客户端(其实仔细想想,如果这个客户端真的有必要的话,苹果为什么自己不做呢?),没有深刻体会iCloud的涵义以及他会给程序带来的变革.