资源描述
IOS开发流程说明书
IOS
开发流程说明书
版本:V0.2
34 / 34
文档修订记录
版本编号或者更改记录编号
*变化
状态
简要说明(变更内容和变更范围)
日期
变更人
审批日期
审批人
V0.1
A
创建
2014/2/11
高明月
V0.2
M
添加创建项目流程和基础代码说明
2014/2/14
高明月
*变化状态:A——增加,M——修改,D——删除,N——正式发布
文档审阅信息
序号
审阅人
角色
审阅日期
签字
备注
目录
1 序言 6
1.1 编写目的 6
1.2 术语定义 6
1.3 参考资料 6
2 关于IOS 6
2.1 IOS介绍 6
2.2 IOS开发环境简述 7
3 创建项目 9
3.1 新建iOS项目 9
3.2 应用程序目录结构说明 12
3.3 应用程序初始结构概览 14
3.4 IOS应用程序的生命周期 15
4 代码入门(数据类型) 16
4.1 基础数据类型 17
4.2 OC数据类型 17
4.2.1 NSNumber类和NSInterger 17
4.2.2 NSString类型 19
4.2.3 NSArray类型 19
4.2.4 NSDictionary类型 20
4.2.5 NSDate类型 20
5 OC类的认识(成员变量和方法) 20
5.1 类的声明 21
5.2 方法的定义 24
6 运行和调试 24
6.1 IOS模拟器 25
6.1.1 选择设备 25
6.1.2 模拟器自定义设置 26
6.1.3 存储屏幕快照 27
6.2 程序调试 28
6.3 NSLog 29
1 序言
1.1 编写目的
本说明书为IOS开发流程说明书,制定本说明书的目的是针对IOS开发技术进行宏观表述。以便后续的设计、开发、测试、验收等工作顺利进行。
适用对象:
IOS开发人员
项目管理人员
产品开发人员
1.2 术语定义
(1)真机
真机即所谓的iPhone手机或者ipad,是指具有IOS这个操作系统的手机,由苹果公司进行研制并销售,用户可以从appstroe上下载相关应用及游戏。
(2)IOS SDK
IOS专属的软件开发工具包。
(3)Xcode
IOS开发工具。
1.3 参考资料
暂无。
2 关于IOS
2.1 IOS介绍
苹果IOS是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等产品上。IOS及苹果的Mac OS X操作系统一样,它也是以Darwin为基础的,因此同样属于类Unix的商业操作系统。原本这个系统名为iPhone OS,直到2010WWDC大会上宣布改名为IOS。最新版本为IOS7.0。
更多的资料可以到苹果开发网站上获取:
本文主要对以下几个方面对IOS的开发入门进行引导说明。如图2-1所示。
图2-1 IOS开发入门说明的内容导航图
2.2 IOS开发环境简述
最友好,最现实,也是最方便的开发环境就是在Mac系统中安装Xcode进行开发。原因在于:第一,开发工具(Xcode)限制。苹果官方只提供Mac版的Xcode,而Xcode内置了Xcode IDE,性能分析工具,iOS SDK,iOS模拟器和最新的OS X,可以方便迅速的进行代码编辑以及应用调试,可谓是Mac和iOS开发工具的不二选择。第二,代码提示和自动补全。iOS开发中用到的类或方法的名称,为了更具语义化,让开发者一目了然,通常会比较长,这往往会让刚刚接触iOS开发的开发者为了记住这些方法而伤透脑筋。而Xcode拥有优于其他编辑器的OC代码提示和自动补全功能,这将很大程度降低开发入门的门槛,这决定你开发iOS应用没有理由不使用Xcode。因此,使用非苹果电脑的开发者们最好安装Mac OS X的虚拟机,进行开发学习,否则你不仅会比别人花上多出一倍甚至更多的时间去搭建开发环境,而且代码编写上也会比使用Xcode开发的人花上更多的精力。
目前Mac OS X系统的最高版本是10.9.1,如下图所示,Xcode版本可以安装到最高版本5.0.2.如果是在windows安装的虚拟机,发布的懒人版本最高应该是10.8.2。Xcode版本5及4是不能向下兼容的,主要是UI开发机制的修改,如果系统版本不统一建议,Xcode版本安装至4.6.1.暂时可以支持到iOS6.0 SDK的版本开发,如果要很对iOS7版本开发,建议Xcode都更新到5以上。
图2-1 OS X系统版本显示图
3 创建项目
3.1 新建iOS项目
打开Xcode,如果是首次打开Xcode,你将会看到一个欢迎界面,如图:
图3-1 Xcode欢迎界面
你可以直接在该界面中点击图3-1中1处标记的Create a new Xcode project来创建一个项目,也可以点击图中2处标记的按钮来打开电脑中已经存在的Xcode项目。你还可以修改3处标记的复选框状态设置下次启动Xcode是否显示该欢迎界面。
本文不演示在此点击1处所示创建项目,首先点击该界面左上角的红色按钮退出该欢迎界面,然后点击屏幕左上角的File->New->Project。截图如下:
图3-2 Xcode菜单界面
接下来你将看到如下界面:
图3-3 Xcode创建项目界面
首先进行系统筛选,iOS应用则选择iOS列表对应项,OS X应用则选择OS X列表对应项。本例为iOS应用,故在此选择iOS中的Application(图中左上角红框所示),然后选择应用模板选择,在界面右边列出了多种最常用的应用模板类型,开发者按照自己的应用需求可自行选择,本例选择Single View Application(图中右上角红框所示)。一般项目开发如果是自己定制的界面开发,建议选择Empty Application。做完以上选择后点击窗口右下角Next按钮,进入下一个设置窗口:
图3-4 Xcode项目信息界面
此处内容会根据个人情况而不同,故不做赘述,按照窗口提示,填写相关信息即可。注意窗口下方的三个复选框,其功能分别是使用storyboards、使用自动引用计数器、包含单元测试,根据个人情况勾选/取消即可。建议选择storyboards和Use ARC模式,关于ARC模式在以后的章节中会做重点介绍。设置完成后点击右下角Next按钮,进入下一个窗口:
图3-5 Xcode项目文件存储界面
按照窗口所示,选择项目存储位置后点击窗口右下角Create按钮,完成应用创建过程。
3.2 应用程序目录结构说明
项目创建完成之后,Xcode会进入项目开发界面,界面大致分为三部分,左侧项目及目录结构列表、中间为代码编辑区、右侧属性设置和控件列表等区域。下面是目录结构的截图:
图3-6 Xcode项目目录界面
项目初始时包含如图所示三个主要目录,后续开发中开发者可以自行添加目录。其中:
· FirstIosApp目录及项目名称同名,主要存放应用相关源代码和配置文件;
· Framework存放项目使用到的框架,默认会添加图示三个必备框架;
· Products用于存放生成的应用文件,开发中开发者一般不必关心。
项目目录建议建立统一的说明文档,根据文档属性归类相同文件。下图3-7显示某一个完整项目的目录。
其中view文件夹内都是界面元素文件,parse是接口解析文件,images是图片文件,model是数据模型文件,dao是数据库操作文件,util是工具类文件,viewcontroller是界面文件。
文件目录实行统一化管理,方便文件的归类和查找,易于团队开发。
图3-7 Xcode项目目录实例界面
3.3 应用程序初始结构概览
整个应用程序的入口文件默认为AppDelegate.m,应该可以通过配置文件修改(未尝试)。其内部结构如下图3-8所示。
该文件包含应用程序生命周期中各个阶段可以调用的方法接口,以便应用程序在不同的状态阶段能进行相应的操作。这些方法就不一一说明了,开发者几乎可以望名知意。主要应用的方法就是didFinishLaunchingWithOptions,是程序启动后加载界面和初始化的方法。
图3-8 AppDelegate.m代码图
3.4 IOS应用程序的生命周期
对于上面图示方法如果还有不解的地方,可以参考下图3-9所示(来源于网络):
图3-9 IOS应用生命周期流程图
4 代码入门(数据类型)
做iOS开发,仅仅懂得使用Xcode,仅仅了解目录结构,仅仅了解生命周期,是远远不够的,这些只是基础中的基础。一定的编程能力也是必不可少的。下面就简单的介绍一下iOS开发的编程语言——Objective-C,后面简称OC。
学习一门语言,往往需要从最基础的数据类型开始,至于编程逻辑,技巧等则是在开发过程中慢慢积累的。下面对基础的数据类型和OC的数据类型详细说明一下。
4.1 基础数据类型
OC是C语言的一个超类,因此OC拥有C或C++的几乎所有特性,当然它也有自己独具一格的地方。所以OC也支持C语言的数据类型,诸如int,float等也都可以在OC中使用。基础数据类型可以参考一些C语言相关介绍,这里不多做介绍。
4.2 OC数据类型
OC不是仅仅只能使用C/C++的数据类型,它也拥有自己的数据类型,虽然及通常人们熟知的各种数据类型看起来不太一样,但事实上OC的数据类型是及基础数据类型相近,也不难理解。下面列举几个常见的OC数据类型。
4.2.1 NSNumber类和NSInterger
NSNumber是以对象的形式来包装基础数据类型,它提供以下方法,以下会对OC的方法定义进行介绍:
+ (NSNumber *) numberWithChar: (char) value;
+ (NSNumber *) numberWithInt: (int) value;
+ (NSNumber *) numberWithFloat: (float) value;
+ (NSNumber *) numberWithBool: (BOOL) value;
例如,要从一个int数据初始化一个NSNumber可以这样写:
NSNumber *number = [NSNumber numberWithInt: 100];
而要从NSNumber实例得到NSInteger数据则可以如下操作:
NSInteger integer = [number intValue];
如果下载了SDK可以在数据类型上点击command按键,查看所有方法的定义。如下图所示。
图4-1 对OC基础类点击command按键显示图
图4-2 对OC基础类定义显示图
4.2.2 NSString类型
NSString是OC的字符串类。及普通字符串不同的是NSString的值需要在普通字符串前加上一个@符号。例如要初始化一个'I'm a string.'的OC字符串,我们需要这样做:
NSString *str = [NSString stringWithString: @"I'm a string."];
OC也提供简写形式:
NSString *str = @"I'm a string.";
NSString类还提供了很多其他形式的创建字符串的方法(比如:stringWithFormat等),这里就不一一列举了,可以在基类中查看。
4.2.3 NSArray类型
NSArray是OC的数组类。OC的数组是很强大的,在一个数组中可以允许存在不同类型的数据,这个特性就跟强大的JavaScrit一样。初始化一个数组可以这样操作:
NSArray *arr = [NSArray arrayWithObjects:@"a", @"b", @1, nil];
当然也支持简化形式:
NSArray *arr = @[@"a", @"b", @1];
需要说明一点,使用arrayWithObjects方法创建数组的时候最后需要以nil结尾,而使用简化方式的时候不需要。
开发中可以使用以下两种形式获取数组对应索引位置(index)的值:
NSString *a = arr[index];
NSString *b = [arr objectAtIndex: index];
这里对NSMutableArray类型说明一下,很多基础类型都提供了类似的两种类型,主要区别是,NSArray类型是不变长数组,定义后是不能修改长度;NSMutableArray是可变长度数组,可以动态改变数组内元素长度和内容。
4.2.4 NSDictionary类型
NSDictionary是OC的字典类。字典类型在使用中以key-value键值对的形式存在。也支持多种初始化方式,下面列举两种:
NSDictionary *dic = [NSDictionary dictionaryWithObjects:@[@"a",@"b", @"c"] forKeys:@[@"first", @"second", @"third"]];
NSDictionary *dic = @{@"first": @"a", @"second": @"b", @"third": @"c"};
取值方法跟NSArray大同小异,也提供NSMutableDictionary类型:
NSString *a = [dic objectForKey: @"first"];
NSString *b = dic[@"second"];
4.2.5 NSDate类型
NSDate是OC的日期类。常见用法举例:
NSDate *date = [NSDate date]; //返回当前时间
NSDate *date = [[NSDate alloc] init]; //初始化为当前时间,类似date
5 OC类的认识(成员变量和方法)
iOS开发常常伴随着视图,而视图往往离不开视图控制器,在iOS开发中每一个视图控制器就是一个OC的类,因此学习iOS开发就必须了解OC的类。
OC的类使用@interface ClassName: superClass <protocol> … @end 结构来定义,NSObject是所有OC类的父类。及java相比OC的@interface 关键字就等同于JAVA的class关键字,OC的protocol就是JAVA中的interface,学习时需要特别注意。下图展示的是一个类的定义。
图5-1 定义类代码图
5.1 类的声明
举例声明一个Person的类(视图控制器)并实现它,拥有name、age两个成员变量,自然需要定义getName和setName、getAge和setAge,下面我们看下这个过程。
首先,类的结构如下:
@interface Person: NSObject {
NSString *name;
int age;
}
end
然后,我们声明它的setter和getter方法,用来设置和读取它的成员变量的值。按照传统方式应该如下定义:
@interface Person: NSObject {
NSString *name;
int age;}
- (void) setName: (NSString *) newName;
- (NSString *) getName;
- (void) setAge: (int) newAge;
- (int) getAge;
end
OC还提供了更简单的代码方式:
@interface Person: NSObject {
NSString *name;
int age;}
@property(nonatomic, strong) NSString *name;
@property(nonatomic, assign) int age;
end
它的功能和上面的代码是一样的。补充一下,@property本身可以接受参数来指定变量的getter和setter方式,其参数可用值和具体功能如下:
nonatomic //声明变量只在单线程中工作
atomic //默认值,可能有多个线程会用到这个变量
copy //分配一个新的空间,把原地址的内容复制过来
assign //简单的传递指针
retain //传递指针后引用计数器(retainCount)会自加1
strong //强引用
weak //弱引用
声明就这样就完成了,下面我们看下它的具体实现,在OC中类的实现需要使用另外一个关键字@implementation,格式如下:
@implementation Person
end
我们还是先看下传统方式声明getter和setter方法该如何实现:
@implementation Person
- (void) setName: (NSString *) newName {
self.name = newName;}
- (NSString *) getName {
return self.name;}
- (void) setAge: (int) newAge {
self.age = newAge;}
- (int) getAge {
return self.age;}
end
OC提供的更简单的代码编码格式:
@implementation Person
@synthesize name;
@synthesize age;
//或者直接下面一句
//@synthesize name,age;
end
在新版的Xcode中,@synthesize是可以省略的,但是建议还是都写上。
5.2 方法的定义
下面对方法的如何定义进行说明,如图是一个方法的声明。
图5-2 方法声明代码图
其中(BOOL)是该方法返回的数据类型,如果不需要返回则定义为(void),如果有返回数据,方法中需要return关键字返回匹配的数据类型。
contains:…toFind:…{}是方法名称的定义,这是自定义方法的名称。…是传入的参数,方法的定义如同一句话的说明。这个方法可以这么理解,此函数是包含方法,在temp字符串中要找到search字符串,如果找到返回Yes,如果没有找到返回No。
(NSString *)temp和(NSString *)search是参数,括号里面的是参数的数据类型,temp和search是参数名称。
关于方法前面的+和-符号需要解释一下。首先我们需要说明一下,一个类可以拥有成员变量和方法,而方法可以包含类方法和实例方法。所谓类方法是可以使用类名直接调用的方法,而实例方法是需要该类的实例才可以调用的方法。而在OC中使用“+”表示该方法为类方法,而“-”很简单自然是表示实例方法了。
至于方法的声明和实现大致和传统方式声明getter和setter是一样的,这部分就不再重复了。
6 运行和调试
每一个应用的开发过程都是漫长的,而在这个过程中我们免不了需要不时的运行一下程序,看看当前的效果,检查一下代码是否存在异常或者错误。
6.1 IOS模拟器
6.1.1 选择设备
Xcode的强大在于内置了很多开发和调试的工具,在Xcode中内置了iOS模拟器,能够模拟几乎所有iOS真机的功能,因此开发者可以通过iOS模拟器测试正在开发中的应用程序,提高开发效率,减少错误,节省开发时间。在运行前选择及应用对应的模拟设备是必须的,否则可能导致运行结果出现意外的问题。
在Xcode的菜单栏下方提供了选择模拟器的地方,建议下载5.0版本的iPhone模拟器,一般程序需要兼容IOS5.0版本。如图所示:
图6-1 选择模拟器运行
选择好模拟器后点击左侧的Run按钮,就可以在指定的模拟器中启动应用了。第一次启动模拟器一般会比较慢,后面就好了。同样可以点击Run旁边的Stop按钮,停止模拟器中的当前应用。也许有些时候你想独立运行iOS模拟器,而不启动当前应用,这也是可以的,请看下图:
图6-2 启动模拟器选项
也许相同的设备,但是却又多个尺寸,多个屏幕分辨率,例如:iPhone就有4、4S、5等。有模拟器可以对尺寸选择:
图6-3 选择模拟器尺寸选项
6.1.2 模拟器自定义设置
现在很多流行的iOS应用都有定位功能,那么在模拟器怎么测试定位呢?如下图所示:
图6-4模拟器自定义位置
6.1.3 存储屏幕快照
开发应用程序通常都不是一步到位的,过程中可能会产生各种各样稀奇古怪的现象,也许是显示不正常,也许是出现意外的效果,也或者你想把你当前的显示效果分享给开发团队的其他成员,这个时候作为开发者,你也许想要记录出现的这些现象,比如:截图、录屏什么的。这些都是不错的方法,但是iOS模拟器拥有更加方便的方式,如图所示:
图6-5模拟器存储屏幕快照
模拟器还有很多其他功能,在以后的开发应用中将会逐渐补充。
6.2 程序调试
每一个开发者都不能保证他的程序是完美的,所以通常在我们运行程序的时候会出现很多奇怪的警告或者错误,有的可以一目了然,迎刃而解,有的却隐藏得很深,很难发现。这时候断点调试就直观重要了。
在代码编辑器的左边的行号区,鼠标在这个区域单击可以在对应行上添加/关闭(不是删除)断点。启动断点,当再次运行程序的时候,程序若执行到当前行,则会暂停在当前行上,开发者可以在控制台看到断点处记录的信息。大致如图:
图6-6 控制台信息
如图所示,在断点处我们可以在控制台看到变量date的当前值以及内存地址等信息,这样就可以通过这些信息判断程序运行到该处时是否正常,也可以这样查看一些其他信息。
程序调试有很多技巧,Xcode也提供很强大的调试工具,断点调试是最直观的,其他的调试技巧会逐渐补充。
6.3 NSLog
有些时候我们可能会遇到一些仅靠断点无法解决的问题,这时我们还可以借助NSLog进行调试。NSLog也用于在控制台输出信息。NSLog类似Java中的systemout功能,可以让我们获取更多信息。如图:
图6-7 控制台log信息输出
通过以上的内容的介绍,我们可以基本使用Xcode进行iOS应用的开发,之后会补充iOS中的基本控件介绍和在项目开发中会遇见的问题和解决方案。
展开阅读全文