iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode...

38
iOS 开发完全上手 ——使用 iOS 7 Xcode 5 开发移动与平板应用 Maurice Sharp [] Erica Sadun Rod Strougo 欧阳柳 Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming 移动开发经典丛书

Transcript of iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode...

Page 1: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS开发完全上手——使用iOS 7和Xcode 5开发移动与平板应用

Maurice Sharp  [美] Erica Sadun    著 Rod Strougo 张 杰 欧阳柳  译

Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming

移动开发经典丛书

  对于iOS 7开发新手来说,本书是完美起步。通过学习本书,可为iOS开发奠定坚实基础,书中涵盖对

Objective-C语言的介绍、Xcode开发工具、用户界面开发的最佳实践,以及针对应用开发和部署等各个方

面的最佳实践。

  在整本书中,你将随着创建和扩展一个简易的代客泊车应用程序来探索iOS开发过程。这个动手实践

项目帮助你尽快创建有意义的代码,建立自信并掌握知识。带注释的代码清单使用的都是最新的iOS技

术,使你为进入激动人心的开发领域做好充分准备。

  Maurice Sharp是一位开发老手,拥有21年在大公司(苹果公司和Palm公司)和小公司培训、开展和管理

移动开发的经验。日常工作之外,他为新成立的移动项目做咨询,并运营自己的咨询公司KLM Apps。

  Erica Sadun是一位畅销书作者,曾编著、合著、参与贡献出版了几十本有关移动开发和相关主题的书

籍,包括广受欢迎的The Core iOS 6 Developer's Cookbook、iOS Auto Layout Demystifi ed、iOS Drawing:

Pratical UIKit Solutions以及Talking to Siri。她还在(The Unoffi cial Apple Weblog)TUAW.com上写博客。

  Rod Strougo是一位作家、讲师和开发人员,他花了15年时间为IBM和AT&T编写企业软件。目前,

Rod追随自己对游戏开发和教学的热情,在bignerdranch公司(www.bignerdranch.com)担任iOS培训师。

定价:59.80元

涵盖内容◆ 安装创建iOS应用程序所需的所有工具、程序和

设备

◆ 构建第一个应用程序并精通Objective-C的基本

要素

◆ 最高效地使用设备内存

◆ 使用故事板创建界面并关联到你的基本代码

◆ 使用自动布局让设备支持不同屏幕大小和方向

◆ 使用Core Data管理应用程序数据

◆ 创建复杂的自定义手势

◆ 通过App Store部署应用程序

◆ 针对多国语言和国家,快速本地化应用程序

◆ 实现滚动、导航、表视图和iOS的其他核心特性

◆ 掌握表视图和导航,以及iPad拆分视图的高级

内容

◆ 传递封装在Block中的代码,实现应用程序各部

分间以及与系统间的通信

◆ 调优和调试应用程序,达到最佳性能和质量

◆ 挖掘优秀资源,以便进行深入学习

www.pearson.com

iOS

开发完全上手

——

使用iO

S 7

和Xcode 5

开发移动与平板应用

Page 2: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

移动开发经典丛书

iOS 开发完全上手—— 使用 iOS 7 和 Xcode 5 开发移动

与平板应用

[美] Maurice SharpErica Sadun Rod Strougo

张 杰 欧阳柳 译

北 京

Page 3: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

Authorized translation from the English language edition,entitled Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming,978-0-321-86296-9 by Maurice Sharp, Erica Sadun, and Rod Strougo, published by Pearson Education, Inc, publishing as Addison-Wesley, Copyright © 2014.

All rights reserved.No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD., and TSINGHUA UNIVERSITY PRESS Copyright © 2014.

北京市版权局著作权合同登记号 图字:01-2014-3656

本书封面贴有 Pearson Education(培生教育出版集团)防伪标签,无标签者不得销售。

版权所有,侵权必究。侵权举报电话:010-62782989 13701121933

图书在版编目(CIP)数据

iOS 开发完全上手—— 使用 iOS 7 和 Xcode 5 开发移动与平板应用/(美) 夏普(Sharp,M.),(美) 萨顿

(Sadun,E.),(美) 斯托格(Strougo,R.) 著;张杰,欧阳柳 译. —北京:清华大学出版社,2014

(移动开发经典丛书)

书名原文:Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming

ISBN 978-7-302-36812-0

Ⅰ. ①i… Ⅱ. ①夏… ②萨… ③斯… ④张… ⑤欧… Ⅲ. ①移动终端-应用程序-程序设计

Ⅳ. ①TN929.53

中国版本图书馆 CIP 数据核字(2014)第 124350 号

责任编辑:王 军 李维杰 装帧设计:思创景点

责任校对:曹 阳

责任印制:

出版发行:清华大学出版社

网 址:http://www.tup.com.cn,http://www.wqbook.com 地 址:北京清华大学学研大厦 A 座 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969,[email protected] 质 量 反 馈:010-62772015,[email protected]

印 刷 者: 装 订 者: 经 销:全国新华书店 开 本:185mm×260mm 印 张:27.75 字 数:746 千字 版 次:2014 年 7 月第 1 版 印 次:2014 年 7 月第 1 次印刷 印 数:1~3000 定 价:59.80 元 产品编号:

Page 4: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

译 者 序 “stay hungry,stay foolish”。这是苹果公司联合创始人之一史蒂夫•乔布斯在斯坦福大学毕

业典礼上致辞中的 后一句话。这简单的一句话,包含史蒂夫•乔布斯对年轻人保持积极上进和不

断追求自己想要的生活的期望,也是译者作为一名开发人员所竭力维持的学习心态。 作为一名开发人员,永远有学不完的新知识。在 2013 年的 WWDC 大会上,苹果公司推出了

iOS 7 和 Xcode 5,为开发人员带来了 Objective-C 语言的新特性和一些新的框架 API,这些都是开

发人员需要学习的新知识。iOS 7 的新特性,成为各位新的 iOS 开发人员入门所必须掌握的重要

知识,也成为中高级开发人员保持竞争力的必备知识。本书涵盖 iOS 7 开发中 重要的新特性。

而随着苹果公司推出新的 Xcode 版本,熟悉 Xcode 5 的 新特性也变得更加迫切。掌握 Xcode 这一开发利器,能够使开发人员更加得心应手地进行开发、调试、分析等工作。

iPhone Developer’ s Cookbook 系列图书有多个版本,目前 新的是第 5 版,该系列图书一直

是苹果开发人员书籍中的经典之作。《iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平

板应用》是 iPhone Developer’ s Cookbook 系列图书的重要成员。本书作者 Erica Sadun 是著名的

iPhone 技术专家,她拥有佐治亚理工学院计算机科学博士学位,更重要的是她有多年的 Apple 开发经验。她参与过 20 多部畅销图书的编写,领域涉及程序设计、数字视频、数码摄像等,可谓著

作等身。在本书中,作者写作风格细腻,理论结合实践,由浅入深地介绍了基本知识点、编程技

巧和实际操作,讲述了零基础学习 iOS 开发所需的所有重要、基本的知识点,包括 Objective-C 基

础知识、常用的开发控件和编程技能;更有完整的项目代码贯穿始终,苹果证书、部署应用程序、

营销推广和 bug 报告、项目优化等相关知识。本书另一特点是深入讲述了 iOS 7 和 Xcode 5 的高

级特性,如自动布局、资源文件管理、调试仪表板等。从编程人员学习的角度来看,本书是一本

不可替代的且不乏深度的入门书籍。 本书是译者翻译的第一本书,有幸翻译名家之作,内心诚惶诚恐。所谓万事开头难,翻译过

程比较曲折,译者在紧张的工作之余尽力按进度完成翻译工作,并且进行了多次校对修改,还经

历了清华大学出版社的各位编辑们半年以来含辛茹苦的修订,希望能够让读者满意,但是译者水

平有限,疏漏之处在所难免,希望读者多加指正。 感谢在本书翻译工作中辛苦奉献的各位同仁,李泽军担任书中 3 章内容的翻译工作;此外,

参加本次翻译工作的还有王晔、熊姿、张俊俊、李存琛、刘凡、张义刚、彭希,在此一并表示

感谢!

Page 5: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

序 言 从iPhone Developer’s Cookbook——这是一本针对新的苹果iPhone SDK而出版的书

籍——第1版面世已经过去了5年。之后新的API和新的硬件不断出现,始终保持iOS开发顶尖

技术的重任更适合团队承担,而非个人能及。随着第5版的iPhone Developer’s Cookbook的推

出,这本书的块头堪比大象宝宝。我们不得不只用电子版本的形式发布该书一半的内容。现

在这个问题应该有所改变。 今年,我的出版团队理智地将iPhone Developer’s Cookbook分成若干本印刷版,以易于管

理。本书为《iOS开发完全上手——使用iOS 7和Xcode 5开发移动与平板应用》(Learning iOS Development: A Hands-on Guide to the Fundamentals of iOS Programming)。我的合著者是

Maurice Sharp和Rod Strougo,他们将之前iPhone Developer’s Cookbook前几章的引导性内容汇

编为单独一本,为了适合新的iOS开发者,他们扩展了已有的材料,形成一本更深入的引导

教程。 在本书中,你能找到从零基础开始学习iOS开发所需的所有重要基本知识。从Objective-C

到Xcode,从调试到部署,《iOS开发完全上手》会教你如何使用苹果公司的开发工具套件开

始编程。 本系列书中包含的另外两册书籍是: • The Core iOS Developer’s Cookbook 为日常开发的核心问题提供了解决方案,涵盖了使用

标准 API 和界面元素,创建 iOS 应用程序时所需的所有类;还提供了在创建移动应用程

序时所需的处理图形、交互和视图的诀窍。 • The Advanced iOS 6 Developer’s Cookbook 专注于常见的框架,如 Store Kit(商店包)、Game

Kit(游戏包)和 Core Location(核心位置),并且提供了构建应用程序所需的这些专用代码库

的基础知识和高深知识。本书针对那些有着强烈的 iOS 开发愿望和正在寻找专业领域的

实际操作基础的开发者。

与Maurice和Rod一起撰写《iOS开发完全上手》,这是一件非常愉快的事情。他们技术高

超,是经验丰富的开发者,而且他们是真正的好人。交由他人照顾自己的“技术宝宝”是件

很难的事,而我的两个合著者在“让学习iOS开发的梦想变为现实”的事业上,已投入大量

的精力。Maurice撰写了本书的大部分内容,给我们提供了丰富且深入的个人经验,并带入了

苹果公司的工作背景。

Page 6: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

IV

从早期iPhone的出现至今,iOS不仅在API方面,而且在开发工具方面,都发生了巨大的

变化。《iOS开发完全上手》针对的是iOS平台的新手们,为他们指引一条实用的、经过精心

探索的道路,从而让新手们获得那些重要的技能。《iOS开发完全上手》涵盖了各种基础知识,

从你第一次邂逅Objective-C语言到在App Store中部署应用程序。 欢迎你来到iOS开发世界。这是一个令人着迷和兴奋的地方!

—Erica Sadun,2013年4月

Page 7: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

作者简介 Maurice Sharp是一位拥有21年移动开发经验的老手,从业经历涉及众多大公司和小公

司,从苹果公司到Palm,从eBay到ShopWell和Couchsurfing。一开始,Maurice是一名NewTon工具包原型的实习开发者,之后,他在NewTon里担任开发者技术支持(Developer Technical Support,DTS)工程师,致力于让世界变得安全和乐趣,然后由此成为Palm的一名开发者。在

精通DTS之后,他又回归编码,而他目前在Couchsurfing公司从事管理和移动开发工作,并经

营着自己的咨询公司。KLM Apps;作为ExOfficio公司的技术顾问,他还服务于一些专做移

动的创业公司。在不以移动为生活和呼吸之外,Maurice作为丈夫父亲(他有一个早熟的、10岁大的女儿),这是他两个最重要的生活角色。

