图书前言

前  言

当苹果公司发布新产品或其操作系统的新版本时,通常会是重大的新闻事件,经常有人在苹果手机商店排队等待。这些发布通常存在一些规律。对于操作系统,主要的发布是在6月的苹果全球开发者大会上进行的。在某些年份,一种或全部两种操作系统的开发者预览版本在早春可用。整个夏季,若干开发者发布版本会被提供。在秋天的某个时候,关于新iPhone变得可用的谣言开始流传,而且苹果公司会发出将在一周后举行媒体活动的邀请。在接下来的新闻事件中,新版本的iOS随着新的iPhone公映。iOS的公开发布在一周后进行,随后新的iPhone也会可用。接下来(通常在下一个月),iPad、Mac 和OS X会重复这个过程。

在过去的几年时间,这些过程一直是被计划好的,但并不保证会一直重复。值得注意的重要一点是,这些产品和操作系统的通告及发布都有具体的日期。iCloud则与之大不相同。多年来,苹果公司已经建立了重要的硬件和电信支撑结构,用于驱动iCloud和其他网络操作。同许多类似基础设施的情况一样,其细节是保密的。我们之所以知道苹果公司一些数据中心的位置,是因为它们经常需要构建许可和其他公共文档及权限,但它们通常避开公众的视线。iCoud的发布并没有剪彩或交钥匙的环节,而是一个耗时若干年的过程(并且未来还将持续若干年)。

除了硬件基础设施,iCloud还有软件组件。然而,这也经历了若干年的发展历程。正如你将在本书中看到的,iCloud有一部分在操作系统用户界面中实现,其余部分通过对现有框架和API进行相对较小的修改来实现。对于开发商和消费者来说,iCloud的公开发布是操作系统及硬件的新版本发布的一部分。

总之,iCloud不是一个产品,而是一项无处不在的技术,也是苹果的公司战略。不像苹果的硬件和软件产品,iCloud没有部件编号且没有版本号。这是跨公司各个产品的一部分。

出于这个原因,编写关于iCloud的技术资料,或学习针对它而进行的开发,都是不容易的。本书最初在2012年构想,但随着逐步成型,一件事变得清晰,就是iCloud的一些最强大的部件尚未就位。与其赶出一本不完整的书,并且依靠未来某个时候发布修订版,不如等待时日。Trina MacDonald和Addison-Wesley同意推迟出版日期,从而使之包含来自于2013年6月的WWDC的信息,我非常感激他们这样做。

你将看到,本书在我所称的iCloud Round Trip中达到了顶峰。在最后一章,你将看到如何建立iOS应用和OS X应用,让你可以通过iCloud在OS X和iOS之间共享数据。具有能够实现Round Trip的工具,对我来说是出版本书的一次很好的时机。这是在iCloud世界中你能够最大限度地接近新产品发布事件的绝佳时机。

本书读者对象

本书是为那些想探索iCloud的开发人员编写的。因为iCloud在操作系统的很多区域中实现,所以你需要熟悉Cocoa和Cocoa Touch的许多部分。随着本书对iCloud的介绍,作者已尝试至少概述它所涉及的各种组件。这意味着对于诸如通知的话题讨论,作者站在相当高的水平上:有些人会认为“每个人都知道那些知识”,而其他人可能认为需要介绍更多的细节。

作者一直在尝试为与iCloud进行交互的各种Cocoa技术专家和新手提供一条中间道路。苹果公司在developer.apple.com网络上的文档中针对更多的细节提供了主要的资源,如果觉得需要它们的话,可以参考一下。如果在触及某个领域时觉得自己已经了解这个话题,可跳到iCloud的细节。即使对于苹果公司的工程师而言,Cocoa的许多知识领域是他们从里到外都知道的(也可能写过),但还有其他一些领域是他们所不熟悉的。

依据技能和知识,你应该具有关于Cocoa和/或Cocoa Touch以及Xcode的基本知识。为了理解代码,掌握Objective-C是必需的。作者所著的Sams Teach Yourself Objective-C in 24 Hours一书提供了有关该话题的介绍。

此外,你应该具有iCloud的使用经验。尝试针对一项并未使用过的技术进行开发的人,数量之多总是令人惊讶。没有什么能够取代实际的用户体验。

下载示例文件

每章的示例文件都可以从网站http://northcountryconsulting.com或http://informit.com/title/ 9780321889119下载。除了示例,你还可以在这两个网站上找到任何更新和修订。下载的有些示例包含额外的代码,比如在第14章“在iCloud中使用文件封装器”中,除了iPhone界面,还提供了iPad界面。

这些文件是按章来组织的,并且它们以代码展示作为各章的结束。因此,在下一章建立在前一章代码基础之上的情况下,需要下载前一章并且仔细学习本章,在此过程中再添加新章的代码。

iCloud需要代码签名,所以你会在本书中看到如何设置项目以实现这一点。值得注意的是,在本书及可下载的代码中所包含的代码签名,无法在你的计算机上工作。你必须使用自己的开发者凭据,而不是让代码签名信息保持空白,我使用了自己的凭据(不提供密码,甚至开发商账户名称也已更改)。这意味着,除非定制自己的开发者账户,否则代码将不能运行。这是有意的,也是必要的。

