iPhone开发秘籍 (第2版)[试读]
本章介绍
iPhone和iPod touch为我们提供了创新性的移动平台,为这个平台编程可谓其乐无穷。它们是苹果公司手持式计算设备家族的第一批成员。尽管体型偏小,但它们运行的是最先进的OS X,并且具备内容丰富、种类繁多的SDK,通过它们你可以设计和实现各种应用程序。借助苹果公司的集成设计环境Xcode,你可以在项目中利用iPhone的多点触控界面和强大的内置特性。本章将探索SDK的组件和它所创建的产品:iPhone应用程序。你将了解苹果公司的各种iPhone开发人员计划,以及如何参与这些计划。还将探索iPhone应用程序的设计理念,以及如何组建应用程序。最后,学习如何建立你的程序凭证,从而使用该理念开... 查看全部[ 本章介绍 ]
1.1 iPhone开发人员计划
准备好开始iPhone编程了吗?准备看看这究竟是怎么回事了吗?苹果公司的iPhone开发人员计划的成员可直接使用苹果公司的iPhoneSDK(Software Development Kit,软件开发包)。苹果公司的iPhone开发人员计划一共有4个。这些计划包括免费在线计划、针对内部开发的有偿企业计划、允许开发人员将他们的产品提交到App Store的有偿标准计划以及一个特殊的大学计划(参见表1-1)。
表1-1 iPho...
查看全部[ 1.1 iPhone开发人员计划 ]
1.2 开始
无论你申请哪种计划,都必须有一台基于Intel的Mac机,该机应该运行最新版本的Mac OS X。另外,建议至少有一台,最好是多台iPhone和iPod touch,以便进行测试,确保应用程序在每种平台上都能正确运行,包括一些旧的装置,例如第一代iPhone和iPod touch。 申请付费计划时,通常有一定的延时。注册后,可能需要数周的时间来核准账户和出具发票。从交钱到获得高级特性,可能需要24~72小时。 注册iTunes Connect是为了通过App Store销售应用程序,但这一步还存在障碍。幸运的是,这个过程可以推迟到注册一个付费计划后完成。在建立App Store账户前,必须... 查看全部[ 1.2 开始 ]
1.3 理解型号差异
说到应用程序开发,很多iPhone应用程序从来不用考虑它们将在什么平台上运行。大多数程序只依赖于显示屏和触摸输入。你大可放心地将它们部署到目前所有的iPhone家族设备上,无需进行特别的编程,也不必关心它们在哪种平台上运行。 然而,实际平台之间仍存在差异。这些差异非常重要,并且值得注意。在决定如何告诉App Store帮助你销售软件以及在一开始如何设计软件时,这些差异有着重要的影响。应该将软件只部署到iPhone吗?部署到iPhone和第二代及以后的iPod touch?还是应该考虑使应用程序面向所有平台?下面是要考虑的一些问题。 1.3.1 摄像头 每个iPhone都带有一个摄像头,而... 查看全部[ 1.3 理解型号差异 ]
1.4 平台限制
在讨论iPhone之类的移动平台时,人们会非常关心存储、交互限制和电池寿命之类的问题。移动平台不能提供与桌面系统相同的磁盘空间。存储限制只是一个方面,界面和电量消耗也受到一定限制,所有这些严重制约了开发人员的能力。 使用iPhone,不能对大屏幕、鼠标、物理键盘,甚至物理常开A/C电源进行设计。但平台实体将指导开发人员进行开发。所幸的是,苹果公司竭力设计了一个新平台,该平台极尽所能地利用了其受限的存储、交互控制和电池寿命的灵活性。 1.4.1 存储限制 iPhone提供强大但简洁的OS X安装。虽然整个iPhone OS文件不过是数百兆字节大小(对于如今的操作系统安装来说简直是微不足道)... 查看全部[ 1.4 平台限制 ]
1.5 SDK限制
你可能已经预料到,构建iPhone应用程序与构建Macintosh应用程序类似,两个平台都运行OS X。需要使用Objective-C 2.0开发代码。通过链接到一个框架分类进行编译。换句话说,iPhone SDK是受限的。下面是需要记住的一些要点。 ·垃圾收集是MIA并且可能始终如此。在iPhone中,需要由你自己负责保留和释放内存中的对象。对于iPhone不提供垃圾收集,可以从两个方面解释。首先,像iPhone这样的受限移动平台要求精准的性能特征,特别是对于游戏之类的处理器密集型应用程序更是如此。垃圾收集给性能增加了不可预测的因素,它在清理内存时必须冻结线程。其次,有限的内存不允许以正常... 查看全部[ 1.5 SDK限制 ]
1.6 使用开发人员门户
iPhone开发人员计划门户包含为iPhone开发设置系统所需的所有工具。它的网址是http://developer. apple.com/iphone/manage/overview/index.action,但是,除非你已经注册了两种付费iPhone开发人员计划之一,否则无法访问它。在这里,可以建立开发团队,获得证书,注册开发设备和应用程序标识符,以及构建配置文件,以便适当地对应用程序进行签名。 由于细节可能随时更改,因此在此只作大局观的概述。即使苹果修改了任何细节,你仍然知道重要的里程碑是什么,并作相应的调整。图1-1显示这个过程的关键点。 查看全部[ 1.6 使用开发人员门户 ]
1.7 组建iPhone项目
iPhone Xcode项目包含各种不同的标准和自定义组件。图1-2显示了一个最简单的项目。项目元素包括源代码、链接框架和媒体(如图像和音频文件)。Xcode编译源代码,将其链接到框架,然后构建适合iPhone安装的应用程序束。它将媒体添加到此应用程序束中,支持程序在iPhone上运行时访问这些媒体。
图1-2 Xcode项目整合了源代码、框架和媒体,这形成了iPhone应用程序的基础...
查看全部[ 1.7 组建iPhone项目 ]
1.8 iPhone应用程序组件
编译后的iPhone应用程序以应用程序束的形式存在。和Macintosh类似,这些应用程序束就是采用.app扩展名的文件夹。程序的内容和资源位于此文件夹中,包括编译后的可执行文件、支持媒体(如图像和音频)和一些向OS描述应用程序的特殊文件。操作系统将文件夹视为一个应用程序束。 1.8.1 应用程序文件夹层次结构 iPhone束很简单。与Mac不同,iPhone束不使用Contents和Resources文件夹来保存数据,也不使用MacOS文件夹来保存可执行文件。所有资源都位于顶层文件夹中。例如,Xcode并未将语言支持.lproj文件夹置于Contents/Resources/中,而是将它... 查看全部[ 1.8 iPhone应用程序组件 ]
1.9 编程范例
iPhone编程中心采用两种重要的范例:面向对象编程和模型—视图—控制器(MVC)设计模式。iPhone SDK在设计时考虑了在开发人员构建的程序中支持这些概念。为此,它引入了委托(控制器)、数据源方法(模型)和定制的视图类(视图)。下面简要介绍本书所使用的一些重要的iPhone/Cocoa Touch设计术语。 1.9.1 面向对象编程 Objective-C在很大程度上基于Smalltalk,后者是历史上最为重要的一种面向对象的语言。面向对象编程使用封装和继承的概念来构建可重用的类,这些类使用已经发布的外部接口和私有的内部实现。应用程序将通过一些能够像乐高玩具一样整合在一起的具体类来实... 查看全部[ 1.9 编程范例 ]
1.10 小结
本章介绍了iPhone SDK、开发人员门户以及iPhone应用程序。你看到了如何选择开发人员计划,以及如何创建配置。本章探讨了典型的iPhone应用程序,从项目和源文件到应用程序产品,并介绍了影响开发的设计方面的限制。下面是本章的一些要点。 ·大多数开发人员最后都选择99美元/年的标准iPhone开发人员计划。这是最佳、最通用的计划,因为它允许在实际设备上进行测试,并且允许访问App Store。 ·每个iPhone和iPod touch平台之间都有显著的差别。应确保应用程序能理解这些差别,以提供最佳终端用户体验。 ·针对移动平台的开发不同于针对桌面系统的开发。牢记最重要的一点:手指大... 查看全部[ 1.10 小结 ]
本章介绍
Xcode和Interface Builder可以帮助你创建iPhone SDK的应用程序。本章介绍在项目中使用这些工具的基础知识。你将看到如何构建一个简单的Hello World项目,编译它并在模拟器中测试它,然后学习如何针对设备编译它,并将它部署到设备。你还将发现一些基本的调试工具,学习它们的用法,并获得关于方便的编译器指令的一些使用技巧。本章还将讨论如何将应用程序提交到App Store,以及通过临时部署进行发布。阅读完本章后,你就了解了创建应用程序的整个过程,并会从中学到有价值的技巧。... 查看全部[ 本章介绍 ]
2.1 创建新项目
冒然涉足SDK编程似乎令人生畏,但是请放心。Xcode让入门过程变得尽可能简单,它提了供预先配置的项目,在探索SDK时,你可以轻松地在这些项目的基础上进行修改。由于每个这样的项目都是完全可以运行的骨架,所以你需要做的只是添加一点自定义功能,使之成为自己的应用程序。 首先,启动Xcode,并选择File(文件)→New Project(Command-Shift-N)。 这时出现New Project template(新建项目模板)窗口(参见图2-1),在此窗口中选择一种应用程序模板作为起点。 这里提供了6种项目模板,以满足最常见的iPhone开发模式。这6种模板如下。 ·Naviga... 查看全部[ 2.1 创建新项目 ]
2.2 用模板构建Hello World应用程序
Xcode预先配置的模板为创建Hello World风格的示例应用程序提供了最简单的途径。在接下来的步骤中,创建一个新项目,编辑它使之显示Hello World,并在iPhone模拟器上运行它。在构建第一个Xcode项目时,你会发现一些关键的开发途径。 2.2.1 创建新项目 安装好iPhone SDK后,启动Xcode。关闭Xcode news(Xcode新闻)页面,该窗口是Xcode的欢迎窗口,提供诸如Create a new Xcode project(创建新的Xcode项目)之类的选项。除非在关闭该窗口前取消选择Show at Launch选项,否则该窗口会继续出现。 说明 如... 查看全部[ 2.2 用模板构建Hello World应用程序 ]
2.3 使用模拟器
借助iPhone SDK Simulator,可以在Macintosh上使用很多用户在实际设备上执行的操作来测试应用程序。由于Macintosh不是基于触摸的手持设备,所以必须使用菜单、快捷键和鼠标来通过模拟器执行这些任务。关于如何通过模拟器执行这些任务请参阅表2-1。
表2-1 与iPhone操作对应的模拟器操作...
查看全部[ 2.3 使用模拟器 ]
2.4 极简单的Hello World
在探索iPhone SDK时,本着Hello World的精神,知道如何构建简约的应用程序会有所帮助。也就是说,有必要知道如何完全从头开始来构建应用程序,即在没有5个源文件和2个界面文件的情况下构建。因此,下面展示一个非常基本的Hello World的构建过程,它与之前的Hello World例子中展示的UIViewController方法一致,但是只使用一个文件实现,没有.xib文件。 首先在Xcode中创建一个新项目,即选择File(文件)→New Project(新建项目)(Command-Shift-N)。选择Window-based Application(基于窗口的应用程序),将... 查看全部[ 2.4 极简单的Hello World ]
2.5 使用调试器
Xcode的集成调试器为iPhone应用程序开发提供了一个非常有用的工具。下面展示如何找到这个调试器,并介绍它在程序中的基本用法。在此过程中,你将发现如何设置断点,以及如何使用调试器控制台查看程序细节。这些步骤假定你使用刚才描述的第2版简化的Hello World例子,并且项目窗口已打开,并显示main.m文件。 2.5.1 设置断点 在Hello World项目的main.m文件中找到loadView方法。在Xcode窗口最左侧的边栏中,即label.text赋值语句的左边单击鼠标。这时出现一个蓝色的断点指示器(如图2-8所示)。深蓝色表示断点是活动的。单击一次使它不活动——断点变成浅蓝... 查看全部[ 2.5 使用调试器 ]
2.6 内存管理
iPhone没有提供垃圾收集机制。它依赖于一个引用计数的内存管理系统。这意味着开发人员必须控制何时创建对象、保留对象和从内存中释放对象。如果使用太多的内存,iPhone会警告应用程序委托和UIViewController。委托收到applicationDidReceiveMemoryWarning:回调,视图控制器收到didReceiveMemoryWarning。如果继续使用太多内存,iPhone将终止你的应用程序,使你的用户回到SpringBoard。正如苹果公司反复指出的那样,这也许不是你希望用户得到的用户体验,所以苹果公司拒绝接受你的应用程序进入App Store。 你必须在程序中小... 查看全部[ 2.6 内存管理 ]
2.7 秘诀:使用Instruments检测内存泄漏
在调优应用程序时,Instruments扮演着重要角色。它提供了一套工具,用于监控性能。通过它的泄漏检测,你可以跟踪、识别和解决程序中的内存泄漏问题。秘诀2-1显示了一个存在两处泄漏问题的应用程序:一处是用malloc()构建了一个字符串,但是没有调用相应的free(),另一处是本章前面展示的NSArray例子。 要看到Instruments的实际应用,首先需要加载秘诀2-1的示例项目。在Xcode中选择Run(运行)→Run with Performance Tool(使用性能工具运行)→Leaks(泄漏)。这将启动Instruments和模拟器。应用程序开始在模拟器中运行,Instrum... 查看全部[ 2.7 秘诀:使用Instruments检测内存泄漏 ]
2.8 秘诀:使用Instruments监视缓存对象的内存分配
可以通过模拟器的一个特性测试应用程序在低内存状况下如何响应。选择Hardware(硬件)→Simulate Memory Warning(模拟内存警告),发送对应用程序委托和视图控制器的调用,请求它们释放不需要的内存。用于实时查看内存分配的Instruments可以监视那些释放。它确保在遇到警告时,应用程序能妥善应对。借助Instruments,可以测试内存策略,例如本章前面讨论的缓存。 秘诀2-2创建一个基本的图像缓存。该图像缓存不是从Web检索数据,而是构建空的UIImage对象来模拟实际用例。当遇到内存警告时,缓存作出响应,即释放它的数据,如图2-13所示。 查看全部[ 2.8 秘诀:使用Instruments监视缓存对象的内存分配 ]
2.9 使用Clang静态分析器
LLVM/Clang static analyzer自动帮助检测Objective-C程序中的bug。它是一款非常棒的用于发现内存泄漏和其他问题的工具。从Xcode 3.2开始,可以直接从Xcode中运行该分析器。选择Build(构建)→Build and Analyze(构建并分析)(Command-Shift-A)。这时出现如图2-14所示的交互式屏幕,它将指导你发现所有可疑的泄漏以及其他潜在问题。
图2-14 Clang...
查看全部[ 2.9 使用Clang静态分析器 ]
2.10 针对iPhone进行构建
针对模拟器的构建和在模拟器中的测试到此为止。iPhone开发的最终目标是创建能够在实际设备上运行的应用程序。达成该目标的方式有3种:为开发而构建,为发布而构建,以及为临时发布而构建。这3种方式分别允许你在设备上进行本地测试,为App Store而构建,以及对在最多100台注册设备上运行的应用程序构建测试和审查版。第1章介绍了移动配置,并展示了如何在苹果的 iPhone开发人员计划门户中创建它们。现在,是时候应用它们,将程序部署到iPhone上了。 2.10.1 安装开发配置 至少拥有一个开发配置是iPhone部署的先决条件。所以,在进入下一步之前,应确保已经创建了一个通配开发配置,并通过将... 查看全部[ 2.10 针对iPhone进行构建 ]
2.11 从Xcode到iPhone:Organizer Interface
Xcode Organizer帮助管理你的开发设备。选择Window(窗口)→Organizer(组织器)(Control- Command-O)。该窗口(如图2-18所示)是开发计算机与iPhone或iPod测试床之间访问的控制中心。通过该窗口,可以添加和移除应用程序、查看midtest控制台结果、查看崩溃日志,以及捕捉测试应用程序时设备的屏幕截图。下面简述Organizer提供的主要功能。 查看全部[ 2.11 从Xcode到iPhone:Organizer Interface ]
2.12 使用编译器指令
Xcode指令向编译器发出命令,编译器可以检测正在为其构建的平台和固件。这使你可以定制应用程序,以便安全地利用平台或固件特有的特性。将#if语句添加到代码中,可以根据选项阻塞或公布一些功能。例如,为了检测代码是针对模拟器还是针对iPhone编译的,可以使用目标定义:TARGET_IPHONE_SIMULATOR和TARGET_OS_IPHONE。
...
查看全部[ 2.12 使用编译器指令 ]
2.13 针对发布进行构建
针对发布进行构建意味着为应用程序创建一个可以提交到苹果的App Store进行出售的版本。在考虑构建之前,应知道如何清除构建,如何创建发布配置,以及如何找到构建的产品。你需要针对App Store进行严格的编译。首先进行清除,然后使用预设发布配置进行编译,确保应用程序能够正确地上传。找到构建的应用程序,然后才能压缩和提交正确的文件。接下来的几个小节将阐述进行发布编译所需的技巧。 创建和编辑配置 在Xcode中,配置中存储着构建设置。配置中包含所有参数的预设值,所以只需选择一种配置,便可以针对设备或App Store进行编译。标准的Xcode项目提供Debug和Release配置。你可能还想... 查看全部[ 2.13 针对发布进行构建 ]
2.14 清除构建
清除构建可以确保项目的每个部分都从头开始重新编译。清除构建还可以确保项目构建包含当前版本的项目资产,包括图像和声音。可以通过删除项目文件夹中的bulid文件夹进行强制清除,也可以使用Xcode的内置实用工具。选择Build(构建)→Clean(清除)(Command-Shift-K)。如图2-22所示,Xcode提示选择是否清除依赖文件和预编译头文件。通常情况下,这样做没有害处。单击Clean(清除),等待Xcode完成工作。
图2-22 ...
查看全部[ 2.14 清除构建 ]
2.15 针对临时发布进行构建
苹果公司允许在App Store之外通过临时发布来发布应用程序。通过临时发布,可以将应用程序发送到最多100台注册设备,并使用一种特殊的移动配置运行那些应用程序,这种特殊移动配置允许应用程序在iPhone的FairPlay限制下执行。临时发布对于beta测试和将审查应用程序提交到新站点和杂志特别有用。 2.15.1 注册设备 临时发布首先是注册设备。使用iPhone开发人员计划门户将设备标识符(Program Portal, Devices)和名称添加到你的账户。可以直接从iPhone获得这些标识符(使用第9章中的UIDevice调用),也可以从Xcode的Organizer(从Summa... 查看全部[ 2.15 针对临时发布进行构建 ]
2.16 定制Xcode标识
按定义,Xcode将以下头文件构建到所有源代码中。双尖括号中的每一项是一个变量,是在代码创建时设置的。用户和组织名从Address Book(地址簿)中获取,它们对应于你的个人联系方式信息。这个联系方式的图标使用“me”标记,如图2-24所示。
...
查看全部[ 2.16 定制Xcode标识 ]
2.17 创建自定义Xcode模板
在Xcode中创建新项目时,程序让你选择一个模板。可以从iPhone和Mac OS X选项中进行选择,从任意数量的预先设计的程序骨架开始创建应用程序。对于iPhone,这些模板包括基于视图的应用程序和用OpenGL ES构建的应用程序。在Mac上,可以构建动态库、命令行实用工具和用Cocoa构建的应用程序等。 但是,有时候,你需要一次次地采用相同的步骤,根据自己特定的内部设计来定制项目,包括更新那个公司标识符。幸运的是,Xcode允许添加预先定制的用户模板,这样,你每次就可以从真正需要的而不是苹果公司提供的那些模板开始新项目。TinyPlay.com的Jay Abbott最先向我展示如何这样... 查看全部[ 2.17 创建自定义Xcode模板 ]
2.18 并排查看代码
当构建新的类时,并排打开头文件和方法文件会有所帮助。在Xcode中,无需在两个窗口之间来回切换,可以同时编辑两个窗口。为此,首先在一个标准编辑器中打开一个.m文件。 定位到编辑区的右上角,就在Ungrouped(取消分组)和Project(项目)按钮下方。在那里,可以在拐角处看到一些图标。拐角处的形状像一把锁,下方是一个分为两部分的正方形。将鼠标悬停在那个正方形上,确认工具提示显示Click to Split the Editor View(单击以分割编辑器视图)。 按住Option键,同时单击那个正方形。按Option键并单击将创建一个垂直分隔栏,而不是该按钮默认的水平分隔栏。屏幕分割后... 查看全部[ 2.18 并排查看代码 ]
2.19 小结
本章阐述了很多主题,依次介绍了如何创建、编译和调试Xcode项目。本章介绍了日常工作中要用到的大多数主要Xcode组件,以及生成和运行iPhone项目的很多不同方式。下面是本章的一些观点。 ·虽然Xcode提供了一些易用的模板,但是应将它们看作起点,而不是终点。你可以根据自己的需要定制和编辑项目,还可以将编辑后的项目转换为新的模板。 ·Interface Builder使布局视图变得非常方便。虽然从技术上讲,这和手动设计生成的方法调用和属性赋值是一样的,但是IB优美的GUI使那些设计任务变得可视化,受到了很多开发人员的欢迎。 ·学习使用Xcode的内部参考文档,这是成为iPhone开发人... 查看全部[ 2.19 小结 ]
书名: iPhone开发秘籍 (第2版)
作者: [美] Erica Sadun
出版社: 人民邮电出版社
原作名: The iPhone Developer’s Cookbook: Building Applications with the iPhone SDK 3.0
译者: 张彩霞 | 高颖 | 易磊
出版年: 2010-11
页数: 680
定价: 99.00元
装帧: 平装
丛书: 图灵程序设计丛书
ISBN: 9787115240019