Erica Sadun是一位畅销书作者,也是一位合著者,还是一名贡献者,出版了几十本有关

编程、数字视频和摄影、网页设计的书籍,以及广受欢迎的The Core iOS 6 Developer’s Cookbook,该书现已是第4版。目前,她在TUAW.com上写博客,内容涉及她之前在O’Reilly公司的Mac开发者中心、Lifehacker和Ars Technica的相关工作经验。除了是几十个iOS原生应

用程序的作者,Erica Sadun还获得了佐治亚理工学院的图形、可视化和可用性研究中心的计

算机科学博士学位。她是一名极客、一个程序员,还是一个作家,从未见过有她不喜爱的小

工具。如果不写作,她和她的极客丈夫就抚育3个正接受训练的小极客,这3个小极客如果不

是忙着重新给房子布线或密谋统治全球,就会用克制的困惑来看待他们的父母。 Rod Strougo是作家、讲师和开发者。Rod的iOS和游戏开发旅程可以追溯到他用苹果电脑以

及用Basic编写游戏。Rod在职业生涯早期对游戏的激情,后来转移到企业软件开发,他花了15年为IBM和AT&T编写软件。目前,Rod追随自己对游戏开发和教学的热情,在Big Nerd Ranch公司(www.bignerdranch.com)从事iOS培训。Rod最初居住在里约热内卢,现在住在亚特兰大

佐治亚州与妻子和儿子们在一起。

Page 8: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

致 谢 究竟“致谢”与学习iOS开发有何关系?我过去倾向于忽略或跳过书中的致谢——而且你

也极可能忍不住要这样做。这些人是谁?我为何要关心呢?关心,是因为:一个人做好某事

的能力,实际上取决于他所认识的那些人。因而,我感谢曾经帮助过我的人,其中许多人是

乐于助人的。你或许认识他们中的某些人,或许知道他们是做什么的。我时常惊讶,因为我

与LinkedIn上真正的风云人物关系密切。所以请你继续阅读,关注其中出现的姓名,看看你

与这些可能帮助你、帮你解决最紧迫问题的人能多么亲密。 首先,深深的感谢要献给Erica Sadun(系列书的编辑和代码完善者)和Trina MacDonald(编

辑),感谢他们给我机会,让我编写本书的大部分内容。当他们找我撰稿时,我第一个想法是

“我从未写过如此鸿篇巨制的书,这会有多难呢?”然而,我发现,有了Erica Sadun和Trina MacDonald的支持,以及Rod Strougo、Chris Zahn(请你纠正我更多的语法)、Jovana Shirley(制作

编辑)、Kitty Wilson(你确信自己不知道如何编码吗?)、Anne Goebel(我是该用单词might,还是

该用单词may?),以及Olivia Basegio和Betsy Gratner两人(如果我像你们一样有条理性……),以

及整个制作部的员工(我给你们草图,你们制作出漂亮的图表)。所有这些人引导我学着成为一

名作者。我一直以来都是帮助他人的人。而开发者技术支持中心,是你们让我能够帮助成千上

万的人。这本书正是帮助更广泛读者的一次机会。感谢你们,感谢所有的人! 我也深深感激那些新的和老的朋友,他们帮助我回答技术问题:Mike Engber,一位工作

在苹果公司的超级明星编程人员,在有关block和其他问题上提供了宝贵的观点。其他人则花

费时间来回答问题或讨论可能的解决方案:感谢 Tim Burks、Lucien Dupont、Aleksey Novicov、 Jeremy Olson(@jerols,激发灵感的UX!)、Tim Roadley(Core Data先生)和Robert Shoemate (Telerik/TestStudio)。也感谢Marc Antonio和Mark H. Granoff,因为他们审阅每一章并给出意见,

对技术相关的内容进行更正。额外的感谢要送给Gemma Barlow和Scott Gruby,因为他们核对

了iOS 7/ Xcode 5带来的变动以及其他反馈。 贡献者并不局限于工程师们。德语翻译出自Oliver Drobnik和David Fedor,我一生的好友。

阿拉伯语出自Jane Ann Day……去学习她的课程吧,她非常优秀。Glyphish和aka Joseph Wain,为我们提供了漂亮的图标和界面元素图形。可以从www.glyphish.com为应用程序下载精美的

图标。在第6章“滚动”中首次用到的11张汽车图片,承蒙Sunipix.com提供。 感谢Couchsurfing公司(www.couchsurfing.org)的那些人们,给我时间来撰写这本书,其中

Page 9: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

VIII

有我们的CEO Tony Espinoza,我的朋友Andrew Geweke,以及整个移动射击和开发团队:

Gemma Barlow、David Berrios、Evan Lange、Hass Lunsford、Nicolas Milliard、Nathaniel Wolf 和Alex Woolf。你们真是我的欢乐!

感谢那些在我技术之旅中教过我、激发过我、挑战过我的人。要列出他们所有的人会占

用一本书的篇幅,其中包括卡尔加里大学计算机科学系的教员和学生们,以及 Dan Freedman、Scott Golubock、Bruce Thompson、Jim Spohrer、Bob Ebert、Steve Lemke、Brian Criscuolo,以及许多来自Apple、Palm、eBay、Intuit、Mark/Space、ShopWell和Couchsurfing的人!

此外,有一位教我如何成为管事(有些人称之为领导或管理者)的人:Gabriel Acosta-Mikulasek。此外,还有一位管理者,如今已是我亲密的朋友:Querido hermano。他现在教授“领导和生活”,

除他之外,你不能再找到更好的教练了。在www.aculasek.com可以找到他。 奇妙的是,我还想感谢我们的小猫(现在成大猫了),它们不断地试着重写内容,输入神秘的

