i​Cloud

LisaTwentieth Anniversary MacintoshiPod Hi-FiMacBook Wheel

以上每一个例子都证明了苹果对于品质的追求所付出的精力和其对于事物方向的预见以及完美执行的无与伦比的付出是相当的。

Wayne Gretzky说过一句话:朝着冰球即将到达的地方滑,而不是跟着它以及花过的路线走。(Skate where the puck’s going, not where it’s been.)

但可能Apple最出名的地方就是它的持久化记录信息来构建 牛逼的 web服务了。从消费者产品级的MobileMe、Ping到开发者工具级别的Provisioning Portal和iTunes Connect,苹果都在便捷性、鲁棒性、扩展性方面确立了新标准。

所以2011年WWDC上Apple介绍iCloud的时候,每一位观众都带着意料之外情理之中的心情全神贯注地聆听。“不是吧!”我们自言自语,摇着头互相露出一副心照不宣的表情。“再次改变了一切!”。

确实iCloud 已经 改变了一切。如果乔布斯在那个六月的早晨登上Moscone的讲台向全世界发布iCloud那就再好不过了——如果有什么可以说的话,那就是Apple早就承诺并且交付iCloud的使用了。

现在,NSHipster通常会将一些你可能从没听过的晦涩主题。但这次,我觉得借着今天这个机会说说iCloud是 对的 ,顺便确定一下大家都进入了含有iCloud新篇章的是世界中。


iCloud是Apple的最新版消费者web服务的代名词。iCloud延续了iTools、.Mac、MobileMe的成功,以从未有过的方式管理我们的数字生活,带来了类似于照片流、iTunes Match、iCloud文档等新特性。

真正把这些联系起来的是允许开发者方便地创建应用并且在设备间互通的iCloud Storage API。这些API根据应用的具体需求可以分为三类:

  • Key-value storage 用于离散数据的存储,例如:偏好、设置、简单的App状态。
  • Document storage 用于用户可见的、以文件为基础的信息存储,例如文字处理的文档、绘画、复杂的App状态。
  • Core Data storage 用于复杂性、服务端依赖、多设备支持的结构化数据库解决方案。iCloud Core Data storage 是基于文档存储的,使用了相同的iCloud API。

Key-Value Storage 在云端!

为了在 iCloud 中存储离散的数据供应用偏好、设置、状态使用,应该用 iCloud key-value storage。键值存储和本地的 user defaults 数据库很相似;但不同的是放在键值存储空间中的值对于用户任意设备上的app实例都是可用的。

每个人都知道键值存储是开启 Web Scale 的钥匙。这就叫科学。

混合 NSUbiquitousKeyValueStore 的各种不同用法来向你的app中注射一批健康的 Web Scale 便利因子吧:


- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [[NSNotificationCenter defaultCenter]
      addObserver:self
         selector:@selector(ubiquitousKeyValueStoreDidChange:)
             name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
           object:[NSUbiquitousKeyValueStore defaultStore]];

  [[NSUbiquitousKeyValueStore defaultStore] synchronize];

  return YES;
}

- (void)ubiquitousKeyValueStoreDidChange:(NSNotification*)notification {
    NSUbiquitousKeyValueStore *ubiquitousKeyValueStore = notification.object;
    [ubiquitousKeyValueStore synchronize];
}

Document Storage 在云端!

增加对 iCloud 文档存储的支持能让你的app中的文档能被用户的所有设备访问到。文档会自动适应对于云同步应用的大部分操作。特别要提一下的是,一个文档会自动确认本地的修改是否能够安全地和云端的修改安全融合。

把文件系统为基础的存储丢给那些在地球上生活的还没有被 iCloud 感化的痛苦灵魂吧。Dropbox?从没听过这玩意。

把文档完全托管在应用专有的云容器里意味着你的数字生活会有更少的混乱。为什么其他应用能够获取文档的权限呢?为什么我要完成一个特别的任务要用到一个单独的应用呢?

他们说:所见即所得,但是 iCloud 是基于一种信任的——你下次打开 Pages、Keynote,或 TextEdit,所有东西都已经出现在里面了。让 Finder 去和文件夹、.DS_Store 文件玩儿蛋去吧;我们在数字化的蓝天下继承了最自由的优势。

Core Data Storage 在云端!

增加对 iCloud Core Data 存储的支持能让你的集成式应用(例如 iPhoto)或数据库式应用(例如 Bento)的内容能够在用户的各种设备间都可用。每一个设备上的每一个app的实例都连接到 iCloud 账户,维护着它自己本地的数据。当本地数据变化时,Core Data 向你app的默认容器写入变化日志。

开发者都喜欢用 Core Data 通过 iCloud 同步数据。严肃地讲,他们根本

当你觉得 Core Data 不能更简单的时候,iCloud 再一次超越了我们的期望。

每次当你的应用收到一个 NSPersistentStoreDidImportUbiquitousContentChangesNotification 通知时,你就像看到一辆 FedEx 的卡车载着你预定的 iPhone 5 来到你门口那样兴奋。“今天是我剩余生命的第一天”,你自己心里想着然后签收了包裹。

是的,你 确实 有机会重新体验一次签收的快乐,快递员会一次性把你要的东西都塞进你的公寓,但是,至少你得有个新 iPhone。

就是这么简单。但即使是更高端的 iLife 也不是没有风险的。


时光慢慢流过,现在 iCloud 管理了你的数字化生命。不久我们就会思考我们是否应该将生活中的全部信息都收集起来:

每天 iPhone 用“Marimba”铃声将你唤醒,Siri 每天和你交谈,然后你利用 iWork 高效工作;在健身房一边跑步一边听 Podcasts.app,用 iTunes Sync 同步计划,直到一天的工作结束,我们放松下来开启 Game Center,Apple 和 iCloud 让每天变得那么特别。

借助 iCloud Storage API,你也可以让自己的应用拥有这么完美的每日数字化同步福利。

不骗你哦。

作者 Mattt
Mattt

Mattt (@mattt) is a writer and developer in Portland, Oregon. He is the founder of NSHipster and Flight School, and the creator of several open source libraries, including AFNetworking and Alamofire.

翻译者
Croath Liu

云游四海的工程师

下一篇文章

再一次,将我们有逻辑的世界编码为冰冷的电脑计算字节码使得我们不得不用这样或那样的方法处理这些问题。同时,通过阅读我们关于Objective-C中布尔值及其同类的讨论,你会发现,真相实在是比小说还离奇。