ios开发指南:从零基础到App Store上架(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-20 05:48:21

点击下载

作者:关东升

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

ios开发指南:从零基础到App Store上架

ios开发指南:从零基础到App Store上架试读:

前言

北京时间2013年9月19日凌晨1点,苹果公司发布了最新的iOS 7。此次最大的变化是UI设计风格,苹果放弃了以前的拟物化设计,转而采用扁平化设计。《iOS开发指南:从零基础到 App Store上架》是在 iOS 7发布之前出版的,上市后得到了广大读者的认可,同时我们也得到很多读者的反馈,希望将这本书升级为iOS 7版本。经过几个月的努力,我们终于在2014年元旦之前将书稿更新完毕。

内容和组织结构

本书是我们团队编写的iOS系列图书之一,目的是使具有Objective-C基础的程序员通过学习本书,从零基础学习如何在App Store上发布一款应用。全书共4部分。

第一部分为基础篇,共13章内容,介绍了iOS的一些基础知识。

第1章介绍了iOS的开发背景以及本书约定。

第2章使用故事板技术创建了HelloWorld,同时讨论了iOS工程模板、应用的运行机制和生命周期、视图器的生命周期等,最后介绍了如何使用API帮助文档和官方案例。

第3章首先说明了视图和控件之间的关系以及应用界面的构建层次,然后介绍了标签、按钮、文本框和导航栏等基本控件,接着介绍了屏幕布局的内容以及一个较为复杂的控件——选择器,最后探讨了iOS中的集合视图。

第4章探讨了表视图的组成、表视图类的构成和表视图的分类,使读者对表视图有一个整体上的认识。接下来介绍了如何实现简单表视图和分节表视图,以及表视图中索引、搜索栏和分组的使用,然后讲解了如何对表视图单元格进行删除、插入、移动等操作,最后介绍了表视图UI设计模式方面的内容。

第5章讨论了如何判断应用是否需要一个导航功能,并且知道在什么情况下选择平铺导航、标签导航、树形结构导航,或者同时综合使用这3种导航模式。

第6章讨论了iOS开发中4种常用的设计模式,分别为单例模式、委托模式、观察者模式和MVC模式。在介绍每种设计模式时,我们按照问题提出、实现原理、应用案例的结构介绍了其适用情况、实现原理及其用法。

第7章首先介绍了iPhone和iPad设备使用场景上的差异,然后深入介绍了iPad专用API,包括UIPopoverController控制器和UISplitViewController控制器。

第8章重点介绍了iOS平台的分层架构设计。

第9章介绍了iOS 7中的文字排版和渲染引擎Text Kit,以及如何利用Text Kit技术实现文本图片混合排版,设置动态字体。

第10章介绍了设置和配置的概念,然后通过对二者差异的探讨,介绍了什么样的项目适合放在设置里,什么样的项目适合放在配置里。

第11章介绍了国际化概念、内容和目录结构,并详细阐述了文本信息、nib及故事板、资源文件的国际化。

第12章讨论了iOS本地数据持久化的问题。首先分析了数据存取的几种方式以及每种数据存取方式适合什么样的场景,然后分别举例介绍了每种存取方式的实现。

第13章首先介绍了访问通讯录所需要的框架,然后介绍了使用AddressBook框架如何读取联系人的信息,具体包括联系人记录、单值多值属性、图片属性的读取;接着介绍了如何使用该框架将联系人信息写入数据库,具体包括联系人的创建、修改和删除;最后介绍了如何使用AddressBook高级API实现选择联系人、显示和修改联系人以及创建联系人的操作。

第二部分为网络篇,共两章,介绍了iOS网络开发的相关知识。

第14章介绍了数据交换格式,其中 XML和 JSON是主要的方式。这一章重点介绍了 Web Service的访问以及ASIHTTPRequest框架。

第15章讨论了iOS中的定位服务技术,包括地理信息编码和反编码查询。之后介绍了iOS 6苹果地图的使用,包括了显示地图、在地图上添加标注以及跟踪用户位置的变化等。最后,介绍了程序外地图的使用,如何调用iOS6苹果地图和谷歌Web地图。

第三部分为进阶篇,共7章,主要介绍了iOS高级内容和商业思考等。

第16章介绍了从iOS 6升级到iOS 7带来的变化、遇到的困难以及解决的方法。

第17章介绍了iOS中的商业模式,其中的收费策略值得广大读者借鉴。此外,还介绍了植入广告和应用内购买的API,其中植入广告包括苹果自己的iAd和谷歌的AdMob广告。

第18章首先介绍了一些常用的调试工具、异常堆栈报告分析,接下来讲解了如何在真机上调试应用,最后分析了Xcode设备管理工具的用法。

第19章讨论了测试驱动的iOS开发,介绍了测试驱动开发流程。此外,还介绍了单元测试框架OCUnit、GHUnit和OCMock的用法。

第20章介绍了iOS中的性能优化方法,其中包括内存优化、资源文件优化、延迟加载、持久化优化、使用可重用对象、多线程以及程序编译参数等。

第21章介绍了如何使用Git进行代码版本控制,其中包括Git服务器的搭建、Git常用命令和协同开发。此外,还介绍了在Xcode中如何配置和使用Git工具。

第22章探讨了如何在App Store上发布应用,介绍了应用的发布流程以及应用审核不通过的一些常见原因。

第四部分为实战篇,共两章,从无到有地介绍了两个真实的iOS应用:MyNotes应用和2016里约热内卢奥运会应用。

第23章通过重构MyNotes应用,把MyNotes应用的数据由原来的本地存储变成云存储。在这个过程中,我们介绍了移动网络通信应用中分层架构设计的必要性和重要性,重点介绍了基于委托模式和观察者模式通知机制实现的分层架构设计。

第24章介绍了完整的iOS应用分析设计、编程、测试和发布过程,其中采用了敏捷开发方法。此外,该项目采用分层架构设计,这对于学习iOS架构是非常重要的。

书中并没有包括多媒体等知识,我们会在另外一本介绍iOS游戏开发的书中介绍,具体进展请读者关注我们智捷iOS课堂官方网站http://www.51work6.com。

本书网站

为了更好地为广大读者提供服务,我们专门为本书建立了一个网站 http://www.iosbook1.com,大家可以查看相关出版进度,并对书中内容发表评论,提出宝贵意见。

源代码

书中包括了100多个完整的案例项目源代码,大家可以到本书网站http://www.iosbook1.com下载,或者到图灵社区(www.iTuring.cn)本书主页免费注册下载。

勘误与支持

我们在网站http://www.iosbook1.com中建立了一个勘误专区,可以及时地把书中的问题、失误和纠正反馈给广大读者。如果你发现了任何问题,均可以在网上留言,也可以发送电子邮件到 eorient@sina.com,我们会在第一时间回复你。此外,你也可以通过新浪微博与我们联系,我的微博为@tony_关东升 。

致谢

在此感谢图灵的王军花责编给我们提供的宝贵意见,感谢智捷iOS课堂团队的李玉超和贾云龙参与内容讨论和审核,感谢赵大羽老师手绘了书中全部草图,并从专业的角度修改书中图片,力求更加真实完美地奉献给广大读者。此外,还要感谢我的家人容忍我的忙碌,以及对我的关心和照顾,使我能抽出这么多时间,投入全部精力专心编写此书。

由于时间仓促,书中难免存在不妥之处,请读者原谅。关东升2013年12月于北京第一部分基础篇第1章开篇综述

自从App Store上线以来,它创造了很多神话,给我们这些程序员提供了展示自己的舞台,给了我们创意的空间,给了我们创业的机会。下面让我们从这里开始iOS开发之旅吧。1.1 iOS概述

在本节中,我们将了解什么是iOS以及iOS 7有哪些新特性。1.1.1 iOS介绍

iOS的系统架构分为4层——Cocoa Touch层、Media层、Core Services层和Core OS层,相关内容可参见2.6.1节。

下面我们简要介绍一下iOS的一些功能,具体如下所示。

多点触摸和手势。触摸功能在iOS设备之前就被采用,但基本都是单点触摸,即只能用一个手指,而iOS设备能够感应多个手指的触摸。为了配合这种多点触摸,iOS上的触摸分为多种手势:触击、双击、滑动、长时间触击、轻拂、刷屏和手指合拢张开等。

统一的屏幕尺寸。目前,iOS屏幕尺寸有4套:iPhone和iPod touch是3.5英寸,iPhone 5和第5代iPod touch是4英寸,iPad是9.7英寸,iPad mini是7.9英寸。统一的屏幕尺寸给应用软件开发带来很多好处,开发人员可以不用关心屏幕尺寸适配的问题,从而把精力集中在其他方面。

高分辨率。iPhone 4S的屏幕分辨率是960×640,iPhone 5和第5代iPod touch的屏幕分辨率是1136×640,第1、2代iPad的屏幕分辨率是1024×768,第3代iPad的屏幕分辨率是2048×1536,而iPad mini的屏幕分辨率是1024×768。

重力加速计。iOS内置了重力加速计。有了重力加速计,用户能够玩很多有意思的游戏(如极品飞车,它可以把iPhone作为方向盘,通过重力加速计感应方向的变化)。此外,还有很多与重力加速计有关的应用软件,如水平尺应用等。

指南针。iOS内置了指南针设备。很多应用基于指南针,例如导航软件和地图应用软件。

蓝牙和Wi-Fi连接。iOS内置了蓝牙和Wi-Fi通信模块。iOS设备之间可以采用Wi-Fi互相连接,也可以采用蓝牙进行连接,很多基于局域网的游戏就是通过这个功能实现的。当然,也可以通过Wi-Fi上网,这可以节约用户的上网费用。此外,iOS还可以与电脑连接。1.1.2 iOS 7新特性

iOS的最新版本为iOS 7.0。苹果公司于北京时间2013年9月19日凌晨1点开放其正式版的下载,它支持iPhone 4S、iPhone 5、iPad 2、iPad 3、iPad mini、iPad mini 2和iPod touch 5等设备。据苹果发布的更新文档显示,iOS 7新增了多项功能,很多新特性或将成为将来的焦点。

现在我们先简要介绍一下iOS 7几个重要的变化。

UI设计风格。UI设计风格发生了巨大的变化,苹果放弃了以前的拟物化设计,转而采用扁平化设计。拟物化设计风格强调逼真纹理。扁平化设计风格强调简约、抽象,半透明、精致的视觉感受、流畅而逼真的动作带给用户清新、活力的体验。

视图动力学行为。它能够使界面中的元素像在真实的物理世界中一样运动起来,给用户逼真的视觉效果。

有点像游戏中的物理引擎。

Text Kit。它能够管理视图中的文字和排版。可以为段落、列和页中的文字定义不同的风格。

64位支持。它能够将应用编译成为支持64位设备运行的代码。这些设备有:iPhone 5S、iPad mini 2、iPad Air。

多任务的增强。在iOS 7中,后台多任务增加了两种新模型:提取模式(etch)和远程通知模式(remote-notification)。提取模式适合于应用从网络中定期下载新数据,下载操作可以定期地被唤醒或者启动以在后台进行下载。在远程通知模式下,安装有iOS 7的设备在接收到远程推送通知时,可以启动一个后台下载操作任务,而无需用户干预。

Sprite Kit游戏框架。Sprite Kit是苹果推出的2D游戏引擎,它意味着苹果要进入这一市场,Sprite Kit的使用有点类似于Cocos2d-iphone[1]游戏引擎 。

地图增强。苹果放弃了以前使用的谷歌地图,转而使用苹果自己的地图。MapKit框架本身没有变化,只是地图内容不再是谷歌地图。

AirDrop。能够与周围的设备进行通信,共享照片、文档、URL和少量数据。

应用间音频(Inter-App Audio)。应用间音频可以实现支持程序间的音频访问,即在同一台设备上不同的两个程序之间发送MIDI命令和音频流。

点对点连接(Peer-to-Peer Connectivity)。可以查找附近的设备,不需要通过互联网就可以直接与这些设备进行通信。该框架具有这样的特点:很容易创建多点会话,支持稳定、可靠和实时的数据传输。

此外,iOS 7还对已有的框架进行了不同程度的增强和删减。1.2 开发环境及开发工具

苹果公司于2008年3月6日发布了iPhone和iPod touch的应用程序开发包,其中包括Xcode开发工具、iPhone SDK和iPhone手机模拟器。第一个Beta版本是iPhone SDK 1.2b1(build 5A147p),发布后立即就能使用,但是同时推出的App Store所需要的固件更新直到2008年7月11日才发布。编写本书时,iOS SDK 7.0.4版本已经发布。

iOS开发工具主要是Xcode。自从Xcode 3.1发布以后,Xcode就成为iPhone软件开发工具包的开发环境。Xcode可以开发Mac OS X和iOS应用程序,其版本是与SDK相互对应的。例如,Xcode 3.2.5与iOS SDK 4.2对应,Xcode 4.1与iOS SDK 4.3对应,Xcode 4.2与iOS SDK 5对应,Xcode 4.5和Xcode 4.6与iOS SDK 6对应,Xcode 5与iOS SDK 7对应。

在Xcode 4.1之前,还有一个配套使用的工具Interface Builder,它是Xcode套件的一部分,用来设计窗体和视图,通过它可以“所见即所得”地拖曳控件并定义事件等,其数据以XML的形式被存储在xib文件中。在Xcode 4.1之后,Interface Builder成为了Xcode的一部分,与Xcode集成在一起。

打开Xcode 5工具,看到的主界面如图1-1所示。

该界面主要分成3个区域,①号区域是工具栏,其中的按钮可以完成大部分工作。②号区域是导航栏,主要是对工作空间中的内容进行导航。在导航栏上面还有一排按钮,如图1-2所示,默认选中的是“文件”导航面板。关于各按钮的具体用法,我们会在以后用到的时候详细介绍。

在选中导航面板时,导航栏下面也有一排按钮,如图1-3所示。这是辅助按钮,它们的功能都与该导航面板的内容相关。对于不同的导航面板,这些按钮也是不同的。图1-1 Xcode主界面图1-2 Xcode导航面板图1-3 导航面板的辅助按钮

图1-1所示的③号区域是代码编辑区,我们的编码工作就是在这里完成的。其背景颜色可以在Xcode的使用偏好(该功能可以在图1-4所示菜单栏中的苹果图标中找到)中设置。图1-4 Xcode工具菜单栏1.3 本书中的约定

为了方便大家阅读本书,本节介绍一下书中案例代码和图示的相关约定。1.3.1 案例代码约定

作为一本编程方面的书,书中有很多案例代码,我们可以从图灵网站(www.iTuring.cn)本书主页免费注册下载或者从智捷教育提供的本书服务网站(www.iosbook1.com/code.html)下载,解压后会看到如图1-5所示的目录结构。图1-5 源代码文件目录

ch02~ch19代表第2章到第19章的案例代码或一些资源文件,其中工程或工作空间的命名有如下几种形式。

二级目录标号,如“2.1 HelloWorld”说明是2.1节中使用的HelloWorld工程(或工作空间)案例。

三级目录标号,如“2.2.1 HelloWorld”说明是2.2.1节中使用的HelloWorld工程(或工作空间)案例。

有~的情况,如“2.2.2~2.2.3 HelloWorld”说明是2.2.2节到2.2.3节共同使用的HelloWorld工程(或工作空间)案例。

对于没有标号的情况,由其所在的父目录说明是哪个章节的案例工程(或工作空间),如“2016Olympic”说明是在第24章中使用的。1.3.2 图示的约定

为了更形象有效地说明知识点或描述操作,本书添加了很多图示,下面简要说明图示中一些符号的含义。

图中的圈框。有时读者会看到如图1-6所示的圈框,其中的内容是选中的内容或重点要说明的内容。图1-6 图中圈框

图中的箭头。如图1-7和图1-8所示,箭头用于说明用户的动作,一般箭尾是动作开始的地方,箭头指向动作结束的地方。图1-8所示的虚线箭头在书中用得比较多,常用来描述设置控件的属性等操作,箭头指向代表打开XXX检测器。图1-7 图中箭头1

图中手势。为了描述操作,我们在图中放置了等手势符号,这说明点击了该处的按钮。如图1-9所示,屏幕下方的“更多…”按钮上面就有这个手势,说明用户点击了“更多…”按钮。图1-8 图中箭头2图1-9 图中手势第2章第一个iOS应用程序

从控制台输出Hello World是我学习C语言的第一步,也是我人生中非常重要的一步。多年后的今天,我希望仍以HelloWorld作为第一步,为大家开启一个神奇、瑰丽的世界——iOS。

本章以HelloWorld作为切入点,向大家系统介绍什么是iOS应用以及如何使用Xcode创建iOS应用。2.1 创建HelloWorld工程

在学习之初,我们有必要对使用Xcode创建iOS工程做一个整体概览,这里我们通过创建一个基于故事板的HelloWorld iPhone工程来详述其中涉及的知识点。

实现HelloWorld应用后,会在界面上展示字符串Hello World(效果如图2-1所示),其中主要包含Label(标签)控件和ImageView(图片视图)。图2-1 HelloWorld的iPhone界面2.1.1 创建工程

启动Xcode,然后点击File→New→Project菜单,在打开的Choose a template for your new project界面中选择Single View Application工程模板(如图2-2所示)。图2-2 选择工程模板

接着点击Next按钮,随即出现图2-3所示的界面。图2-3 新工程中的选项

这里我们可以按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明图2-3中的选项。

Product Name。工程名字。

Organization Name。组织名字。

Company Identifier。公司标识(很重要)。一般情况下,这里输入的是公司的域名(如com.51work6),这类似于Java中的包命名。

Bundle Identifier。捆绑标识符(很重要)。该标识符由Product Name+ Company Identifier构成。因为在AppStore发布应用的时候会用到它,所以它的命名不可重复。

Class Prefix。类的前缀。为生成的类加前缀(如XZYViewController)。

Devices。选择设备。可以构建基于iPhone或iPad的工程,也可以构建通用工程。通用工程是指一个工程在iPhone和iPad上都可以正常运行。

设置完相关的工程选项后,点击Next按钮,进入下一级界面。根据提示选择存放文件的位置,然后点击Create按钮,将出现如图2-4所示的界面。图2-4 新创建的工程

在右下角的对象库中选择Label控件,将其拖曳到View设计界面上并调整其位置。双击Label控件,使其处于编辑状态(也可以通过控件的属性来设置),在其中输入Hello World,如图2-5所示。图2-5 添加Label控件

接下来我们添加ImageView到View的设计界面,从右下角的对象库中选择Image View控件,将其拖曳到View上,如图2-5所示。ImageView是图片的容器,它的大小应该跟原始图片是一样的,否则都会比率失调或者失真,因此我们需要设置它的尺寸,在View设计视图中选择ImageVew,然后再选中右边的尺寸检查器,按照如图2-6所示的尺寸设置,其中X和Y代表坐标,Width和Height代表宽和高。图2-6 添加ImageView图2-7 设置ImageView尺寸

设置好ImageView尺寸后,本例可以设置它所关联的图片,但是现在你的工程中是没有图片的,因此需要通过Xcode将图片添加到工程中。具体步骤如图2-8所示,右键选择Supporting Files组,选择菜单中的Add Files to “HelloWorld”…,弹出选择文件对话框,如图2-9所示,在Destination中选中Copy items into destination group’s folder(if needed),这样可以将文件复制到我们的工程目录中,在Add to targets中选择HelloWorld。图2-8 添加文件图2-9 选择文件对话框

把图片文件添加到工程后,我们再选择Image View,然后打开右边的属性检查器,在Image View→Image下的列表中选择图片文件(icon-152.png),如图2-10所示。图2-10 设置Image View属性

至此,整个工程创建完毕。如图2-11所示,选择运行的模拟器或设备,然后点击左上角的运行按钮,即可看到运行结果。图2-11 运行应用

我们在没有输入任何代码的情况下,就已经利用Xcode工具的Single View Application模板创建了一个工程,并成功运行,Xcode之强大可见一斑。2.1.2 Xcode中的iOS工程模板

从图2-2中可以看出,iOS工程模板分为3类——Application、Framework & Library和Other,下面将分别详细介绍这3类模板。

1. Application类型

我们大部分的开发工作都是从使用Application类型模板创建iOS程序开始的。该类型共包含7个模板,具体如下所示。

Master-Detail Application。可以构建树形结构导航模式应用,生成的代码中包含了导航控制器和表视图控制器等。

OpenGL Game。可以构建基于OpenGL ES的游戏应用。

Page-Based Application。可以构建类似于电子书效果的应用,这是一种平铺导航。

Single View Application。可以构建简单的单个视图应用。

Tabbed Application。可以构建标签导航模式的应用,生成的代码中包含了标签控制器和标签栏等。

Utility Application。可以构建实用型应用程序,它会生成两个视图控制器——主视图控制器和子视图控制器。在iPhone中子视图以模态方式呈现,在iPad中子视图以浮动窗口(popover)的形式呈现。

Empty Application。可以构建一个空应用程序,需要我们自己添加视图等对象。该模板很少使用。

SpriteKit Game。它是苹果自己的2D游戏引擎,可以帮助我们基于iOS的2D游戏。

2. Framework & Library类型

Framework & Library类型的模板如图2-12所示,它可以构建基于Cocoa Touch的静态库。

说明 出于代码安全和多个工程重用代码的考虑,我们需要将一些类或者函数编写成静态库。静态库不能独立运行,编译成功时会生成名为libXXX.a的文件(例如libHelloWorld.a)。图2-12 Framework & Library类型模板

3. Other类型

利用该类型,我们可以构建应用内购买内容包(In-App Purchase Content)和空工程,如图2-13所示。使用应用内购买内容包,可以帮助我们构建具有内置收费功能的应用。图2-13 Other类型模板

我们可以根据需要选用不同的工程模板,这可以大大减少我们的工作量。2.1.3 应用剖析

在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-14所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢?图2-14 项目导航视图

如图2-14所示,导航视图下有HelloWorld、HelloWorldTests 、Frameworks和Products四个组。其中HelloWorld组中放置HelloWorld工程的重要代码,而HelloWorldTests组中放置的是HelloWorld程序的单元测试代码。Frameworks放置HelloWorld代码所依赖的框架或库,Products组放置了编译后的工程。下面我们重点介绍HelloWorld组中的内容。

在HelloWorld组中共有两个类:AppDelegate和ViewController,以及一个组Supporting Files。 我们主要的编码工作就是在AppDelegate和ViewController这两个类中进行的,它们的类图如图2-15所示。图2-15 HelloWorld工程中的类图

AppDelegate是应用程序委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate委托协议。UIResponder类可以使子类AppDelegate具有处理相应事件的能力,而UIApplicationDelegate委托协议使AppDelegate能够成为应用程序委托对象,这种对象能够响应应用程序的生命周期。相应地,AppDelegate的子类也可以实现这两个功能。

ViewController类继承自UIViewController类,它是视图控制器类,在工程中扮演着根视图和用户事件控制类的角色。

AppDelegate和ViewController类与main代码模块的主函数存在一种直接的调用关系,下面我们借助UML时序图来进行详细说明,如图2-16所示。图2-16 HelloWorld启动时序图

可以看到,在HelloWorld启动过程中,首先调用main.m代码模块的main()主函数进行AppDelegate的实例化,具体代码如下所示:

int main(int argc, char *argv[])

{

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载