代码主要是针对Xcode 5和OS X Mavericks (10.9)编写的。

本书的组织结构

本书分为如下4部分:

第Ⅰ部分:iCloud简介

第Ⅰ部分提供了关于iCloud的用户视角和开发者视角。

第1章,“探讨iCloud及其用户体验”:随着iCloud的演变,它已被纳入一些应用,如iWork套件。你会看到iCloud对于应用和操作系统的用户界面是什么样子。

第2章,“搭建iCloud开发环境”:本章提供了iCloud的API结构概述。这是本书其余部分的路线图。

第Ⅱ部分:使用API

这一部分探讨了如何使用用户输入和维护的iCloud数据。对于许多用户来说,iCloud在他们的音乐存储,以及日历和联系人的同步中,发挥了一定的作用。有一些API允许开发者利用这些同步的用户数据,而本书的这一部分对它们进行了说明。使用iCloud能够让开发者得到很大的回报:苹果公司的工程师和用户已经完成了所有的工作,你所要做的,就是帮助用户以新的富有创造性的方式来使用他们自己的数据。

第3章,“介绍API和第一个应用”:iCloud最简单的部分由管理用户数据的API组成。本章提供了本书中这一部分的路线图。

第4章,“使用Contacts的AddressBook API”:AddressBook API允许开发者访问和更新地址簿数据。本章将介绍实现这一点所需的基础知识。

第5章,“使用Event Kit API管理日历和提醒”:本章将介绍如何运用日历和提醒。

第6章,“保护用户数据隐私”:iCloud带来了很多隐私问题,你需要在自己的应用中加以解决。这是用户的数据,你必须按照本章描述的规则来处理。

第Ⅲ部分:运用技术

iCloud集成了各种数据管理技术和设计模式。使用这些技术可能意味着你的应用可以充分利用iCloud同步功能。这些技术与iCloud相集成,但它们在iCloud出现之前已经存在了很长时间。集成才是新内容。

第7章,“介绍block、线程和通知”:本章提供了iCloud背景下的技术路线图。即使知道这些技术,在iCloud的世界里回顾它们,也是很重要的。

第8章,“使用键-值编码”:键-值编码在Cocoa中已被运用多年。这是存储相对少量数据的一种非常有效的方式。使用iCloud可以使得它对于你和你的用户都很简单。

第9章,“在iCloud中使用Preferences、Settings和Keychains”:Preferences(OS X)和Settings(iOS)是键-值编码的一种特殊情况。本章介绍了如何能够将它们添加到应用中,使之适用于用户的所有设备。你还可以看到如何排除来自iCloud中的特定偏好与设置,如果它们不适合某个特定设备的话。

第10章,“使用Core Data管理持久存储”:Core Data是Cocoa和Cocoa Touch中主要的数据持久化工具。本章提供了高层概述。在第17章“使用Core Data和iCloud”中将进一步探讨。

第11章,“使用Xcode项目工作区进行协同开发”:在Xcode 4中引入的Xcode工作区,使得开发者很容易在项目中设置多个目标,并且在目标之间共享特定的文件。例如,这将使你能够在OS X / iOS Round Trip中共享Core Data数据模型(模式)及其特定的托管对象类。

第12章,“使用包和资源向应用添加数据”:这是在应用中管理数据的最普遍方式。不直接使用iCloud,但可能是iCloud应用十分合适的添加物,与iCloud同步数据互补。

第Ⅳ部分:使用iCloud文档和数据

本书的最后一部分汇集了文档和文件封装器中的API及技术。你会看到如何在OS X以及iOS中实现它们。此外,你将看到如何完成一次Round Trip,将文件在iOS和OS X之间同步。

第13章,“添加iCloud基础设施”:本章介绍iCloud所要使用的基础设施——用于与iCloud建立联系、管理iCloud可用性变化及修改iCloud账户的代码。请注意,这些代码在随后的每章中都需要实现。在本书此部分的后续章节中,为了关注具体问题,有些代码并没有重复。

第14章,“在iCloud中使用文件封装器”:文件封装器实现类似于Finder中的包的结构,对用户而言看似单独文件的文件集合。它们是一种能够有效利用iCloud同步功能的结构。

第15章,“使用iOS文档”:本章探讨了基于UIDocument的iOS文档模型。你会看到如何实时监视iCloud文档的变化。

第16章,“使用OS X文档”:在OS X中,Cocoa为你管理iCloud文件的改变,所以你要做的工作比第15章中更少。然而,仍然有许多工作要做,本章将介绍如何使用NSDocument来完成必要的事情。

第17章,“使用Core Data和iCloud”:本章为你提供了使用iCloud管理基于Core Data的应用的代码。本章建立在第10章的基础之上。

第18章,“完成Round Trip”:最后,将介绍如何组建Round Trip。记得将第13章的代码添加到你的两个目标(OS X和iOS)中。