猫代码,如“vev uiscmr[//I’64.”。最后,无数的感谢要送给我的家人,他们一直站在我身边,给

我时间工作,甚至有时还为我提供内容。我10岁大的女儿画了一幅r图表,该图用在了第12章中。

—Maurice Sharp

Page 10: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

前 言 “移动互联网是未来”是近来越来越常听到的短语。提到移动互联网时,没有什么设备

比得过苹果公司的用户友好性更好。 若你想要将iOS开发作为自己的技能集合的技能之一,需要从何处开始呢?需要以及选

择哪些资源呢?这取决于你的学习方式。本书涵盖的为实际操作的内容,目的是让你尽可能

快地操作。首先以小事情起步,然后会基于你已知的内容,进一步积累知识。 结果就形成了这样一本书,它用一种易于消化的格式向你传授编写应用程序所需的技能。

你可以按照自己喜欢的速度来学习,快慢都行。当正在创建应用程序时,可以回头翻阅本书

的特定部分,温习相关知识。 那么,请找个舒适的位置,将Mac和iOS设备放置身旁,开始深入钻研!

本书学习前提

在进一步学习iOS开发之前,你需要: • 一台Mac电脑——运行当前或上一版本Mac OS操作系统的现代Mac电脑——当本书写

作时, 新的版本是Mac OX Mountain Lion (v.10.8),Mavericks即将推出(本书未采用)。Mountain Lion之前的版本是Mac OS X Lion (v.10.7)。 理想情况是,你的Mac电脑使

用 新版本的OS,拥有至少8GB的RAM,以及大量磁盘空间。 • 一台iOS设备——尽管Xcode包含能用于开发应用程序的桌面模拟器,但你仍需要在

实际设备上运行应用程序以确保它能正确运行。使用目标客户可能使用的设备型号,

有助于确保应用程序能够在这些设备上良好地运行。 • 确保Internet连入——下载与开发相关的资源。某些时候,可能还需要测试应用程序

的无线功能。而且当然,你会想要向App Store提交你的应用。 • 熟悉Objective-C——你需要使用Objective-C来创建面向 iOS的本地应用程序。

Objective-C语言基于ANSI C,带有面向对象的扩展,这意味着你还需要了解一些C语言的知识。如果曾使用Java或C++语言进行编程,并且熟悉C语言,你会发现使用

Objective-C非常简单。在第2章“Objective-C新手训练营”中,对Objective-C语言进

行了简短介绍,但更清晰的理解会有助于你更快地学习。 你还需要Xcode,这是开发工具,以及苹果开发者账号,这会在第1章“初识iOS SDK”

中介绍。

Page 11: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

X

iOS 开发路线图

一本书并不能满足每个人的所有需求。尽管我们可以尝试,但是如果我们将你所需了解

的所有知识都打包到这本书中,你也不可能全部掌握。确实,针对Mac和iOS平台进行开发需

要你了解很多知识。如果刚刚起步,并且没有任何编程经验,你的第一步行动应是选修一门

大学级别的C语言编程课程。 在了解C语言以及如何使用编译器(在基本的C语言课程中会学到)后,接下来的部分应该

很简单。基于这些,你可以立即开展对Objective-C的学习,并且探索如何使用它并依靠Cocoa框架来编程。图P-1所示的流程图展示了Pearson Education出版的一些关键书目,能向你提供

成为熟练iOS开发者所需的训练。

图 P-1 iOS 开发路线图

在了解C语言之后,学习Objective-C语言编程有多个途径。如果想获得对这门语言的深

入理解,可以阅读苹果公司的文档,或者挑选以下书籍中的一本:

Page 12: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

前 言

XI

第Ⅰ

部分

• Objective-C Programming: The Big Nerd Ranch Guide by Aaron Hillegass (Big Nerd Ranch, 2012)

• Learning Objective-C: A Hands-on Guide to Objective-C for Mac and iOS Developers by Robert Clair (Addison-Wesley, 2011)

• Programming in Objective-C 2.0, fourth edition,by Stephen Kochan (Addison-Wesley, 2012)

有这门语言作为后盾,接下来就是学习Cocoa和开发者工具,也被称作Xcode。对于这些

知识,你有若干不同的选择。你又一次可以参考关于Cocoa和Xcode的苹果公司提供的文档。

请参阅Cocoa Fundamentals Guide(http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ CocoaFundamentals/CocoaFundamentals.pdf),初步学习Cocoa。对于Xcode,参见A Tour of Xcode (http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/A_Tour_of_ Xcode/ A_Tour_of_Xcode.pdf)。如果更喜欢书籍,也可以向 牛的人学习。Aaron Hillegass,亚特兰

大州的Big Nerd Ranch(www.bignerdranch.com)的创始人,是Objective-C Programming: The Big Nerd Ranch Guide一书第2版的合著者,也是很快要出第4版的Cocoa Programming for Mac OS一书的作者。Aaron所著的书在Mac开发者圈子评价很高,并且是你在cocoa-dev邮件列表中可

以看到的推荐书目。至于Xcode的更多知识,在学完Sams Publishing出版,由Firiz Anderson所著的Xcode 4 Unleashed后,你就已经学得足够深入了。

注意: 市面上有很多其他出版商出版的其他书籍,包括最畅销的 Beginning iPhone 4 Development,

该书由 Dave Mark、Jack Nutting 和 Jeff LaMarche 所著(Apress,2011)。如果完全是编程新手,另

外一本值得挑选的书是 Beginning Mac Programming,由 Tim Isted 所著(Pragmatic Programmers, 2011)。不要将自己限制于一本书或一家出版商。正如你通过与不同的开发者交谈可以学到很多东

西,你可以从市场上别的书籍中学到很多技巧和窍门。

要想真正掌握iOS开发,你需要查看很多信息来源:书籍、博客、邮件列表、苹果公司

的文档,以及所有这些当中 好的一种——会议。如果得到了参加WWDC(苹果公司的

Worldwide Developer Conference,世界开发者大会)的机会,你会了解我们所说的是什么。你

在会议上与别的开发者交谈所花费的时间,以及在WWDC的案例中与苹果工程师交流的时

间,是特别值得的,如果你是个认真的开发者的话。

本书组织结构

这本书的目标是使你能够针对iOS手持设备和平板设备创建iOS应用程序。它假定你熟悉

Objective-C语言但是对iOS开发一无所知(尽管第2章有新手训练营,但是你会发现,如果对这

门语言更加熟悉的话,从这本书中学习知识会更加轻松)。每一章会介绍一些新概念,并且如

果合适的话,这些概念会基于你在前面章节所学的知识。 大多数章节除了它们的核心内容之外还涵盖了额外的材料。额外的材料未必适合特定章

节的要点,但是创建应用程序时很重要。额外的材料向你展示如何使用特定的UI元素,提供

一些技巧与窍门,解释代码实践,并且提供其他的有用信息。 以下是每一章的摘要:

Page 13: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

XII

• 第 1 章,“初识 iOS SDK”——了解创建 iOS 应用程序时所用的工具、程序以及设

备。你首先要安装 Xcode,并且还要了解苹果开发者计划以及如何报名。 后两节

在你设计应用程序时有用。其中第一节涵盖了手持设备的限制在各种各样的 iOS 技

术中的体现,而 后一节介绍了型号之间的差异。 • 第 2 章,“Objective-C 新手训练营”——Xcode 项目是包含应用程序的代码、资源

和元信息的容器。在这一章,你将创建第一个项目。你还会得到对 Objective-C—应

用程序开发所用的语言——的一次快速复习。 • 第 3 章,“故事板介绍”——应用程序的用户能够看到的只有界面。你可能用不可

思议的代码来实现应用程序的行为,但是用户只能看到效果。在这一章,你要使用

故事板,一种一次性看到应用程序的所有屏幕的方式,并开始创建应用程序界面。

你要添加屏幕,并将它们连接到一起,并与代码连接起来。你从这一章得到的这些

技巧是创建 iOS 应用程序的核心部分。 • 第 4 章,“自动布局”——迄今为止,iOS 手持设备有两种不同的屏幕尺寸,并且

对于每种屏幕尺寸有两种不同的屏幕方向。支持 4 种不同的屏幕会很有挑战性。在

这一章,你将学习并使用自动布局——苹果公司的基于约束的布局引擎,以更简单

地支持多种屏幕尺寸。你甚至在屏幕旋转时使用它来修改布局。 • 第 5 章,“本地化”——iOS 设备至少在 155 个国家有售。当学习这一章时,你将

创建一个支持三种语言以及很多国家的应用程序。你将基于第 4 章构建应用程序,

使用自动布局来为不同的本地化字符长度调整界面元素。你还要实现特定于语言和

国家的日期与时间格式,还有从左向右和从右向左的书写方向。 • 第 6 章,“滚动”——在典型情况下,你想要显示的信息可能会超过手持设备的屏

幕大小。有时, 好的导航方式是在内容中滚动。从 简单的用例开始,你使用自

带的滚动视图 UI 元素,从简单地让屏幕弹跳,直到在多个元素中滚动。你可以添加

拖动和缩放功能,并且基于滚动位置显示元素编号。 • 第 7 章,“导航控制器 I:层次结构和标签”——导航复杂信息可能非常有挑战性,

特别是在手机的相对较小的屏幕上。iOS 提供了导航控制器来简化这种工作。首先

使用 UINavigationController 在信息层次结构中移动,然后使用更加先进的特性来提

供进一步的定制。下一步,使用标签栏在不同类型的信息之间移动,并且学习如何

操作故事版外的视图控制器。 • 第 8 章,“表视图 I:基础知识”——表视图是 iPhone 和 iPad 应用程序的重要部分。

在学习它们如何工作之后,你将创建汽车表格,然后实现元素的添加和删除操作。

你再深入一点,使用表格的一个变种来处理汽车详细信息。做这件事时,你使用选

择器视图来表示日期,使用协议在场景之间传递数据和状态。 • 第 9 章,“Core Data 介绍”——Core Data 实现了只需要做很少的工作即可使用完整

的数据管理功能。在这一章,你将为应用程序创建 Core Data 模型,并且使用这些数

据来表示汽车列表和汽车详细信息。下一步,使用自带的对象进一步简化管理表视

图的工作。你还会学习将已有项目改为使用 Core Data 的办法,并且你会更加熟悉常

见的错误。 • 第 10 章,“表视图 II:高级话题”——表视图有一些高级特性可以让应用程序锦上

添花。在这一章中,你会实现不同的特性,包括自定义表单元、表格段、排序、内

Page 14: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

前 言

XIII

第Ⅰ

部分

容索引以及搜索。你还将学习 UISegmentedControl,调试的更多相关知识,以及使

用#define 的更好方法。 • 第 11 章,“导航控制器 II:拆分视图和 iPad”——iPad 应用程序通常需要与 iPhone

应用程序不同的设计方式。在本章,你将创建一个通用的应用程序,即在 iPhone 和iPad 上都能运行的应用程序。你将使用 iPad 专用的 UISplitViewController 构建单独

的界面。你将学习如何将 iPhone 视图适配到 iPad,以及如何选择何时使用它们,何

时创建新的东西。此外,你将实现单例,一种特殊的只能有一个实例的对象,你还

将学习访问器方法的用处,并且实现自定义转场动画。 • 第 12 章,“触摸基础”——用户所做的几乎所有事情都涉及一根或多根手指的手势。

一些特性,如按钮,很容易添加触摸功能。其他控件需要更多工作。在这一章,你

将学习手势识别器的基础知识,并且为汽车详情视图添加轻扫手势。然后你将更加

深入,创建自定义的手势识别器。 后,你将添加一个可拖曳视图。 • 第 13 章,“Block 介绍”——从为视图添加动画到错误响应器,代码块是使用系统

调用的一种重要工具。你将学习如何创建和使用代码块,以及用它们为视图增加脉

动。你还会学习变量的作用域、只读变量与可修改变量。 后,你将用代码块代替

协议。 • 第 14 章,“Instruments 和调试”——应用程序开发中有两个定律: 初的实现很少

能像你所预期的那样执行,并且总是会有 bug。在这一章中,首先使用测量仪器修复

性能问题,测量仪器是一种检查性能、内存占用,以及应用程序中其他重要部分的

工具。下一步,你将学习调试器中断点的一些高级特性。然后,你将同时使用这两

种工具来解决 困难类型的 bug。在这一章中,你还会学到一种发现和修复问题的过

程,以及使用后台任务的一种方式。 • 第 15 章,“部署应用程序”——在 后一章,你会将应用程序从你的机器搬到 App

Store。首先,你将创建所需的任意一种开发者证书,以及应用程序安全证书。你将

添加图标和启动画面,然后学到对应用程序有用的额外功能,例如数据记录和 bug报告,还有一些主要供应商。在简要地了解营销之后,你将使 App Store 准备好接受

应用程序,构建并上传。本章以汇总继续创建给力 iOS 应用程序所需的资源来结尾。

关于示例代码

在学习本书的过程中,你将开发并改进代客泊车应用程序CarValet。CarValet应用程序被

用作对你所学概念的实际实现。它并不是一个向大众发布的应用程序,尽管它可以作为这样

一个应用程序的基础。 任一涉及创建代码的章节通常至少包含两个项目:一个包含本书之前章节代码的起始项

目,以及一个包含在这一章中所做修改的完结项目。对于本书大部分内容,你可以使用自己

的某一章的完整项目作为下一章的起点。有一些地方不是这样的,在这些章节中会作出解释。 除了 后的版本,示例代码项目使用相同的唯一包标识符:com.mauricesharp.CarValet。

于是,你无法在虚拟机中或设备上同时安装多个版本的应用程序。如果想安装多个版本,只

需将唯一的字符串添加到标识符的后边即可,例如com.mauricesharp.CarValet.CH05.portait。你将在第15章了解包标识符的重要性。

Page 15: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

XIV

你所写的所有代码和所学的概念适用于iOS 7或更新的系统版本。在iOS 7可用的第一天

末尾,超过35%的现存设备已经在使用,这是有史以来 快的采用速度。这个份额只会增加。

iOS的采用速度通常很快,一般会在几个月之内达到80%或更高。

获得示例代码

所有示例代码都放到了GitHub上,网址为https://github.com/mauricesharp/Learning- iOS-Development。这些代码按章节组织,大多数文件夹包含起点项目和完结项目。某些文件

夹还包括中间步骤的项目,另一些项目还包含新的资源文件,比如图片。例如,以下是第6章的文件夹:

• CH06 CarValet Starter——第5章的完结项目,不包含第6章的任何修改。可使用这个

项目,也可以使用自己第5章的末尾项目,作为第6章添加代码的起点。 • CH06 CarValet Finished——包含第6章所有改动的项目。可使用这个项目作为应做修

改的参考,或者作为下一章的起点。 • CH06 Assets CarImages——一个额外的文件夹,包含本章中所做修改用到的图片资源。 这些代码会按需更新。如果看到有些地方需要修改,有遗漏,甚至是实现某些功能的更

好办法,尽管……

贡献!

示例代码从来都不是固定的目标,而是随着苹果公司更新SDK以及Cocoa Touch库而演

变。参与进来吧。你可通过建议bug修复与更正来作贡献,也可扩充所提供的代码。GitHub允许你对仓库打分支,用你自己的调整和特性来扩展代码,并且可以在GitHub上使用Pull Request来将这些修改分享回主仓库。如果想到新的点子或方法,请告诉我们。我们乐于采纳

对于示例代码仓库或本书下一版本的好建议。

获取 git

可以使用git版本控制系统来下载本书源代码。git的OS X实现版本位于http://code.google.com/ p/git-osx-installer。OS X git实现同时包含命令行和GUI解决方案,可以四处搜寻 适合开发需

要的版本。 还有些第三方的git工具——有些免费,有些收费。以下两个 流行: • SourceTree:一个免费的git hub客户端工具,网址为www.sourcetree app.com。 • Tower:一个付费的带有华丽UI的客户端,网址为www.git-tower.com。

访问 GitHub

GitHub(http://github.com)是 大的git托管网站,包含超过150 000个公开仓库。它既提供

免费的公开项目托管服务,又为私有项目提供付费托管选项。拥有可定制的网页界面,包含

wiki托管和问题跟踪功能,并且着重于项目开发者的社交网络,是寻找新代码以及合作开发

现存代码库的好去处。可以在http://github.com上注册免费账户。当这样做时,可以复制并修

改此书的源代码仓库,或者创建自己的开源iOS项目并与他人分享。

Page 16: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

前 言

XV

第Ⅰ

部分

联系作者

如果有关于本书的任何评论、问题或建议,请发Email给我,邮箱地址为learningios@ mauricesharp.com。

本书使用iOS 7和Xcode的开发者预览版本编写而成。一些不同版本也被用到,但大多数

是使用DP(Developer Preview,开发者预览版) 4。本书大部分内容都使用DP 6——正式版本发

布之前的 后一个预览版本——进行了检验,但是一些早期代码仍然存在,特别是在CarValet示例代码中。请检查勘误表中的更新。

现在阅读这些页面、写代码,并且完成挑战题。 后,你将懂得如何为手持设备与平板

设备创建iOS应用程序。

Page 17: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

目 录

第 1 章 初识 iOS SDK ························· 1 1.1 安装Xcode····································1 1.2 关于 iOS SDK·······························2

1.2.1 免费获取的开发者计划 ··········3 1.2.2 iOS 开发者计划标准版

(个人和公司) ··························4 1.2.3 企业开发者计划······················4 1.2.4 大学开发者计划······················5 1.2.5 注册·········································5 1.2.6 iTunes U 和在线课程 ··············5 1.2.7 iOS SDK 工具 ·························5

1.3 测试应用程序:模拟器和 设备 ····················································7 1.3.1 模拟器的局限 ·························8 1.3.2 接线·········································9 1.3.3 对 iOS 设备的考量··············· 10

1.4 理解设备型号间的差异·············14 1.4.1 屏幕尺寸 ······························ 14 1.4.2 摄像头 ·································· 14 1.4.3 音频······································ 15 1.4.4 电话通信 ······························ 15 1.4.5 Core Location 和 Core Motion

之间的差异·························· 15 1.4.6 摇晃支持和接近··················· 16 1.4.7 处理器速度 ·························· 16 1.4.8 OpenGL ES··························· 17 1.4.9 iOS········································ 17

1.5 小结 ·············································18 第 2 章 Objective-C 新手训练营 ······· 19

2.1 使用模板创建Hello World 应用程序 ·····································19 2.1.1 创建 Hello World 项目 ········· 19 2.1.2 Xcode 项目界面快速导航···· 23 2.1.3 添加 Hello World 标签 ········· 24

2.2 Objective-C 新兵训练营·············26 2.2.1 Objective-C 编程语言··········· 27 2.2.2 类和对象 ······························ 30

2.3 CarValet 应用程序:实现 Car 类···········································35 2.3.1 实现 Car 方法······················· 39 2.3.2 属性 ······································ 43 2.3.3 创建并打印 Car 对象 ··········· 45

2.4 属性:另外两个特性 ·················46 2.5 子类化和继承:挑战一下 ·········49 2.6 小结 ·············································52 2.7 挑战题 ·········································53

第 3 章 故事板介绍 ·························· 55 3.1 故事板的基础知识 ·····················55 3.2 场景 1:构建“Add/View”

场景 ·············································57 3.2.1 在“Add/View”场景中

添加可视化元素 ·················· 57 3.2.2 添加“Add/View”初始化

行为 ····································· 61 3.2.3 加入显示汽车行为 ··············· 69 3.2.4 添加 Previous 和 Next

汽车按钮 ······························ 72 3.3 场景 2:添加一个编辑器 ··········75

3.3.1 添加 Editor 场景的

可视化元素 ·························· 77 3.3.2 添加 Editor 场景中的行为···· 78 3.3.3 将一切都关联起来 ··············· 82 3.3.4 为何不用 segue 返回? ········ 87

3.4 改进故事板Ⅰ ·····························87 3.5 改进故事板Ⅱ ·····························91 3.6 小结 ·············································94 3.7 挑战题 ·········································94

Page 18: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

XVIII

第 4 章 自动布局 ······························ 95 4.1 自动布局的基础知识·················95 4.2 完美纵向显示 ···························106

4.2.1 以约束的方式思考············· 106 4.2.2 完整的规定 ························ 107

4.3 添加/查看汽车:设计和实现 约束 ···········································108 4.3.1 设计与实现添加汽车

约束 ··································· 118 4.3.2 编辑汽车场景:初始的

样子 ··································· 123 4.4 添加横向屏幕支持···················123 4.5 小结 ···········································142 4.6 挑战题 ·······································143

第 5 章 本地化································ 145 5.1 本地化的基础知识···················145

5.1.1 重定向 ································ 146 5.1.2 格式···································· 148

5.2 为本地化而准备应用程序·······150 5.3 德语国际化 ·······························162

5.3.1 添加德语区域 ···················· 162 5.3.2 更改设备语言 ···················· 163 5.3.3 更新德语版的 Localizable.

strings································· 164 5.3.4 修改标签约束 ···················· 166 5.3.5 格式化和读取数字············· 169

5.4 从右至左:阿拉伯语国际化···170 5.4.1 添加阿拉伯语字符串 ········· 170 5.4.2 让日期和数字能够工作 ····· 173 5.4.3 文本对齐 ···························· 175

5.5 小结 ···········································176 5.6 挑战题 ·······································177

第 6 章 滚动 ··································· 179 6.1 滚动的基础知识·······················179 6.2 弹跳滚动 ···································180 6.3 处理键盘 ···································183

6.3.1 添加滚动视图 ···················· 183 6.3.2 调整键盘大小 ···················· 186 6.3.3 添加调整大小 ···················· 190

6.4 在内容中滚动 ···························190 6.4.1 填充滚动视图····················· 191 6.4.2 添加分页 ···························· 193 6.4.3 添加缩放 ···························· 194 6.4.4 旋转 ···································· 197 6.4.5 这是什么车?····················· 198

6.5 小结 ···········································198 6.6 挑战题 ·······································199

第 7 章 导航控制器 I:层次结构 和标签································ 201

7.1 导航控制器 ·······························201 7.1.1 导航控制器类····················· 203 7.1.2 基于消息的导航················· 209 7.1.3 少许颜色 ···························· 210

7.2 标签栏控制器 ···························212 7.2.1 标签栏的工作原理 ············· 213 7.2.2 CarValet 应用程序:

添加标签栏 ························ 214 7.2.3 CarValet:移动 Info ··········· 216

7.3 小结 ···········································217 7.4 挑战题 ·······································218

第 8 章 表视图 I:基础知识············ 219 8.1 表视图介绍 ·······························219 8.2 阶段 I:替换Add/View

场景 ···········································226 8.2.1 添加汽车查看单元格 ········· 228 8.2.2 添加汽车 ···························· 229 8.2.3 删除汽车 ···························· 230

8.3 阶段 II:添加Edit 屏幕 层次结构 ···································233 8.3.1 添加查看汽车场景 ············· 233 8.3.2 用数据填充查看汽车

场景 ··································· 234 8.3.3 编辑数据 ···························· 236 8.3.4 编辑年份 ···························· 245

8.4 小结 ···········································251 8.5 挑战题 ·······································251

Page 19: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

目 录

XIX

第Ⅰ

部分

第 9 章 Core Data 介绍 ·················· 253 9.1 介绍Core Data··························254 9.2 将CarValet 应用程序迁移到

Core Data···································255 9.2.1 添加 CDCar 模型 ··············· 256 9.2.2 添加 Core Data 样板代码··· 258 9.2.3 转换CarTableView-

Controller ··························· 259 9.3 更加简单的表视图:

NSFetchedResultsController······265 9.3.1 第1部分:集成NSFetched-

ResultsController ················ 265 9.3.2 第2部分:实现NSFetched-

ResultsControllerDelegate ·· 268 9.4 小结 ···········································271 9.5 挑战题 ·······································271

第10章 表视图 II:高级话题············ 273 10.1 自定义表视图单元格 ··············273 10.2 表格段和排序 ··························276

10.2.1 表格段的表头 ················· 277 10.2.2 允许表格段的分组方式

发生变化 ························ 279 10.3 添加索引 ··································283 10.4 搜索表格 ··································286 10.5 小结 ··········································294 10.6 挑战题 ······································295

第11章 导航控制器 II:拆分视图 和 iPad······························· 297

11.1 拆分视图控制器 ······················297 11.2 添加拆分视图控制器 ··············299

11.2.1 添加拆分视图控制器······ 301 11.2.2 添加各部分之间的导航···· 304

11.3 添加About 视图 ······················306 11.3.1 创建 MainMenuView-

Controller ························ 306 11.3.2 美化菜单图片 ················· 308

11.4 在纵向屏幕中访问菜单 ··········310 11.5 添加汽车图片 ··························318 11.6 新增Cars ··································320

11.6.1 使汽车表格适应 iPad······ 322 11.6.2 汽车详情控制器·············· 324 11.6.3 汽车详情控制器:

iPad 专属························· 326 11.7 小结···········································340 11.8 挑战题·······································341

第 12 章 触摸基础 ··························· 343 12.1 手势识别基础 ··························343 12.2 在汽车之间轻扫移动 ··············344

12.2.1 在汽车之间移动 ············· 344 12.2.2 调用 nextOrPrevious-

Car: ································· 347 12.2.3 添加动作选择器 ············· 348 12.2.4 添加轻扫手势 ················· 350 12.2.5 阻止识别器工作 ············· 351

12.3 自定义识别器 ··························352 12.3.1 识别器的状态 ················· 352 12.3.2 指定的识别器消息·········· 354

12.4 iPad 返回Home 页 ··················354 12.4.1 创建返回手势识别器······ 355 12.4.2 将手势识别器添加到

当前的详情视图 ············· 357 12.4.3 创建并响应手势识别器···· 358

12.5 再添加一个手势 ······················359 12.5.1 拖动手势识别器 ············· 359 12.5.2 添加支持拖动的

出租车视图····················· 360 12.6 小结···········································361 12.7 挑战题·······································361

第13章 Block介绍·························· 363 13.1 Block 基础································363

13.1.1 声明 Block······················· 363 13.1.2 使用 Block······················· 364 13.1.3 编写 Block······················· 364

13.2 变量的作用域 ··························369 13.3 替换协议 ··································371

13.3.1 步骤(1):修改 ViewCarTable-

ViewController ················ 371

Page 20: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

XX

13.3.2 步骤(2):更新 CarTable-

ViewController ················ 372 13.3.3 步骤(3):修改 CarDetail-

ViewController ················ 373 13.3.4 步骤(4):更新 MainMenu-

ViewController ················ 373 13.4 小结 ··········································374 13.5 挑战题 ······································374

第14章 Instruments 和调试············ 375 14.1 Instruments································375

14.1.1 模板和仪器····················· 377 14.1.2 使用 Time Profiler 的

示例 ································ 378 14.1.3 关于仪器的 后一句话···· 382

14.2 调试器 ······································383 14.2.1 调试仪表:微型

Instruments······················ 384 14.2.2 断点、动作、代码 ········· 386

14.3 Bug 搜寻:Instruments 和 调试器 ·········································· 387 14.3.1 从 Zombies 开始 ············· 388 14.3.2 转移到调试器 ················· 390

14.4 小结 ··········································391 14.5 挑战题 ······································392

第 15 章 部署应用程序····················· 393 15.1 证书、概要和应用程序 ··········393

15.1.1 生成开发证书和 profile ····395 15.1.2 应用程序 ID 和

provisioning·····················397 15.2 预发行·······································403

15.2.1 bug 报告 ··························403 15.2.2 度量·································404 15.2.3 质量保证测试 ·················405 15.2.4 市场营销 ·························408

15.3 上传和发行 ······························409 15.3.1 软件详情 ·························410 15.3.2 上传到 App Store ············414 15.3.3 在发布之后需要注意的

事情 ································418 15.4 下一步去哪儿 ··························419

15.4.1 网页·································420 15.4.2 开发者小组与会议··········420 15.4.3 其他社交媒体 ·················421

15.5 小结···········································422 15.6 挑战题·······································422

Page 21: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS开发是学习Objective-C和苹果框架过程中快乐而有趣的探险。其他技术都不能如此简

单、便捷地将一个创意转变成应用程序,安装在手上的iPhone、iPad或iPod touch上。通过玻

璃触摸屏背后的代码,可以将这些设备变成任何想要的东西。一台iOS设备能成为一个飞行

模拟器,一本能与人交互的书籍,或是其他任何你能想象到的事物。本章中,你将迈出iOS

开发的第一步,学习iOS软件开发工具包(Software Development Kit,SDK)并学会如何在Mac

电脑上安装Xcode工具集(这个过程非常简单)。下一章中,你将开始深入学习,制作自己的第

一个iOS应用程序,并在iOS模拟器上运行它。

iOS家族包括iPhone、iPad和iPod touch。尽管相对于桌面系统来讲,iOS设备所占份额极

小,但它们采用日益强大的多核CPU运行iOS——一种一流的OS X系统。iOS配备有功能丰富

多样的SDK,能支持开发者设计、开发、实现各种类型的应用程序。借助Xcode和苹果的集

成开发环境(Integrated Development Environment,IDE),你创建的项目能够充分利用多点触摸

的界面和强大的板载(onboard)特性。本章中,你将学习苹果的各种iOS开发者计划(iOS

Developer Programs)以及如何加入这些计划。准备好了吗?下面介绍如何在Mac电脑上安装

Xcode软件。

1.1 安装 Xcode

iOS开发的第一步是安装Xcode:苹果公司的IDE。Xcode是一款工具,可以用它编写

Objective-C应用程序并针对iOS设备进行代码编译。苹果公司近来已让Xcode的安装变得

尽可能简单,在Mac App Store(Mac应用商店)内提供Xcode的免费下载,如图1-1所示。 安装Xcode时,请遵循如下步骤: (1) 启动Mac电脑上的Mac App Store应用程序。 (2) 搜索Xcode。

初识 iOS SDK

1 第 章

Page 22: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

2

(3) 单击Free按钮,安装Xcode。 在下载和安装Xcode时,可以阅读本章的剩余部分并学习iOS SDK。以上就是安装

Xcode和踏上探险旅程所需的全部工作。本章剩余内容涵盖了iOS SDK、iOS设备和苹果

公司提供的开发者计划等内容。在第2章“Objective-C新手训练营”中,你将开启Objective-C语言和iOS应用程序开发之旅。

图 1-1 Mac App Store 中的 Xcode

1.2 关于 iOS SDK

iOS SDK包含在编写iOS应用程序时所需的所有软件库,以及能让你在Mac电脑上试运行

应用程序的iOS模拟器。SDK包含在Xcode开发工具中,用于创建iOS和Mac应用程序。 可以免费注册苹果在线开发者计划(Apple Online Developer Program),下载并研究完整的

iOS SDK编程环境。然而,这个免费的开发者计划并不能让你将应用程序部署在真实设备上,

如iPhone或iPad。如果想实现在真实设备上运行应用程序,你需要注册并成为苹果iOS开发者

Page 23: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

3

计划的成员。一共有4种开发者计划,如表1-1所示。

表 1-1 iOS 开发者计划

计 划 价 格 适 合 对 象

iOS 开发者计划-个人 99 美元/年

希望将应用程序发布到 App

Store 的个人开发者。其所发布

的应用程序将显示在 iTunes 中

的个人名下

iOS 开发者计划-公司 99 美元/年

希望通过 App Store 发布应用程

序的公司或开发团队。其所发布

的应用程序将显示在 iTunes 中

的公司名下

iOS 开发者计划-企业 299 美元/年

为员工研发内部应用程序的大

型公司,其在机构内部发布应用

程序

iOS开发者计划-大学 免费 免费的计划,针对提供 iPhone

教学的高等教育机构

每种开发者计划拥有相同的iOS SDK,iOS SDK拥有多种创建和部署应用程序的方式。

每种开发者计划都有明确的适用对象。请记住,如果公司要将应用程序发布到普通的App Store,那么你所需要的只是公司型的iOS开发者计划。企业型iOS开发者计划仅适用那些想要

将应用程序部署到私有的内部App Store的公司。 接下来将更加详细地讲述这几种iOS开发者计划。

1.2.1 免费获取的开发者计划

免费的开发者计划,针对的是任何想要获得完整的iOS SDK开发环境,但暂不准备付费

购买其他服务的开发者。对于免费的开发者计划的应用程序来说,部署环境仅限于iOS模拟

器。尽管可以在模拟器上运行应用程序,但不能将这些应用程序安装到设备上,或者在苹果

应用商店销售这些应用程序。 虽然每一版的模拟器都逐步接近相应的iOS系统,但是不应该依赖模拟器评估自己的应

用程序。在模拟器上稳定运行的应用程序,在真实设备上可能无法响应或崩溃。模拟器不支

持某些特性,例如摇晃或加速度传感器读取。这些特性以及设备上的一些其他特性,在模拟

器上并不可用。有关模拟器以及模拟器设备的区别,在本章后面的1.3.1节“模拟器的局限”

中将详述。 无须注册,也能免费下载Xcode,但是加入完整的开发者计划就有机会获得更多服务,

包括在设备上运行代码,访问预览版iOS,甚至可以向苹果开发者支持中心的工程师提问。

Page 24: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

4

1.2.2 iOS 开发者计划标准版(个人和公司)

为了获得在设备上运行和发布应用程序的相关特权,你需要支付开发者计划费用,目前

标准版的iOS开发者计划每年收费99美元。可以以个人或公司的名义加入此计划。付费以后,

就能通过App Store发布自己的应用程序,还能在真实的iOS设备上测试代码。此类开发者计

划也增加了点对点发布应用程序(ad hoc distribution)的功能,允许你向一定数量的、已注册的

设备发布自己预览版的应用程序。标准版开发者计划针对大多数希望通过App Store发布应用

程序的iOS开发者,提供了一个最通用的解决方案。如果期望通过出售应用程序,开展商业

活动,这个开发者计划是非常合适的。 标准版iOS开发者计划还能让开发者提前获得测试版的SDK。这对于需要赶上苹果发布

操作系统和设备升级的日子,从而及时发布面向市场的产品的开发者来说,是巨大的优势。

例如,标准版的开发者在2013年6月就能提前获得iOS 7和Xcode 5的早期版本。

警告:将个人开发者计划变更为公司级开发者计划非常困难 目前,加入公司级的开发者计划需要提交书面材料,证明公司是合法的企业实体。将

个人开发者计划变更为公司级的开发者计划,比直接开通公司级开发者计划更困难。如果

只是个人开发者,想要变更为公司开发者,尽管只为了法律责任保障(liability protection),也最好先创建公司,然后再加入开发者计划;或者先加入个人开发者计划,而后再创建单

独的公司级开发者计划。加入公司级开发者计划的确要花费更长的时间,尤其当前还需要

向苹果公司提交公司的 DUNS(Data Universal Numbering System)编码,又称邓白氏环球

编码。

注意: 2010 年初,苹果重构了旗下的 Mac 开发者计划(Macintosh Developer Program)以追赶成

功的 iOS 开发者计划。目前价格是 99 美元/年,经过重构的 Mac 开发者计划所提供的资源

类型与 iOS 开发者计划相同:编码级的技术支持、开发者论坛会员、提供预览版软件的下

载。这两个开发者计划都不提供硬件方面的购买折扣。Mac 开发者计划并不提供 iOS 软件,

反之亦然。

1.2.3 企业开发者计划

企业开发者计划,目前价格是299美元/年,用于机构内发布应用程序,针对的是拥有500名或更多员工的企业。企业开发者计划并不提供在苹果公司公开的App Store发布应用程序的

服务。 相反,企业可以开发自己专属的应用程序,并通过私有的App Store将应用程序部署到员

工的硬件设备上。企业开发者计划面向的是大型公司,这些公司需要给员工部署定制的应用

程序,如订单系统(ordering system)。

Page 25: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

5

1.2.4 大学开发者计划

仅限于高等教育机构使用的大学开发者计划是免费提供的,旨在鼓励大学和高校开设

iOS开发课程。该计划允许教授和教师组建200名学生以内的团队,向团队提供完整的iOS SDK。学生们彼此之间或学生与老师之间可以分享应用程序,并且学校可以向App Store提交

应用程序。

1.2.5 注册

注册免费或付费开发者计划的网址位于苹果开发者中心首页,网址为http://developer.apple. com/programs/register。

不管要注册哪种开发者计划,都必须有一台能运行最新Mac OS X系统的Mac电脑。此外,

最好拥有至少一个——有多个更好——iPhone、iPad和/或iPod touch设备。这些设备是用于测

试的,可确保开发的应用程序能够在每种设备平台上正常地运行,包括那些老式的设备。采

购一台一直很想要的iPhone、iPad或iPod Touch,难道还有比“呃,这是出于商业目的的需求”

更好的借口吗? 通常,成为付费的开发者并不立马可行,而是有一定时间延迟。注册之后,苹果公司需

要一些时间审核账号和开具发票。在实际缴纳费用后,还需等待24~72小时才能访问高级的

门户特性。对于个人注册,只需非常短的几天延迟,而公司开发者则需要等更长时间。经过

另外的一步——注册iTunes Connect(iTunes连接),你才能够通过App Store出售应用程序。幸

好,这个可以推迟到注册付费开发者之后再进行。有了iTunes Connect之后,在创建App Store账号之前,还必须收集好银行卡信息和公司书面材料。你必须阅读并同意苹果公司的应用程

序发布协议。苹果公司在http://itunesconect.apple.com上提供了全部的细节。要记住:在上传

应用程序之前需要等待数天的时间,因此不要过久地推迟注册时间。

1.2.6 iTunes U 和在线课程

不管注册成为苹果公司的哪一种iOS开发者,你都可以获取到苹果公司每年发布的世界

开发者大会(WWDC)的视频。这些高质量的演讲,是由苹果公司自身的工程师制作发表的,

对许多iOS特性提出了深刻的见解,还提供了介绍如何使用这些特性的示例。此外,在iTunes 大学(iTunes内部的iTunes U)里也有许多免费的iPhone编程课程,可以将这些课程作为本书的

同步学习资料。

1.2.7 iOS SDK 工具

Xcode通常消耗几GB的存储空间,并且会将一份完整的交互式设计工具套件安装到Mac电脑上。该套件所包含的组件构成了iOS开发环境的基础,它包含如下几个部分:

• 项目编辑器(Project Editor)——它是 Xcode 的核心,还是 Xcode 大多数特性的所在地,

包括项目文件和组件管理,支持语法感知的Objective-C和 iOS SDK源代码编辑功能,

以及可视化编辑器(visual editor)和完整的调试器。它是一个单独的窗口,方便开发者

查阅所有的 iOS 文档、Xcode 文档和其他支持文档。

Page 26: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

6

• 界面生成器(Interface Bulider,IB)——IB 存放在项目编辑器中,提供了一个快速的原

型工具,用于图形化布置用户界面(UI),并能将这些预置的界面与 Xcode 的源码进

行关联。有了 IB,就能使用强大的视图设计工具,在应用程序中添加可视化元素,

并将屏幕上的这些元素与应用程序中的对象和方法调用进行关联。除了单个的屏幕,

还可以在一个文件中布局好所有的应用程序屏幕,确定好每个屏幕依次展示的方式。

你将在第 3 章“故事板介绍”中学到相关内容。 第 4 章“自动布局”将介绍利用 iOS 使用 IB 的另一个强大特性。自动布局是一个高

级的基于规则的系统,支持指定视图之间的位置关系,而不用担心像素级完美定位。

有了自动布局,就可以创建能够适应不同屏幕方向和尺寸的界面。 • 模拟器(Simulator)——iOS 模拟器运行在 Mac 电脑上,允许你在自己的电脑上构建和

测试 iOS 应用程序。测试应用程序时,可以不连接 iPhone、iPad 或 iPod touch 设备。

模拟器提供与 iOS 设备上相同的应用程序编程接口 (Application Programming Interface,API),还能预览概念设计的外观和行为。使用模拟器时,Xcode 编译的是

英特尔 x86 代码,该代码可以原生地运行在 Mac 上,而不是 iPhone 上所使用的 ARM代码。请记住,模拟器的性能与实际的设备具有很大的差异,因为在模拟器上,应

用程序是在一台具有完全不同的 CPU、GPU(图像处理器)和存储/硬盘格式的机器上

运行。应用程序在模拟器上很可能会更快地运行,并且不存在内存和通信方面的问题。 • 性能测试工具包(Performance Tools)——在模拟器或设备上运行应用程序时,运行时

调试测量仪器能展示性能概况,包括内存与 CPU 的使用情况。Instruments 甚至能提

供更多的细节,可分析 iPhone 应用程序的底层运行状况。它能对内存使用进行采样,

并监控性能,让你能够识别和定位应用程序中的问题区域,并解决性能问题。你将

在第 14 章“Instruments 和调试”中学到相关知识,如果在进行开发的同时进行应用

程序调优,就能尽早捕获问题,最终实现最佳的性能。Instruments 通过图形化的形

式来展现基于时间线的性能曲线,展示出应用程序在哪里占用的资源量最大。

Instruments 基于 Sun Microsystems 开发的开源 DTrace 包而构建,是确保应用程序能

高效地运行在 iOS 平台上的至关重要的工具。 此外,静态分析器(static analyzer)会向你展示哪些地方的代码可能存在问题。只要简

单地在单个文件或整个项目中开启静态分析器,就能找到未使用的变量、可能的逻辑

问题、潜在的内存泄漏和其他问题。 • 调试器(Debugger)——第 14 章还介绍了调试器。调试器可以帮助你快速找到和修复

代码中的问题。其中,你能够逐行运行代码并检查变量的值,可以选择在某个单独

的显示区域查看变量的值,可以简单地将鼠标指针悬停在源代码的上方进行查看,

还可以设置更加高级的断点(breakpoint),包含条件性的触发器和关联动作,例如记

录日志消息,播放资源文件,或是运行脚本。甚至能用控制台进行更加精细的控制。 • 其他特性——Xcode 提供了其他许多功能特性,以支持应用程序的开发和部署过程的

循环,这些功能包括:内置的使用 Git 的分支源码控制支持、开发者证书和应用程序

授权的管理、测试设备的管理,以及将应用程序上传到商店等。 总之,iOS SDK的组件使你能够开发出自己的应用程序。作为一名原生应用程序开发者,我

的观点是,开发者会将大部分时间用于编写和调试源代码、构建界面,以及在模拟器上运行应用

程序。开发者还需要花时间用Instrument工具进行代码调试。除了这些工具,有一件重要的工具

Page 27: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

7

未在上述清单中列出——Cocoa Touch。这件工具与SDK装载在一起,极其容易被忽略。 Cocoa Touch是由苹果公司提供的类库,用于快速开发iOS应用程序。它由一些API框架组

成,允许你构建图形化的,包含窗口、文本和表格UI元素的事件驱动型的应用程序。iOS中的Cocoa Touch和UIKit类似Mac OS X中的Cocoa和AppKit,能够让开发者在iOS平台上构建功

能丰富的、可重用的界面。 许多开发者对iOS应用程序的代码库的大小感到惊讶:它们非常小。最主要的原因在于

Cocoa Touch类库的支持。让Cocoa Touch处理所有的UI重活,开发者的应用程序才能够专注

于单个任务的完成。结果是得到简洁的代码,以及对应用程序所带来的价值的专注。 Cocoa Touch让开发者能构建带有精良外观和感觉的应用程序,与苹果公司开发的应用程

序风格一致。要记住,苹果公司必须审核你的应用程序。苹果公司判断应用程序时基于应用

程序的外观、操作,甚至内容。使用Cocoa Touch有助于开发者更加接近由苹果公司原生应用

程序树立的高设计标准。 在开始构建应用程序时,确保阅读过苹果公司的“iOS用户界面指南”(iOS Human Interface

Guidelines),你能在Xcode文档的“User Interface”组中获得该文章,或者登录网址https://developer.apple.com/appstore/guidelines.html。还要通读一下注册iTunes Connect账号时签订的

法律协议。不遵守苹果公司的规定极其容易导致应用程序被App Store拒绝。

1.3 测试应用程序:模拟器和设备

一台真实的iPhone、iPad或iPod touch设备是SDK的重要部分。在设备上测试是至关重要

的。虽然iOS模拟器简单方便,但它不同于设备。你希望自己的应用程序能够运行在某些或

全部的iOS设备上,因此很重要的一点是,让应用程序能在原生环境中以最佳状态运行。一

台iOS设备本身就是开发者所需的完全纯正的、不掺水的测试平台。 苹果公司通常建议将某个开发设备专用于开发,而不用于做其他事。这点在事实上却是

很随意的。不同于iOS的早期测试版本,正式发布版本的iOS已证明是足够稳定的,开发者可

以拿自己的设备同时用于开发和日常任务,包括用iPhone拨打电话。最好的情况依然是手头

上有多余的开发组件,专用于开发,但是如果缺少可用设备,或许要使用主要的那台iPhone做开发;只是要注意风险,虽然这些风险是非常小的。要意识到,作为开发者计划的成员,

就已经与苹果公司签署了保密协议(Non-Disclosure Agreement,NDA)。要注意不小心向其他

人展示苹果保密的预发行版本的行为。 用作开发的设备必须先在Xcode的Organizer中设定。Organizer允许你向苹果公司注册自

己的设备,而不用在Provisioning Portal中输入设备的信息,在第15章“部署应用程序”中,

给出了详细的操作步骤。 开发时,很重要的一点是在尽可能多的iOS平台上进行测试。要意识到:真实的iOS平台

的差异性存在于每个型号的iPhone、iPad和iPod touch上。例如,有两种型号的5代iPod touch配备的是前后摄像头,还有一种仅配备前置摄像头。第二代的iPad和早期的一代iPad mini没有Retina显示屏。iPhone设备都有摄像头,而iPod touch直到第4代才有摄像头。某些特定的iPad型号和iPhone型号提供GPS技术;其他的型号却没有。在本章后面的内容中,讨论了主要的

平台设备特性和某些设备的差异性。

Page 28: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

8

注意:

iOS 开发者购买开发设备并没有折扣。开发者需全价购买新设备,并且购买附带运营

商接入的 iPhone 和 iPad 设备,不存在补贴价格。如果购买二手和翻新的设备,可以省下

一大笔钱。在不同的国家和其他因素影响下,你或许能从税收中扣除设备成本。

1.3.1 模拟器的局限

基于Mac的模拟器在每次发布时都不断对之前的技术进行提升。这意味着,模拟器上有

许多真实存在的局限是开发者必须考虑的。从软件兼容性到硬件,模拟器能接近但并不能与

真实的设备性能一样。 模拟器使用了Mac的许多框架和库,它们提供了一些在iPhone或其他iOS设备上实际不存

在的特性。在模拟器上,看上去运行得完全没问题或完全调试好的应用程序,会因为iOS硬件的内存或性能局限,在设备上运行时可能出现无响应或崩溃的情况。如今,即使是最小内

存的Mac电脑也配备了4GB的RAM内存,然而三代的iPad仅有1GB的RAM内存。如果在应用

程序构建时,开发者只选中支持更新版本的ARM架构,那么指令集的不同也可能导致应用程

序在旧的设备上崩溃。开发者不能仅仅通过模拟器,就调试好每个应用程序的所有问题,更

无法确保应用程序在iOS设备上运行时一个bug也没有。 模拟器还缺乏很多硬件功能。开发者无法使用模拟器测试板载摄像头,也不能获得加速

度传感器和陀螺仪的反馈信息。虽然模拟器可以通过瞬间震动传感器(sudden motion sensor)从Mac电脑获取加速度传感器的数据(如果Mac板载上配备了该传感器的话,虽然通常情况下,

笔记本电脑都会带这个感应器),但Mac上的读数与iOS设备上的读数不同,而且也不适合开

发和测试。模拟器也不能实现摇晃和提供多点触摸输入(至少不能提供除标准的“捏合”(pinch)之外的手势)。

注意:

Google Code 上开源的加速度传感器-模拟器项目提供了一个 iPhone 应用程序,该应用

程序可以发送加速度传感器数据到模拟器上,允许你开发和调试那些原本需要加速度传感

器输入的应用程序。在 App Store 上出售的 iSimulate 应用程序就是一款类似的商业产品。 从软件的角度看,在模拟器上无法获得基本的钥匙串安全系统,开发者也无法注册应用

程序以接收推送。这些功能的缺失意味着某些特定类型的项目,只有在iPhone和其他iOS设备

上运行时,才能进行适当的调试。 模拟器与设备的另一个区别在于音频系统。模拟器上并未实现音频会话结构,这避免了

让模拟器的工作太过复杂的情况发生。即使某些模拟器确实能模仿iOS API的特性,开发者也

能找到两者在行为上的差异,因为模拟器是基于Mac OS X的Cocoa框架。有时候你也会遇到

另一方面的问题:某些函数调用在模拟器上无法正常工作,而在设备上又能工作正常。例如:

在进行存储或获取某些文件的操作时,模拟器通常是不区分大小写的(取决于Mac电脑的配置

Page 29: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

9

方式),但iOS却是区分大小的。 这并不是说模拟器在测试和开发中是不重要的。在模拟器上测试项目又快速又简单,通

常比将编译好的应用程序安装到iOS设备上更加快捷。模拟器允许开发者旋转虚拟设备以测

试屏幕方向改变、生成模拟的内存警告,并能模拟用户接到电话的UI状况。在模拟器上测试

文本处理也更加容易,因为开发者可以直接使用自己电脑的键盘,而不用为系统连接外部的

蓝牙键盘,并且开发者能够从本地文件中拷贝与粘贴;这简化了重复的文本输入操作。例如,

在联网时,可以简化输入应用程序的账户名和密码的操作。 模拟器的另一个闪光点是本地化(localization)。也就是你将在第5章所学的“本地化”,为

应用程序切换语言非常简单,只需要在启动模拟器时使用正确的标记(flag)即可。 总而言之,模拟器提供的是折中方案:开发者得到了许多测试的便捷性,但还是不能跳

过真实设备测试。

注意: 模拟器支持视频输出(Video Out)的模拟。虽然实际过程中并没有产生视频输出,但模

拟器能模仿开发者将匹配的线缆插到(不存在的)接口中的行为。可以在一个浮动的模拟窗

口中查看“外放的”视频。苹果公司鼓励新应用程序使用 AirPlay 功能,鼓励通过 Apple TV给用户的 TV 发送文件,而非借助数据线发送文件。

1.3.2 接线

苹果公司正在远离iOS的接线(Tethering)需求,但直至本书编写时,苹果公司仍未引入无

接线开发方法。现在,所有交互测试都需要使用USB线完成。苹果公司还未提供开发时的无

线传输,也未提供调试或监控应用程序的办法。这意味着几乎所有的开发工作都要通过标准

的iPhone USB线,有线地进行。 在调试有线设备时,应将各种东西放置好,以减少意外断开USB线的情况。一旦断开,

开发者就丢失了整个调试会话,包括所有的交互式调试、控制台和屏幕截图功能。 可以为iPhone或iPod touch购买一个好的第三方底座(dock),也许iPad也需要一个。寻找一

个能连接USB线,并能以舒服的角度支撑触摸屏的支架。更好的底座还能支持垂直或水平两

个方向。iPad可以在苹果公司的底座上使用,然而只能竖着放。另外,苹果公司的折叠皮套

也能支持两个方向。 插上USB线时,应该总是直接将设备连接到Mac电脑的端口。当使用USB集线器时,应

该将集线器连接到支持USB 2.0及其以上标准的、带电的系统端口。大多数当代显示器,包括

苹果公司的大显示器,都有内置的带电源的USB端口,但开发者可先确认它的价格。 在iPad上,如果USB连接无法提供足够的电力给设备充电,可以在测试间隙取下设备,

使用自带的10瓦电源适配器直接在插座上充电。有些USB端口能够提供足够的电量给iPad充电,但这比较少见。

注意:

测试那些有视频输出的应用程序时,开发者可以使用苹果品牌的分线缆和复合线缆,

也可以使用 HDMI 数字转换器。这些数据线不仅能实现视频输出,还能提供 USB 连线,

Page 30: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

10

在运行应用程序的同时,允许开发者进行有线连接。苹果品牌的 VGA 线缆并不提供此功

能,因为使用 VGA 输出不能连线,所以开发者必须将测试输出重定向到屏幕或文件。此

外,在另一台设备上展示应用程序的常见方法是通过AirPlay屏幕镜像软件。购买Apple TV,

用于测试某个应用程序是否能很好地与 AirPlay 良好运作,这是个好主意。此外,相比之

下,这也比给为原生的 30 针接口和更新版的闪电(Lighting)接口购买适配器线更省钱。

1.3.3 对 iOS 设备的考量

为iPhone和iPad这样的移动平台设计应用程序,不同于为电脑(或笔记本电脑)设计应用程

序。需要额外考虑许多因素,例如存储大小、交互方法和电池使用时间。在创建应用程序时,

存储的限制、更小的屏幕、不同的交互方式、电源消耗都是非常重要的设计要素。 在iPhone上,开发者针对的是小巧的触屏,且电池使用时间有限的情况来进行设计。这

不同于有着大屏幕、鼠标或触摸板,日常中总是连接交流电源的桌面设备。设备平台特性会

塑造和引导开发过程。幸运的是,苹果公司已经完成了一项不可思议的工作,通过对iOS的存储大小、交互控件和有限的电池使用时间进行均衡与考量,设计了一个极富灵活性的平台。

1. 对存储的考量

iPhone拥有强大且精巧、基于OS X的系统安装文件。虽然整个iOS系统占用的空间不过

几百兆——相比时下庞大的操作系统安装文件,这个大小几乎不算什么——但iOS安装文件还

是提供了大量的框架库。这些预编译的例程,允许iPhone用户运行各种丰富多彩的应用程序,

从电话到音频回放,从电子邮件到网页浏览。iPhone所提供的编程支持,足够让开发者在创

建出灵活界面的同时,削减系统文件的大小以适应紧张有限的内存。 许多现代设备都配备了至少16GB的板载闪存,有些设备甚至配备了大得多的存储。有些

运行iOS 7或更高版本的旧设备仅有4GB存储空间。虽然应用程序的大小是有限制的(参考下

文的“注意:应用程序大小”),但是数据存储空间是足够大的。话虽这么说,但要注意的是,

用户能够查看应用程序耗费的空间大小,并有可能删除那些更加耗费空间的应用程序。

注意:应用程序大小 每个应用程序都被限制最大不能超过 2GB。据作者所知,没有哪个应用程序实际上有

那么大,虽然许多导航软件刷新了部署文件大小的记录,如 Navigon(1.5GB)和 Tom Tom(1.4GB)。目前苹果公司规定,超过 50MB 的应用程序只能通过 Wi-Fi 下载。这个带宽

是在苹果公司发布新的 iPad 设备,并允许开发者发布能同时运行在两个平台上的通用应用

程序(universal application)时定下来的。当用户要下载一个超过 50MB 大小的媒体密集型应

用程序时,苹果公司的无线传输限制(over-the-air restriction)有益于降低手机数据负荷,并

缓解用户等待长时间下载的痛苦。因此,50MB 的大小限制也是重要的设计考量。将应用

程序大小限制在 50MB 的红线以下,能够让移动用户产生购买应用程序的冲动,增加应用

程序潜在的用户基数。可以查阅 iTunes Connect 指南,了解最新的应用程序大小限制。

Page 31: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

11

2. 对数据访问的考量

每个iOS应用程序即为一个沙盒。也就是说,应用程序存在于文件系统内一块被严格管

理的内存中。你的应用程序不能直接访问其他的应用程序、某些特定数据和特定的文件夹。

除此之外,这些限制还规定,访问系统内置的应用程序数据时要使用系统API,这些内置的

应用程序指iTunes库、日历(calendar)、照片(photos)、定位服务、通知、提醒和内置的社交服

务(如Facebook和Twitter)。 然而,当iOS设备连接到网络时,你的应用程序能够访问任何通过无线免费获得的数

据——包括应用程序的任何iCloud文件。你的应用程序也能访问存储在系统共享的剪贴板上

的数据,以及通过文件交互控制器(document interaction controller)共享的数据,文件交互控制

器提供了有限的共享应用程序之间文件数据的方法。那些专门生产数据和下载数据的应用程

序,能够将文件数据发送到支持浏览和查看这些数据的应用程序。这种情况下,数据能从源

应用程序被完整地拷贝到目标应用程序的沙盒中。

3. 对内存的考量

在iOS上,内存管理至关重要。苹果公司还未启用iOS上磁盘交换的虚拟内存功能。如果

内存用完了,iOS会关闭你的应用程序;随机的崩溃或许不是你所期待的用户体验。由于没

有磁盘交换文件的内存功能,开发者必须仔细管理内存需求,并防止应用程序一次性占用太

多内存,应用程序很可能被iOS终止,开发者应为这种情况做好准备。开发者也必须考虑应

用程序使用的资源类型。太多的高分辨率的图片和高质量的音频文件会让应用程序进入被

iOS自动终结的危险区。 iOS框架中的许多地方都会将应用程序中的图片数据缓存起来,从而加速渲染,提高应

用程序的性能。这些缓存策略是以更大的内存占用为代价的,此外,在Retina的设备上,如

果使用不当,这些缓存策略会给应用程序带来更多的内存压力。第14章讲到了使用Instruments测量工具检测应用程序的哪个部分消耗内存过多,如何定位和解决这些问题的技巧,也讲到

了使用调试内存计量(debug memory gauge),检测应用程序是否以及何时会临近内存危险区的

便捷方法。

4. 对交互的考量

对于iPhone和iPod touch,没有如鼠标一样的物理输入设备,提供的是小屏幕上的交互方

式,但这并不意味着你的应用程序没法实现交互的灵活性。通过使用多点触摸(multi-touch)和板载加速度传感器,可以构建超出期望的UI界面,并引进富有创意的交互方式。iPhone的触屏技术意味着,借助比手里屏幕还要大得多的虚拟屏幕,你能设计出带有文本输入和指针

控制功能的应用程序。

注意: 几乎所有的 iOS 设备都支持外接键盘。可以将蓝牙和 USB 键盘连接到 iOS 设备进行

输入。只有一小部分运行 iOS 3.2 之前版本的设备没有外接键盘功能。

Page 32: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

12

除了触摸屏,用户与应用程序交互的方式有:自动更正的屏幕键盘、内置的麦克风(除了

过时的第一代iPod touch之外,所有的iOS设备都有内置的麦克风),以及能侦测当前屏幕方向

和方向变化的加速度传感器。 在设计文本输入功能时,开发者应寻找能使用户更加简单地操作的办法,例如将过长的

输入拆分为更短的文本输入框(text field)或者使用自动补全功能。针对更长的文本,确保使用

支持滚动的文本框(text view)。最重要的一点是,不用外接键盘,直接测试应用程序界面,因

为大多数用户没有外接键盘。 你的设计应专注于容易单击的界面而非成为电脑桌面的模仿物。 记住,每次只使用一个概念窗口——这一点不像电脑应用程序,电脑应用程序能通过自

由的、更加灵活的多个窗口显示系统。

注意: iPhone 屏幕一次最多能支持 5 个点触摸。iPad 屏幕一次能支持多达 11 个点的触摸。因

为有更大的屏幕,iPad 引入了多手交互(multihand interaction),并能以 iPhone 不能实现的方

式进行游戏开发,尤其是在玩游戏时,允许两个人共享同一块屏幕。虚拟乐器就是一款受

益于 iPad 多手指交互功能的应用程序。在本书写作时,苹果公司还没有具体指明 iPad 上

一次性所能识别的最大触摸数,但实践证明,目前仍然是 11 个点,参见

http://mattgemmell.com/ 2010/05/09/iPad-multi-touch/。

5. 对能耗的考量

对于移动平台,明智地使用电池是任何设计都要考虑的一点。苹果公司的SDK特性能帮

助开发者设计出只占用有限CPU的应用程序,并且避免电池消耗得太快。明智之举是采用某

些技术(例如,在使用时适当地暂停CPU)让应用程序能在iPhone上良好地运行,并能防止软件

将用户口袋烫出洞来(从过去的情况来看,有时出现这样的状况几乎是毫不夸张的)。有些应

用程序在运行时,散出的热量如此之高,让手机如烫手山芋,并且电池也很快就被耗掉。相

机应用就是经典示例。 严重消耗电池电量的应用程序有:相机应用;通信,尤其是通过电话网络进行通信;使

用GPS硬件而非Wi-Fi的三角测量实现高精确的定位服务。 每次新一代的iOS设备都会提升电池的使用时间。即便如此,在开发应用程序时,你还

是应该继续将能耗列入考虑范围之内。

6. 对应用程序的考量

有了iOS多任务功能,应用程序允许自身实现如下行为: • 两次使用之间完全暂停(此为默认行为) • 用一小段备用的后台运行时间进行暂停 • 再次被使用前完全退出 • 运行一小段时间以完成持续的任务 • 当其他应用程序开始运行时,创建后台任务继续运行

Page 33: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

13

iOS内置了对后台运行任务的支持,包括播放音乐和其他音频、收集定位数据和使用VoIP电话通信。这些应用程序实际上是事件驱动的,而不是作为简单的后台驻留应用程序进行。

应用程序会周期性地被iOS唤醒以响应新的事件,从而允许应用程序响应那些来自音频、位

置和VoIP的更新。 只有当前的应用程序能够更新UI,因此苹果公司支持从服务器推送数据。通过使用推送

通知(Push Notification),将离线操作发送到专用的、基于Web的服务器上,借助服务器一直运

行的特性,从而限制设备上的处理需求。注册过的服务器能够将badge的数量和消息推送给用

户,提示用户在服务器上有新数据在等待查看。推送通知能允许用户启动应用程序或者让应

用程序进入前台,同时还能传递少量的可选数据。 还有一种特别的通知,能赋予应用程序一些后台执行的时间,以更新变化的内容。即使

不使用通知功能,也可以要求系统执行常规的后台处理回调函数。这两个机制能够在用户将

应用程序带入前台之前,实现应用程序的更新。 此外,应用程序之间可以传递控制权,如通过传递数据(使用文件交互控制器,document

interaction controller)和打开自定义的URL模式。 苹果公司十分鼓励开发者限制每个应用程序所用的蜂窝数据流量,而运营商对数据使用

情况进行计量的趋势,以及从整体上不采取不受限的数据套餐的动态,强化了该需求。被认

为会消耗太多蜂窝带宽的应用程序可能被App Store拒绝或下架。如果应用程序强烈依赖于流

量,那么可能需要限定应用程序使用的Wi-Fi流量大小。 几乎所有的设备家族都带有Wi-Fi,大多数为802.11n版本。带有蜂窝连接的设备中,许

多至少为4G版(5.8Mbps HSUPA),而LTE通常是新设备的最低速率。

注意: 根据 iPhone 服务条款(iPhone Terms of Service),开发者提交到 App Store 的应用程序不

可以使用 Cocoa Touch 的插件架构。可以构建静态库,在编译时加进去,但是不能使用任

何会在运行时能连接到任意代码的编程解决方案。这意味着应用不能从服务器上下载新的

或替代的代码。 这意味着 bug 修复发布版本必须并且只能是完整的应用程序发布,这同时也意味着通

过应用程序内购买所得额外代码特性必须随应用程序一起发布。

7. 对用户行为的考量

尽管这不是一个基于物理设备的考虑事项,但要考虑iPhone用户零散的处理手机应用程

序这一特性。通常,他们进入一个应用程序,用它完成预定的需求,然后很快离开。设备的

手持性质意味着,必须基于很短的交互周期进行应用程序设计,并且为应用程序将会被打断

的情况做好准备,比如接到电话或者将手机塞回口袋、钱包或背包。 要使应用程序保持上次的最新状态并能快速载入,以重现用户上次运行应用程序时执行

的操作。这或许需要应用程序员勤奋努力,但为了获得好的用户满意度,投入时间是值得的。

苹果公司确实提供了应用程序状态恢复的API,但这超出了本书涵盖的范围。要获取更多的

信息,可以从Xcode附带的文档中,从《iOS应用程序开发指南》(iOS App Programming Guide)

Page 34: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

14

的“应用程序状态的保存与恢复”这一章开始阅读。

1.4 理解设备型号间的差异

谈到应用程序开发,许多iOS应用程序从来不需要考虑应用程序所运行的平台。多数应

用程序只依赖显示屏和触摸输入。这样的应用程序能安全部署到当前系列的所有iOS设备上;

它们不需要特殊编程,也不需要考虑所运行的平台。 然而,真正的平台差异还是存在的。最明显的差异就是iPhone/iPod touch/iPad的屏幕尺寸

存在差异。其他差异是基于功能特性的,例如传感器类型、是否配备蜂窝网络,以及一些其

他的特性。 这些差异会影响你的一些决定,比如如何让App Store销售你的软件,以及最开始该如何

设计这个软件。你应该只将应用程序部署在iPhone上,还是只部署在iPad上?还是同时部署

在iPhone、iPad,以及第二代和最新的iPod touch上?或者是否要针对这些平台一一部署?可

以通过API和其他技术,找出给定的设备上有哪些特定的功能,甚至可以启用或禁用所开发

的应用程序的部分功能。接下来将讲述开发者所要考虑的某些问题。

1.4.1 屏幕尺寸

最明显的差异,即为iPad系列相比iPhone或iPod touch设备的屏幕可用空间大小不同。iPad拥有大到1024×768的分辨率,从而可以呈现更多的内容。iPhone和iPod touch有两种显示尺寸:

早期设备使用的3.5英寸屏幕的分辨率是480×320,而更新的4英寸屏幕的分辨率568×320。 注意上述分辨率的单位为点,而不是像素。现在大多数苹果设备使用的是拥有更高分辨

率的Retina屏幕,不仅可用的像素翻倍,并且能更好地匹配人类视觉。幸运的是,你不需要

关心设备是480×320像素(非Retina显示屏)还是960×640像素(Retina显示屏),你都能以点为单

位编程。对美工来说,Xcode简化了针对不同分辨率配置相应图片的过程,在运行时,系统

能够自动选择合适的图片。 《苹果人机交互指南》的iPad版本与iPhone/iPod touch的版本也存在差异。需要针对iPad

设备开发这种情况,采用创建统一界面的设计方式,而非分阶段、分屏幕进行设计,这种设

计方式针对更小屏幕的设备,比如早期的iPhone和iPod touch设备。依赖iPad提供的更大屏幕

的应用程序,或许不太好移植到屏幕更小的设备上。 尽管较新的iPhone和iPod touch设备上的Retina显示屏看起来很棒,但屏幕尺寸要么是对

角线3.5英寸,要么是4英寸。这么小的尺寸,再结合人类的手和指头的实际大小,使得这些

设备无法提供与iPad相同的用户交互体验。只是,最新设备的交互指南还停留在早期的iPhone和iPod touch设备上。

1.4.2 摄像头

大多数应用程序可假定所运行的设备上至少有一个摄像头。大多数情况下,设备会有前

置和后置摄像头,但是明智之举是在运行时检查一下。虽然一些特别早期的设备没有摄像头

(早期的iPod touch和第一代iPad),但这些设备只占市场上非常小的比例,并且它们都不能运

Page 35: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

15

行iOS 7。还有些设备只有后置摄像头或只有前置摄像头,例如16GB版的第5代iPod touch属于

后者,只配备前置摄像头。 摄像头是很有用的。可以使用摄像头进行拍照并发送到Flicker或Twitter。还可以使用摄

像头抓取图像、进行直接操作、增强真实感等。iOS SDK提供有内置的图像选择器,允许用

户访问摄像头,另外还提供了方法以捕获静态图像、拍摄视频、播放电影和流媒体内容。

1.4.3 音频

所有iOS设备都有耳机插孔,而且除最古老的设备之外,都有扬声器,麦克风的配备情

况也如此。SDK提供了捕获与回放音频的办法。 麦克风和扬声器还可以用于辅助功能特性(accessibility feature),例如VoiceOver屏幕阅读。

可以将描述文字构建到图形用户界面(GUI)的元素中,让应用程序支持VoiceOver,从而在针

对视觉不便的最终用户时,应用程序的界面能够实现界面语言描述。

1.4.4 电话通信

这点似乎太过明显,不值得一说。但是iPhone的电话通信系统,不仅可接打电话,还可

以收发SMS短信,并会在电话拨进时中断应用程序。当然,在iPhone、iPad和iPod touch平台

上,用户可以根据自己的需求,在任意时刻暂停应用程序;但只有在iPhone上,才由系统强

行处理,而不是由用户选择状态切换。 除了电话拨入事件会挂起应用程序之外,用户还可以在打电话时打开应用程序。这种情

况下,iOS添加有特殊的顶部工具栏以标识电话状态。这个工具栏存在打开和打开后又被关

闭这两种情况,确保针对这两种情况测试界面变化。开发者可以通过模拟器内的选项设置,

实现“切换呼叫状态栏(in-call status bar)”的开启和关闭。 要考虑到,不同类型的打断会如何影响应用程序。重要的一点是:在设计应用程序时,

要留意所有可能的应用程序出口。要意识到,未必是用户做出离开应用程序的决定,尤其是

在iPhone上。使用音频的应用程序要特别注意在电话打断应用程序之后恢复正确的状态。 电话通信操作造成的另一个后果是,在iPhone上运行的后台应用程序比iPod touch和iPad更

多,甚至比带蜂窝数据功能的iPad都要多。这些进程确实减少了可用内存的数量,尽管对现代

设备来说,这种效果很小。话虽这么说,但还是有必要在启用蜂窝的设备上测试应用程序。

1.4.5 Core Location 和 Core Motion 之间的差异

Core Location基于三种不同的机制,在某个给定平台上,这三种机制的每一种都不一定

配备,可能可用,也可能不可用。这些机制是由给定设备的主板能力决定的。Wi-Fi定位机制

通过扫描本地路由,并且使用其MAC地址来检索中央位置数据库,该机制在所有的iPhone、iPad和iPod touch平台上都免费可用。

然而,蜂窝定位依赖于天线,只有在iPhone以及配置了相应功能的iPad型号上才有。这

种技术使用当地的蜂窝信号塔进行三角定位,而这些信号塔的位置在电信公司安装它们时就

已精确定位了。

Page 36: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

16

最后一种,也是最精确的方式是GPS定位,依赖于配套的硬件。大多数现代的iPhone和iPad配备了该硬件,不过在本书写作时,iPod touch还没有配备此硬件。可以使用内置的方法调用

来检查此硬件是否存在。 第三代iPhone 3GS引入了一种内置的罗盘(通过磁力计来实现)以及Core Location API来加

以支持。iPhone 4和iPad 2增加了三轴陀螺仪,其提供了倾斜(pitch)、旋转(roll)、偏航(yaw)三种反馈方式,都允许使用Core Motion框架进行数据请求。最新的iPhone和iPad设备同时有罗

盘和陀螺仪。在本书写作时,最新的iPod touch只配备陀螺仪。

1.4.6 摇晃支持和接近

摇晃(vibration)可以为很多游戏增加触感反馈,但仅限于iPhone。iPad 和 iPod touch未提

供摇晃支持,同样它们也没有包含接近传感器(proximity sensor),该功能可以在接听电话过程

中,在用户将手机靠近耳朵时将屏幕清空。UIDevice类提供了直接获得接近传感器的当前状

态的方法。

1.4.7 处理器速度

现代的所有设备都带有苹果公司设计的高速ARM处理器。这款CPU使用大量的快速访问

的RAM执行代码。为了省电,有些设备让CPU以更低速率运行(降频),并且都具有暂停部分

硬件的功能。然而,有些更早期的设备配备的是相对更慢的处理器,以及少得多的执行空间,

其市场份额在不断减少。面向iOS 6或更新系统开发的应用程序,可以排除这些早期的设备。 重要的是,在定位的设备类型中,要选择有代表性的样本来运行自己的应用程序。确保

应用程序在客户所使用的设备上能很好地运行。如果计划支持4代之前的iPhone以及第一代

iPad,这一点尤其重要。 如果应用程序在旧一点的平台上运行时不怎么流畅,就该考虑提高代码效率。目前App

Store上没有可以让你忽略更早的设备版本的发布选项,不过将最低iOS版本设置为6.0或更高

版本可以自动排除大多数的早期设备。 通过某些网址可以了解到每个iOS版本的市场占有率。当有新版本发布时,可以查询一

些针对苹果公司的网站,例如以下网站: • MacOSRumors:www.macrumors.com • MacWorld:www.macworld.com • TUAW:www.tuaw.com 也可以查询数据分析和移动信息公司,但是可能要深入挖掘才能找到信息: • Canalys:www.canalys.com • Chitika:chitika.com • Flurry:www.flurry.com/index.html • Gartner:www.gartner.com/technology/home.jsp • IDC:www.idc.com 此外,应用程序开发者David Smith会定期更新他的应用程序所使用的iOS版本: http://david-smith.org/iOSversionstats/

Page 37: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

第 1 章 初识 iOS SDK

17

1.4.8 OpenGL ES

OpenGL ES提供了免版权费的用于2D和3D图形开发的跨平台API,并且是作为iOS SDK的一部分提供给开发者。目前,大多数设备都支持OpenGL ES 2.0,最新的设备还支持3.0版本。有些特别早的设备仅支持OpenGL ES 1.1,但是你不大可能再见到它们。

注意:

设备和特性就像是移动的靶子。苹果公司持续引入新的设备,并且对 iOS 进行修改。

当有新设备引入时,务必查询苹果公司的信息网页,特别是技术规范。对于新发布的 iOS,务必阅读发布说明。此外,还可以查看网络上的概述页面。一个很好的信息源是维基百科:

http://en.wikipedia.org/wiki/List_of_iOS_devices。

1.4.9 iOS

另一个明显差异是,在任意某个设备上运行的iOS版本也是不同的。iOS设备的用户很快

会更新到最新的发布版本。大多数设备从iOS 3升级到4,然后由4升级到5,并且由5升级到6,这个过程需要的时间相对很少。尽管有些型号的设备不能够升级到iOS 7,但是它们的市场占

有率在迅速缩小。 不同版本的iOS存在明显的功能差异。例如,除了新的外观,iOS 7还引入了UI Motion、

UI Dynamics以及Text Kit。这三者都提供了方法以增进应用程序与用户的关联。通常情况下,

开发的应用程序会支持当前版本以及上一版本——从当前来看,也就是iOS 6和iOS 7。要检

测某一特性是否可用,以及对这个特性的访问是否启用或关闭,都是非常简单的。如果使用

内置的UI元素创建同时可运行在iOS 6和iOS 7上的应用程序,虽然简简单单就能实现这些功

能,但最大的不同在于用户体验。 归根结底,要支持的版本应该取决于潜在客户正在使用的版本。如果他们都使用iOS 7

设备,就不需要支持iOS 6。本书主要介绍iOS 7,不过除了某些特殊的特性之外,所有的一

切都能在iOS 6上使用。此外,自动布局功能将在第4章介绍,使用它能够大大简化给不同iOS版本适配界面的工作。

注意:

从 iOS 4.0 SDK 开始,苹果公司扩展了 Objective-C 2.0,引入了代码块(Block)。代码块

是一种在 Scheme、Lisp、Ruby、Python 等语言中存在了数十年的技术,它允许开发者将行

为封装为对象,这样就可以用这些行为代替回调函数传入方法中。这种新特性将在第

13 章中进行讲解。 其他特性,例如字面量、更好的属性声明,以及快速枚举,都让 Objective-C 变得更加

强大。你在学习本书的过程中会使用所有这些特性。

Page 38: iOS开发完全上手 - Tsinghua · iOS开发完全上手 ——使用iOS 7和Xcode 5开发移动与平板应用 Maurice Sharp [美] Erica Sadun 著 Rod Strougo 定价: 张 杰

iOS 开发完全上手——使用 iOS 7 和 Xcode 5 开发移动与平板应用

18

1.5 小结

在这一章,你迈出了学习创建iOS应用程序的第一步。你已经下载并搭建了Xcode,并且

学习了有关设备和苹果开发者计划的基本知识。随着对本书其余部分的学习,你将继续在创

建iOS应用程序的世界里遨游。接下来的每一章都会聚焦开发中某一领域的重要技能。尽管

你对于这些知识领域可能不怎么熟悉,但本书会提供清晰的地图来引导你走下去。 在接下来的几章,你将学习Objective-C语言,并且使用Xcode创建第一个应用程序。到那

时,你将能继续扩展iOS开发的知识,包括用户界面元素、屏幕大小适配以及语言、性能调优、

调试和移植应用程序。准备好以后,翻开书的下一页,开始编写你的第一个iOS应用程序。