第1章 iOS应用开发入门
知识目标
掌握iOS的概念,了解iOS的开发框架及设备。
了解Xcode 6的新特性,会安装Xcode开发工具。
掌握配置iOS设备的流程,为真机调试做准备。
- 掌握Xcode的使用,会创建iOS程序并使用模拟器。
iOS是一款强大的智能手机操作系统,被广泛地应用于iPhone、iPad和iTouch等设备中。iOS通过这些移动设备,向用户展示了一个多点触摸、可始终在线、视频及内置众多传感器的界面。本章将带领读者一起来认识iOS这款神奇的系统,并为后面章节的学习奠定良好的基础。
1.1 带你认识iOS
1.1.1 iOS简介
iOS系统是由苹果公司开发的手持设备操作系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad及Apple TV等苹果公司的产品上。它最早于2007年1月9日的苹果Macworld展览会上公布,随后苹果公司于同年的6月发布第一版iOS操作系统,当初的名称为“iPhone运行OS X”。当时的苹果公司CEO史蒂夫·乔布斯说服了各大软件公司及开发者先搭建低成本的网络应用程序(Web APP),这样可以使得它们能像iPhone的本地化程序一样来测试“iPhone运行OS X”平台。
2007年10月17日,苹果公司发布了第一个本地化iPhone应用程序开发包(SDK)。
2008年3月6日,苹果发布了第一个测试版开发包,并且将“iPhone runs OS X”改名为“iPhone OS”。
2008年9月,苹果公司将iPod touch的系统也换成了“iPhone OS”。
2010年2月27日,苹果公司发布iPad,iPad同样搭载了“iPhone OS”。
2010年6月,苹果公司将“iPhone OS”改名为“iOS”,同时还获得了思科iOS的名称授权。
2010年第四季度,苹果公司的iOS占据了全球智能手机操作系统26%的市场份额。
2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万款。
2012年2月,iOS平台的应用总量达到552247个,其中游戏应用最多,达到95324个,比重为17.26%;书籍类以60604个排在第二,比重为10.97%;娱乐应用排在第三,总量为56998个,比重为10.32%。
2012年6月,苹果公司在WWDC 2012上推出了全新的iOS 6,提供了超过200项新功能。
2013年6月11日,在WWDC2013大会上苹果公司发布了iOS 7系统,这个系统采用了一套全新的配色方案,整个界面有很明显的半透明果冻色,拨号、天气、日历、短信等几乎所有应用的交互界面都进行了重新设计,整体看来更为动感、时尚,全新的iOS 7系统可应用在iPhone 4及以上机型中。
2014年6月3日,苹果公司在WWDC 2014上公布了iOS 8系统,并提供了开发者预览版更新。iOS 8在外观上依旧秉承扁平化风格,功能方面得到了很大的提升。它支持与Mac持续无缝对接,在通知中心快速回复包括第三方应用在内的消息通知,增加了QuickType联想输入、HealthKit健康管理应用、全新的照片同步功能。此外,iOS 8还向开发者开放了Touch ID API,支持第三方输入法。伴随着本次系统的升级,iPhone 4正式被苹果淘汰,iOS 8升级适配从iPhone 4S开始,iPad则从iPad 2起步。
目前,iOS的生态圈非常成熟,只要开发者具有良好的创意,并将该创意实现为iOS应用程序,接下来就可以把这个应用程序发布到苹果提供的App Store中,然后就可能从苹果庞大的电子设备用户群中获取利润。事实上,现在已经有大量团队、个人通过苹果的App Store取得了成功。
截止到本书完稿时,Apple公司最新的手机是iPhone 6 Plus,最新的平板电脑是iPad 4,它们都搭载了iOS 8的操作系统,本书将围绕基于iOS 8的应用开发来阐述。
1.1.2 iOS框架层次
iOS包含了非常多的技术内容,包括界面管理、内存的分配与回收、事件发送、多任务处理、网络、多媒体服务等。尽管iOS功能五花八门,但是大体上可以将其分为4个层次,如图1-1所示。
图1-1 iOS分层架构图
图1-1 所示4个层次的相关讲解具体如下。
- Core OS层:位于iOS框架的最底层,主要包含内核、文件系统、网络基础架构、安全管理、电源管理、设备驱动、线程管理、内存管理等。简而言之,该层提供了最低级的、系统级的服务。
- Core Services层:称之为核心服务层,主要提供诸如字符串管理、集合管理、网络操作、URL实用工具、联系人管理、偏好设置等服务。除此之外,它还提供了很多基于硬件特性的服务,如GPS、加速计、陀螺仪等。
- Media层:依赖于Core Services层提供的功能,主要负责图形与多媒体服务。它包含了Core Graphics、Core Text、Open GL ES、Core Animation、AVFoundation、Core Audio等与图形、视频和音频相关的功能模块。
- Cocoa Touch层:直接向iOS应用程序提供各种基础功能的支持。其中,UIKit框架提供了各种可视化控件供应用程序使用,如窗口、视图、视图控制器与各种用户控件等。另外,UIKit也定义了应用程序的默认行为和事件处理结构。
iOS提供的这些框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,它为我们提供了完整的项目解决方案,使研发程序变得更加容易。大多数情况下,应用程序会使用UIKit框架提供的各种界面类构建程序界面,并使用Foundation框架中定义的各种基本类型(字符串、数字等)来保存程序的数据,由于这两个框架太重要了,因此,它们结合在一起就称为Cocoa Touch。
1.1.3 iOS开发设备
强大的iOS系统被广泛地应用于苹果公司的移动系列产品,只要是iOS程序,都支持在iOS系统的某些设备上运行,它们的主要差异表现在屏幕大小。目前,iOS程序主要分为iPhone程序和iPad程序,它们分别运行在iPhone和iPad设备,具体介绍如下。
1.iPhone
iPhone是一个集合了照相、个人数码助理、媒体播放器及无线通信设备的掌上智能手机。iPhone最早由史蒂夫·乔布斯在2007年1月9日举行的Macworld上宣布推出,并于同年6月29日在美国上市。第七代iPhone 5S和iPhone 5C于2013年9月10日发布,同年9月20日正式发售。第八代的iPhone 6和iPhone 6 Plus于2014年9月10日发布,全新的iPhone 6如图1-2所示。
图1-2 全新的iPhone 6
图1-2所示是一款金色的iPhone 6,与iPhone 5S相比,屏幕尺寸更大,整体外观拉长。针对不同的iPhone设备,它们的屏幕尺寸和分辨率见表1-1。
表1-1 iPhone的分辨率参数
型号 |
屏幕尺寸(英寸) |
分辨率(像素) |
---|---|---|
iPhone |
3.5 |
480×320 |
iPhone 3G |
3.5 |
480×320 |
iPhone 3GS |
3.5 |
480×320 |
iPhone 4 |
3.5 |
960×640 |
iPhone 4S |
3.5 |
960×640 |
iPhone 5 |
4 |
1136×640 |
iPhone 5C/5S |
4 |
1136×640 |
iPhone 6 |
4.7 |
1334×750 |
iPhone 6 Plus |
5.5 |
1920×1080 |
表1-1是不同型号iPhone的屏幕尺寸和分辨率,通过对比发现,iPhone的屏幕尺寸逐渐增大,分辨率逐渐升高,厚度逐渐减小。
2.iPad
iPad是苹果公司于2010年发布的一款平板电脑的名称,定位介于苹果的智能手机iPhone和笔记本电脑产品之间,它只有4个按键,布局与iPhone布局一样,提供了浏览互联网、收发电子邮件、观看电子书、播放音频和播放视频等功能。
2010年1月27日,在美国旧金山欧巴布也那艺术中心所举行的苹果公司发布会上,平板电脑iPad正式发布。
2012年3月8日,苹果公司在美国欧巴布也那艺术中心发布第三代iPad,外形与iPad 2相似,但是电池容量增大,
2012年10月24日,苹果公司举行新品发布会发布第四代iPad平板电脑,它拥有9.7英寸的屏幕,配置了A6X芯片,有关性能能达到上代iPad所用A5X芯片的两倍左右。
2012年10月23日,发布了屏幕尺寸为9.7英寸,更轻、更薄的iPad Air。
2014年10月17日凌晨1点,苹果在美国加州库比蒂诺总部Infinite Loop园区的Town Hall大会堂如期召开了主题为“久违了”的新品发布会。在此次发布会上,苹果正式发布iPad Air 2。接下来,通过一张图来展示iPad Air 2,如图1-3所示。
图1-3 iPad Air 2
图1-3所示是一款金色的iPad Air 2,与iPad Air相比较,机身厚度更薄,重量减轻。针对不同的iPad设备,它们的屏幕尺寸和分辨率见表1-2。
表1-2 iPad的分辨率参数
型号 |
屏幕尺寸/英寸 |
分辨率/像素 |
---|---|---|
iPad |
9.7 |
1024×768 |
iPad 2 |
9.7 |
1024×768 |
new iPad |
9.7 |
2048×1536 |
iPad 4 |
9.7 |
2048×1536 |
iPad mini |
7.9 |
1024×768 |
iPad Air |
9.7 |
2048×1536 |
iPad mini 2 |
7.9 |
2048×1536 |
iPad Air 2 |
9.7 |
2048×1536 |
iPad mini 3 |
7.9 |
2048×1536 |
表1-2是不同型号的iPad的屏幕尺寸和分辨率,由此可知,iPad的屏幕尺寸并没有发生改变,只是分辨率增大两倍。
1.1.4 iOS 8的全新功能
2014年,苹果在WWDC开发者大会上发布了全新一代操作系统iOS 8,它与iOS 7的界面基本相同,但内在却添加了众多新功能,具体如下。
1.iOS 8支持第三方输入法
苹果的输入法一直被人诟病,iOS 8开放了第三方输入法,支持更多的第三方输入法,例如,搜狗、QQ拼音等。
2.iMessage发送语音、视频等信息
iMessage(即时通信软件)加入群聊功能,可以添加、删除联系人,群聊支持防打扰功能,可以自行退出群聊。iMessage可以发送语音、短视频信息,而且在锁屏界面就能拿起来听iMessage的语音,体验与微信非常类似。
3.全新的通知中心
当屏幕顶部接收到推送时,向下拉动,会看到快速操作的界面,直接在推送中操作即可,无需再进入该应用操作,让用户在不离开当前页面的前提下处理推送消息,再次提高处理效率。例如, iPhone在锁屏的状态下,用户可以在通知中心里面直接回复短信。
4.HealthKit健康平台
iOS 8新增加了一个统一的健康应用API,即HealthKit,供开发者使用,可以让所有的健康应用的数据能够统一管理和展示。而且苹果也发布了移动健康应用平台,即Health,第三方的健康管理应用可以通过此平台来管理心率、运动、饮食等健康数据。
5.Family Sharing家庭分享
家庭共享功能,可以在家庭成员间共享日程、位置、图片和媒体,最为重要的两点是,家庭成员间在iTunes商店上购买项目可以共享,且能够控制儿童购买应用。
6.改进Siri
Siri(语音控制功能)更加智能,并且增强了汽车内Siri语音的体验,如用户正在开车的时候,能够利用Siri主动来完成某些事情。
7.针对中国的优化
iOS 8针对中国市场进行了特殊优化,如准确的中文导航和农历等。
8.改进Spotlight搜索
iOS 8的Spotlight全局搜索变得更强大,不再只局限于本地搜索,而是联网搜索,可以联网搜索电影、新闻、音乐,还能够直接搜Google。
9.改进多任务界面
在多任务管理界面的上方,新增加了最近联系人,可以直接发邮件、打电话等,极大地增强了iOS的效率。
10.强大的照片编辑功能
iOS 8中加入了图片“智能编辑”,调整图片的多个参数,如曝光度、对比度、亮度等。还能够同步至iCloud,多设备之间共享,且支持Windows设备。
11.开放TouchID功能
第三方应用可以使用TouchID接口,意味着未来的很多应用都可以用指纹识别功能了。
12.QuickType快速输入功能
苹果虚拟键盘上新增加了快速输入栏,能够出现字母或者汉字的联想,使输入更迅速。
13.HomeKit智能家居功能
苹果向智能家居开放的API,如未来通过这个API可以实现iPhone控制门锁,控制家庭灯光和电器开关等。
1.2 搭建开发环境
“工欲善其事,必先利其器”这一说法在编程中同样受用。学习iOS开发也离不开好的开发工具的帮助,本节将详细讲解搭建iOS开发环境的知识,以及开发所需要的第三方工具的基本知识。
1.2.1 申请加入iOS开发团队
要想成为一名iOS开发人员,首先需要拥有一台Intel Macintosh台式计算机或者笔记本电脑,并运行苹果的操作系统,例如,Lion、Mountain Lion等,而苹果公司的Mac系列计算机,如MacBook、Mac Mini就是最适合的开发工具。
准备好硬件设备后,还需要注册成为iPhone开发人员,这样苹果公司才会允许下载iPhone SDK。它是软件开发工具包,其内部包含了开发必须的Xcode,它是苹果公司的集成开发环境。注册大致分为以下几个步骤。
1.开发者账号
苹果开发者注册主要有两种账户,分为标准的开发者账户和企业账户,针对这两种账户的情况具体如下。
- 标准的开发者:一年费用为99美金。苹果开发者希望在App Store发布应用程序,则可以加入iOS开发者标准计划,开发者可以选择以个人或者公司的名义加入该计划。
- 企业账户:一年费用为299美金,还要注册一个公司Dun&Bradstreet(D-U-N-S)码,这个账户可以注册任意多个设备。如果开发者希望创建部署于公司内部的应用,并且其公司雇员不少于500人,则可以加入iOS开发者企业计划。
当然,我们也可以不缴纳任何费用加入Apple开发人员计划,不过免费和收费之间存在一定的区别,免费会受到一定的限制,最大的一点就是无法把程序运行在真实设备上,只能在开发工具的模拟器里面测试,也不能在App Store中发布程序。
2.加入Apple开发人员计划
无论是大型企业还是小型公司,又或者是个人开发者,步入iOS开发前都需要从Apple网站开始,打开https://developer.apple.com/programs/start/standard/ 页面开始注册,如图1-4所示。
图1-4 iOS开发中心界面
从图1-4中可以看到,要注册苹果开发者大致分为3个步骤,具体如下。
(1)Choose an enrollment type(选择账户类型)
我们必须要选择一种账户类型,选择个人账户还是企业账户,关于这两种账户信息,前面已经提到过,它们的收费及申请标准不同。
(2)Submit your information(提交信息)
苹果会针对注册的账户类型,要求提交不同的申请信息。个人账号包含地址和姓名等,企业账号还要提交D-U-N-S码。如果企业没有申请过该码,可以根据网站上的链接去申请。苹果针对开发者的身份审核比较严格,个人账号要给苹果传真身份证的扫描件,企业账号需要给苹果传真营业执照的扫描件。
(3)Purchase and activate your program(缴费)
苹果审核信息通过后,就会要求开发者付款,具体费用不再重复。购买完成后,苹果会在24小时以内发送一封电子邮件告知下一步操作。
当然,在申请加入iOS开发之前,开发者首先必须拥有一个苹果账号,即Apple ID。如果读者使用过iTunes、App Store或者其他苹果服务,可以直接使用当时的账号。在注册过程中,苹果也会进行提示。单击页面上的“Continue”按钮,决定创建Apple ID还是使用现有的Apple ID,如图1-5所示。
图1-5 Apple ID提示
3.创建Apple ID
如果还没有Apple ID,选择“New Apple ID”选项,单击“Sign In”按钮,进入到注册界面,我们必须在个人和公司之间做出选择,如图1-6所示。
图1-6 选择账户类型
选择完成之后,苹果会要求开发者输入一些账号信息,其中,Apple ID都是用邮箱作为名称,密码在位数和组合上也有一定的条件,读者只要按照提示来操作即可,如图1-7所示。
图1-7 创建Apple ID流程
Apple ID创建完成之后,重新开始加入开发者计划的步骤,然后根据提示说明一步步操作即可。
1.2.2 下载和安装Xcode与iOS SDK
Mac开发者计划和iOS开发者计划的会员可以获取最新的Xcode开发工具。Xcode提供了各种实用工具,用于创建和调试源代码。SDK里面还包含了一个模拟器,它支持在Mac上运行大多数iPhone和iPad程序,方便开发者在模拟器上看到程序在真实设备上运行的效果。
1.下载并安装Xcode
早期的Xcode和SDK可能需要分开下载,但目前最新版本的Xcode和SDK已经捆绑在一起,因此只要下载Xcode即可,具体下载步骤如下。
(1)进入https://developer.apple.com/xcode/网站,选择“Downloads”选项,进入到最新Xcode的下载界面,Xcode里面包含了iOS的最新SDK,如图1-8所示。
图1-8 最新Xcode下载界面
(2)单击“View in the Mac App Store”,系统会在Mac版的App Store里面打开下载链接,如图1-9所示。
图1-9 App Store中的界面
(3)单击“获取”按钮,然后单击“安装App”按钮,按照提示完成操作,App Store就会把Xcode安装到你的应用程序中。单击“前往”→“应用程序”看到应用程序列表中出现了Xcode,就说明Xcode安装成功了。
2.安装辅助工具和文档
安装Xcode之后,接下来,在“应用程序”列表中启动Xcode。启动完成之后,会看到“Welcome to Xcode”窗口,同时屏幕上方会看到Xcode的主菜单。
选择屏幕上方菜单的“Xcode”→“Preferences”,系统会打开Xcode参数设置对话框,如图1-10所示。
图1-10 参数设置对话框
单击图1-10所示的对话框中的“Downloads”标签页,在该页面中可以看到Components和Documentation两个分类。单击Components分类,在下方会看到可以安装的各种辅助工具,如果其右边显示“√”图标,表明该工具已经安装,若显示图标,表明该工具还未安装,单击图标就会安装该工具。同样,单击Documentation分类,也会看到很多文档,单击图标可以安装文档,直到显示“√”图标即可。
1.2.3 Xcode 6的新特性
截止到2015年6月,市面中最主流的版本是Xcode 6,最新版本是Xcode 6.4 beta 2,其最突出的特点如下所示。
1.新特性
(1)全新的iOS模拟器
Xcode 6增加了一个全新的iOS模拟器,允许开发者根据设备调整应用尺寸,除了“Resizable iPhone”和“Resizable iPad”之外,还包括iPhone 5、iPhone 5s、iPad 2、iPad Retina、iPad Air等具体设备,如图1-11所示。
图1-11 全新的iOS模拟器
(2)完全支持Swift编程
Xcode 6为开发者引入了一种全新的设计和开发应用的方式,深度支持Swift编程,开发者不仅能够使用百分之百的Swift代码来创建一款崭新的应用,还可以向已存在的应用添加Swift代码或者框架,并在Swift或者Objective-C中查看文档。“跳转至定义”或者“快速打开”等所有常见的可供性同样地适用于Swift,甚至还可以使用Swift语法显示Objective-C标头定义,如图1-12所示。
图1-12 选取Language编程
(3)实时的代码效果预览
现在,开发者在使用Interface Builder设计界面时,能够实时地预览代码效果。当程序运行时,自定义对象将在设计时展现。当开发者修改自定义视图代码时,Interface Builder的设计画布则会自动更新,而无需任何的构建和运行操作。
此外,其所包含的API还支持向IB Inspector添加参数来快速修改视图,甚至开发者还可以预先填充实例数据视图来让界面更加准确。而支持UIKit大小类的iOS脚本则能够让开发者为所有iOS设备开发单一的通过脚本,不仅能为特定的设备尺寸或方向进行行为选择,还可以保持接口的一致性,且易于维护。
(4)新增View Debugging功能
Xcode 6实现了此前备受开发者期待的View Debugger。现在,调试应用UI就像按单击按钮那样简单,开发者可以轻而易举地看到为什么一个视图可能会被裁剪或者隐藏,并在Inspector中检查和调试约束其他参数。当然,Xcode还包含了其他新的调试工具,如调试Gauge来监控I/O用法、增强版的iCloud Gauge等,而Debug Navigator也将显示更有用的信息,包括栈框架记录和块队列等。
2.新变化
除了功能之外,与Xcode 5相比,Xcode的外观也发生了一些变化,接下来,针对这些改变进行详细介绍。
(1)pch文件
之前的Xcode 5里面,每创建一个项目之后会自动带有一个pch文件,它的全称为“precompiled header”,即预编译头文件,其内部往往会有一些常用的框架头文件,或者宏定义的URL地址,在此定义后可供全局使用。Xcode 6创建的项目不再包含此文件,有利于节约开发时间、代码维护时间,接下来,通过一张图来描述,如图1-13所示。
图1-13 Xcode 5与6的项目导航窗口
(2)启动画面
选中Xcode 5的项目导航面板的Images.xcassets文件,单击右侧的LaunchImage设置项,将提前准备好的图片资源拖曳到右侧虚线框位置,这样就为应用添加了启动画图。而Xcode 6自带了一个启动界面,如图1-14所示。
图1-14 Xcode 6的启动界面
图1-14所示是启动界面,由图可知,它是一个Xib文件,是一个轻量级的界面设计文件,应用于局部或者单个页面,可支持不同大小的屏幕。
1.3 配置iOS设备以运行程序
只有加入了iOS开发人员计划,才能在真机上运行程序。真机运行大致需要4个步骤,它们分别为生成并安装证书、注册设备、创建应用程序ID、创建并安装描述文件,接下来,本节将针对这4个步骤进行详细地讲解。
1.3.1 生成并安装证书
证书唯一标识了应用程序的开发人员,它包含共享的公钥和个人私钥。Xcode在编译程序时会查找系统中安装的证书,并根据证书对程序进行签名。要想创建证书,大致要经历3个步骤,具体如下。
1.生成证书签名请求
证书签名请求(Certificate Signing Request,CSR)包含了开发人员的个人信息,例如,注册Apple ID时的电子邮件及姓名等。要想创建一个证书请求,需要按照一定的顺序来逐步实现,大致经历以下几个步骤,具体内容如下。
(1)打开“应用程序”→“实用工具”,找到钥匙串访问程序,然后在其偏好设置中的证书标签页下,将“在线证书状态协议(OCSP)”与“证书撤销清单(CRL)”全部置为关闭,如图1-15所示。
图1-15 修改钥匙串访问程序的证书设置
(2)关闭偏好设置窗口,并选中菜单“钥匙串访问”→“证书助理”→“从证书颁发机构请求证书”,如图1-16所示。
图1-16 在钥匙串访问程序中创建证书请求
(3)在弹出的“证书助理”窗口中,输入您用于注册iOS开发人员计划的电子邮件地址及您的姓名,“CA电子邮件地址”不填,然后选中“存储到磁盘”单选按钮,以及“让我指定密钥对信息”复选框,如图1-17所示。
图1-17 输入证书请求的相关信息
(4)单击“继续”按钮之后,将证书请求文件保存到计算机中的任意目录,证书助理会询问私钥的大小与加密算法,分别选中“2048位”与“RSA”,如图1-18所示。
图1-18 指定密钥对信息
(5)单击“继续”按钮后,我们就创建了证书的请求文件,即私钥创建完成。
2.苹果根据请求信息生成证书
证书请求文件生成后,需要将其上传至苹果的iOS开发人员管理页面中,让苹果根据我们的证书请求创建证书,大致流程如下。
(1)使用你的iOS开发人员账号登录苹果开发者主页,其网址为https://developer.apple.com/membercenter/index.action ,单击“Certificates,Identifiers & Profiles”选项,打开后的界面如图1-19所示。
图1-19 iOS开发人员管理界面
(2)单击“iOS Apps”列表中“Certificates”标签,跳转到“iOS Certificates”页面,默认选中左侧的“Certificates”标签下的“All”,然后单击右侧的“+”按钮,选择“iOS App Development”选项,单击“Continue”后进入到关于创建证书页面,再次单击“Continue”后进入的页面如图1-20所示。
图1-20 创建证书界面
(3)单击图1-20所示的“Choose File…”按钮,选中刚才我们生成的证书请求文件,单击页面中的“Generate”按钮后会将证书请求文件上传,最终生成证书,如图1-21所示。
图1-21 证书生成的界面
3.下载证书并安装到系统中
单击图1-21所示的“Download”按钮,将其下载到计算机上,然后双击该文件,将其导入到钥匙串访问程序中即可,如图1-22所示。
图1-22 将证书导入到钥匙串
注意
如果需要在真机上运行程序,则Xcode在编译时会查找系统中的证书;如果找不到证书,则会提示编译失败。
1.3.2 注册设备
要想在真机上运行和测试程序,还需要注册您的设备。您需要将设备的UDID添加至iOS管理页面中,它是长度为40的字符串,唯一标识您的设备。查看设备的UDID的方式有两种,具体如下。
1.使用Xcode工具查看
打开Xcode,在其对应菜单栏中选择“Window”→“Devices”,然后在左侧的“Devices”列表中选中您的设备,在右侧窗口中的“Identifier”项则是UDID,如图1-23所示。
图1-23 在Xcode中查看设备的UDID
2.通过iTunes查看
打开iTunes,在左侧的设备栏中选中连接的设备,然后在右侧窗口中单击“序列号”文本标签,即可看到标识符UDID,如图1-24所示。
图1-24 在iTunes中查看设备的UDID
任选一种方式,查看连接设备的UDID,选中该字符串,按下⌘C,将该标识符复制到剪切板。在iOS开发人员管理界面中,单击左侧的“Devices”标签,再单击右侧页面的“+”按钮,然后输入设备的名称,该名称是随意的,并将UDID粘贴到右侧的文本框中,如图1-25所示。
图1-25 添加设备并输入设备UDID
单击图1-25所示页面下方的“Continue”按钮,进入到核实信息的页面,审核无误后单击“Register”按钮,注册成功后,可以看到该设备被列在网页中。
1.3.3 创建应用程序ID
当创建新项目的时候,Xcode会询问应用程序的包ID,即Bundle ID,它用于唯一标识该应用程序,而应用程序ID是一个字符串,用于对包ID进行匹配,iOS只会允许执行那些包ID匹配应用程序ID的应用程序。
应用程序ID包含两个部分,前面的部分是包种子ID,即Bundle Seed ID,后面的部分是包ID查询字符串,中间用点分开,格式如图1-26所示。
图1-26 应用程序ID
图1-26所示是两个应用程序的ID,它包含两个重要的部分,具体如下。
(1)包种子ID:它是一个由10个字符组成的字符串,由系统自动生成,用于区别不同的iOS开发人员或者团队,具有相同的包种子ID的应用程序可以共享钥匙串数据。
(2)包ID查询字符串;用于对包ID进行匹配,分为两种情况,一种是不使用通配符的精确应用程序ID,另一种是使用通配符的应用程序ID。
需要注意的是,不使用通配符的精确应用程序ID给出了包ID的全名,它只能匹配唯一的一个应用程序;而使用通配符的应用程序ID可以匹配多个应用程序,其中,“*”表示通配符,可以匹配一个或者多个任意字符,它必须位于应用程序的末尾位置。例如“A1B2C3D4E5.com.LearniOS.*”能够匹配任何包ID以“com.LearniOS”开头的应用程序。
创建应用程序ID的方式非常简单,首先在iOS开发人员管理页面中单击左侧的“App IDs”标签,单击右侧窗口中的“+”按钮,然后分别填写“描述信息”和“包ID查询字符串”,如图1-27所示。
图1-27 填写“描述信息”和“包ID查询字符串”
确认无误后,单击图1-27所示页面下方的“Continue”按钮,进入到证实App ID的界面,然后,单击“Submit”按钮提交即可。之后,如果需要让程序能够运行在真机上,需要让项目的包ID能够匹配该应用程序ID才可以,注意匹配过程是大小写敏感的。
1.3.4 创建并安装描述文件
描述文件用于验证签名并执行应用程序,其包含了指定的证书、应用程序ID与设备列表,iOS设备只有安装了描述文件,才会运行指定的应用程序。要想创建描述文件,并将其安装到Xcode中,大致需要以下几个流程,具体如下。
1.创建描述文件
打开iOS开发人员管理页面,单击左侧的“Provisioning Profiles”标签,默认选择“All”选项,单击右侧窗口中的“+”按钮,选择描述文件的类型“Development”标签下的“iOS App Development”选项,单击“Continue”按钮,依次选取指定的“App ID”“certificates”及“devices”,并填写“描述文件”的名称,该名称是任意的,单击“Generate”按钮,就能够在页面中看到创建好的描述文件,如图1-28所示。
图1-28 创建描述文件
2.安装描述文件
单击图1-28所示的“Download”按钮,下载描述文件。下载完成后双击该文件,Xcode会安装该文件。这时,我们就可以进行真机调试了。
1.4 使用Xcode创建第一个iOS程序
在前面的小节中,开发环境已经搭建完毕。本节将会启动Xcode,围绕着Xcode的界面及使用来讲解,创建出第一个iOS应用程序。
1.4.1 在Xcode中创建项目
要想使用Xcode编写程序,首先需要创建一个项目,创建项目可以帮助大家更好地管理代码文件和资源文件。使用Xcode工具创建一个项目,大致要经历以下步骤,具体内容如下。
(1)在Dock中单击“Xcode”快捷图标启动Xcode,弹出欢迎使用Xcode的对话框,如图1-29所示。
图1-29 Xcode欢迎窗口
图1-29所示是Xcode的欢迎窗口,该窗口分为两个部分,右侧表示最近访问的项目,左侧包含3个选项,具体如下。
- Get started with a playground:表示创建一个带有playground的工程,用于编写、运行Swift程序。
- Create a new Xcode project:表示创建一个新的Xcode工程。
- Check out an existing project:表示打开一个现有的工程。
(2)选择图1-29所示的“Create a new Xcode Project”选项,弹出项目模板窗口,如图1-30所示。
图1-30 项目模板窗口
图1-30所示是项目模板窗口。该窗口列出了很多项目模板可供选择,不同的项目模板会在新建项目时创建不同的源文件与默认的代码结构。从左侧窗口可以看出,iOS工程模板分为3类,分别为Application、Framework & Library、Other,针对它们的介绍如下。
① Application
- Master-Detail Application:可以构建树形结构导航模式应用,生成的代码中包含了导航控制器和表视图控制器等。
- Page-Based Application:可以构建类似于电子书效果的应用,这是一种平铺导航。
- Single View Application:可以构建简单的单个视图应用。
- Tabbed Application:可以构建标签导航模式的应用,生成的代码中包含了标签控制器和标签栏等。
- Game:可以构建游戏的应用。
② Framework & Lidran类型的模板,可以构建基于Cocoa Touch的静态库。
③ Other
利用该类型,我们可以构建应用内购买内容包和空工程。其中,使用应用内购买内容包,可以帮助我们构建具有内置收费功能的应用。
(3)在图1-30中,选择“iOS”→“Application”→“Single View Application”,创建一个单一视图的应用程序,单击“Next”按钮,进入项目配置窗口,如图1-31所示。
图1-31 项目配置窗口
图1-31所示是项目配置窗口,它允许我们为项目命名、定义项目的包ID前缀、选择设备家族,具体每项的相关介绍如下所示。
- Product Name:产品名称,图中的产品名称为“01_HelloIOS”。
- Organization Name:组织名称,图中的组织名称为“itcast”。
- Organization Identifier:组织标识符,一般输入公司的域名,表示项目的包ID前缀,图中的包ID前缀为“cn.itcast”。
- Bundle Identifier:捆绑标识符,结合了Product Name和Organization Identifier,在发布程序时会被用到,故此命名不可重复。
- Language:编程语言,包含Objective-C和Swift两个选项。
- Devices:选择设备,可构建基于iPhone或者iPad的工程,也可以构建通用工程,在iPhone和iPad上都能够正常运行。
(4)单击图1-31所示的“Next”按钮,进入到选取项目保存位置的窗口,如图1-32所示。
图1-32 选取项目保存的路径
我们可以选取任意一个位置来保存项目,该窗口下方的“Create Git repository on My Mac”复选框用于源代码的版本控制,如果在正式的项目中,需要勾选该复选框。
(5)单击“Create”按钮,Xcode在指定的目录下面成功创建了一个项目,并且将项目的所有文件存放于此,项目创建好的界面如图1-33所示。
图1-33 Xcode开发主界面
1.4.2 熟悉Xcode界面
单击图1-33所示左侧的ViewController.m文件,可以看到“Xcode”窗口布局大致分为若干块,如图1-34所示。
图1-34 Xcode窗口布局
从图1-34中可以看出,它大致包含5个部分,分别为工具栏、项目浏览窗口、编辑窗口、调试窗口及实用工具窗口,针对它们的介绍如下。
1.工具栏
工具栏位于Xcode窗口的顶部,可以执行多种常见的操作,例如,运行程序。从划分区域上可以看出,其大致分为5个部分,具体如下。
(1)运行及停止运行按钮:位于工具栏的左侧,图标分别为和,用于运行程序或者停止运行程序。
(2)状态:位于工具栏的中央位置,用于展示上一个动作的执行结果或者当前动作的进度,例如,运行应用程序。
(3)设置编辑窗口的视图方式:位于工具栏的右侧位置,其图标为,分别用于显示标准、辅助、版本编辑视图,其中,蓝色表示当前选择的视图方式。
(4)显示或隐藏窗口:位于工具栏的最右侧位置,其图标为,分别用于显示或者隐藏项目浏览窗口、调试窗口及实用工具窗口。其中,蓝色表示显示状态,灰色则表示隐藏状态。
(5)选择运行平台:位于“停止运行”按钮的右侧,图标为,提供了多种平台供项目使用,单击图标会显示出一个运行方案下拉菜单,如图1-35所示。
从图1-35中可以看出,该下拉列表提供了多种运行方案,其中,iOS Device表示真机测试的设备。
图1-35 选择模拟器
2.项目浏览窗口
项目浏览窗口位于Xcode窗口的左侧,它列出了项目中所有的源代码文件、资源文件等,在其顶部有一排很小的按钮,它们分别表示不同的导航类型,如图1-36所示。
图1-36 项目浏览窗口
图1-36所示是项目浏览窗口,该窗口一共包含8个导航器。其中最常用的导航器介绍如下。
- 项目导航:会以组的形式来管理项目的源代码、图片等各种资源,如图1-36所示当前显示的面板。
- 符号导航:主要以类、方法、属性的形式来显示项目中所有的类、方法、属性,便于查看项目包含的所有类,以及每个类所包含的属性、方法,允许开发者快速定位指定的类、方法或者属性。
- 搜索导航:在搜索框内输入要搜寻的目标字符串,按回车键后,该面板会罗列出搜索的结果。
- 问题导航:若项目中出现任何警告或者错误,都会在此面板中罗列出来。
上述常用导航器对应的界面如图1-37所示。
图1-37 常用的导航器
3.编辑窗口
编辑窗口作为最主要的工作区,位于Xcode的中间位置,它主要用于显示与代码的编辑、界面设计、项目的设置等。编辑窗口会随着左侧导航窗口的不同选择而变化,举例如下。
- 若单击ViewController.m源文件,编辑窗口会显示相应的代码内容,并且允许编辑。
- 若单击Main.storyboard,编辑窗口会显示故事板,并且允许对界面进行设计。
4.调试窗口
位于Xcode的底部位置,该窗口只有在对程序进行调试的时候才会显示,包括显示所有程序在运行时的信息,出现错误的提示等。调试窗口如图1-38所示。
图1-38 调试窗口
图1-38所示是调试窗口,该窗口分为调试面板和控制台输出面板两部分。另外,我们可以看到“断点调试”中包含单步调试、步入调试、步出调试的功能,关于这些调试方式的介绍如下。
- 单步调试:当程序执行到指定断点之后,单步调试可以控制程序代码每次只会执行一行代码,即单击该按钮一次,程序向下执行一行代码。如果调用了方法,程序不会跟踪方法的执行代码。
- 步入调试:当进行单步调试时,如果某行代码调用了一个方法,而且开发者希望跟踪该方法的执行细节,则可以使用步入来跟踪该方法的执行。
- 步出调试:当使用步入调试跟踪某个方法之后,如果开发者希望快速结束该方法,并返回该方法的调用环境,即可单击该步出按钮。
5.实用工具窗口
位于Xcode的右侧位置,包含检查器面板和库面板两部分,具体介绍如下。
(1)检查器面板
位于Xcode右侧的上半部分,用于查找帮助信息,或是进行属性设置。该面板的内容也会随着当前焦点所在的对象而发生变化,大致分为两种情况,分别如下。
①单击左侧“项目浏览”面板中任意一个源代码文件,检查器面板上方仅显示两个按钮,如图1-39所示。
图1-39 文件检查器和快速帮助检查器面板
图1-39所示是文件检查器和快速帮助检查器面板,其中,文件检查器主要用于显示该文件存储的相关信息,包括文件名、文件类型、文件存储的路径、文件编码等基本信息;快速帮助检查器简称为“快速帮助面板”,当开发者将光标停留在任意系统类上时,该面板会显示有关该类的快速帮助,快速帮助包括该类的基本说明,有关该类的参考手册、使用指南及示例代码。
②单击左侧“项目浏览”面板中的Main.storyboard或者LaunchScreen.xib,检查器面板上方会显示更多的按钮,如图1-40所示。
图1-40 新增的检查器面板
图1-40所示是新增的检查器面板,单击Main.storyboard或者LaunchScreen.xib时,添加了4个与界面设计相关的检查器,具体如下。
- 身份检查器:用于管理界面组件的实现类、恢复ID等标识性属性。
- 属性检查器:用于管理界面组件的拉伸方式、背景色等外观属性。
- 大小检查器:用于管理界面组件的宽、高、X坐标、Y坐标等大小和位置相关的属性。
- 连接检查器:用于管理界面组件与程序代码之间的关联性。
关于以上这4个检查器,后面介绍iOS界面开发时才会使用到,故此处不再详述。
(2)库面板
位于Xcode右侧的下半部分,查看其顶部可以看到4个按钮,表示不同的类型的库,如图1-41所示。
图1-41 库面板
图1-41所示是4种类型的库面板,每一个库所包含的内容都不同,具体讲解如下。
- 文件模板库:该库用于管理各种文件模板,开发者可将指定的文件模板拖入到项目,从而快速地创建指定类型的文件。
- 代码片段库:该库用于负责管理各种代码片段,开发者将这些代码片段直接拖入到源代码中即可。
- 对象库:该库负责管理各种iOS界面组件,这些界面组件是开发iOS应用的基础。
- 媒体库:该库负责管理该项目中各种图片、音频等各种多媒体资源。
注意:
默认情况下,媒体库中看不到任何东西,只有为项目添加图片、声音等多媒体文件之后,才能在媒体库中看到列表项。只要从Finder中将图片文件、声音文件拖入项目浏览面板的指定位置,即可将该图片文件、声音文件添加到项目中。
1.4.3 了解项目文件组织结构
要想更好地管理项目文档,首先需要掌握项目文件的组织结构。打开Xcode工具左侧的“项目浏览”面板,该面板罗列出了项目中的所有文件,如图1-42所示。
图1-42 项目文件一览
图1-42所示列出了项目中所有的文件,其中,01_HelloIOS为根目录,表示整个项目,其内部包含的3个文件夹可以做与项目相关的配置,具体介绍如下。
1.01_HelloIOS
以项目名来命名,它包含应用程序的大部分代码及用户界面文件,可以在此文件夹内任意新建子文件夹,以便于更好地组织代码。由图1-42可以看出,它包含以下几个文件,分别如下。
- AppDelegate(.h/.m):应用程序代理,主要用于监听整个应用程序生命周期中各个阶段的事件。
- ViewController(.h/.m):视图控制器,主要负责管理UIView的生命周期,负责UIView之间的切换及对UIView事件进行监听等。
- Main.storyboard:界面布局文件,承载对应UIView的视图控件。
- LaunchScreen.xib:程序的启动界面,可根据屏幕的大小来显示合适的尺寸。它只是一个单一界面,无法实现场景的切换,隶属于轻量级的布局界面。
- Supporting Files:用于保存非Objective-C类的源代码和资源文件,其中,Info.plist对工程做一些运行期的配置,例如,项目的名称、唯一标识符等,main.m为程序的入口。
- Images.xcassets:应用程序包含的图像资源文件。单击该文件夹,编辑面板显示一个设置项AppIcon,用于设置应用图标,如图1-43所示。
图1-43 选中Images.xcassets显示的编辑窗口
2.01_HelloIOSTests
该文件夹下包含单元测试的相关类和资源,本书不会过多涉及测试相关的内容,此文件夹可以忽略。
3.Products
该文件夹仅仅包括该项目所生成的应用程序,其中,01_HelloIOS.app文件是项目所生成的应用程序,也是iOS应用开发的最终目的,使用红色标识文件实际上并不存在。
多学一招:为应用添加图标
在模拟器上使用快捷键“⌘⇧H”,回到应用程序列表,可以看到01_HelloIOS程序图标是白色的圆角正方形,缺乏吸引力。为此,我们要为应用添加图标。接下来,通过一张图来描述,如图1-44所示。
图1-44 iPhone中的应用图标
图1-44所示是iPhone的各种应用图标,这些图标均是以圆角正方形的形式显示,iPhone可自动把图标的边缘圆角化并让它具有玻璃质感。iPhone 4之后的设备都采用了Retina高清屏幕,为此,支持iOS 7及以上版本的iPhone的程序包需要以下尺寸的图片,具体如下。
- 120×120像素:用于iPhone 6的应用程序图标显示,这个是必须要有的。
- 80×80像素:用于iPhone 6的Spotlight搜索。
- 58×58像素:用于iPhone 6的Settings设置。
- 180×180像素:用于iPhone 6 Plus的应用程序图标显示,这个也是必须要有的。
- 120×120像素:用于iPhone 6 Plus的Spotlight搜索。
- 87×87像素:用于iPhone 6 Plus的Settings设置。
另外,iPad的图标根据不同的功能显示都有一定的尺寸要求,为此,iPad程序包需要以下尺寸的图片,具体如下。
- 76×76像素:用于iPad桌面应用程序图标的显示,这个是必须要有的。
- 40×40像素:用于iPad中的Spotlight搜索。
- 29×29像素:用于iPad中的Settings设置。
- 152×152像素:用于iPad 3及以后的设备桌面应用程序图标的显示,这个是必须要有的。
- 80×80像素:用于iPad 3及以后的设备中的Spotlight搜索。
- 58×58像素:用于iPad 3及以后的设备中的Settings设置。
一个良好的应用程序应该会考虑到图标的多样性,例如,在iPhone 6上显示的正常图标在iPhone 6 Plus设备上就会显得模糊或者粗糙,因此,尽量为自己的应用程序准备各种尺寸的图标文件,图标文件的命名最好遵守苹果的规范,大致分为以下几种情况,具体如下。
- Icon@2x.png:120×120像素,iPhone 6的应用图标。
- Icon@3x.png:180×180像素,iPhone 6 Plus的应用程序图标。
- Icon-76.png:76×76像素,iPad的应用图标。
- Icon-76@2x.png:152×152像素,iPad 3及以后的设备的应用图标。
- Icon-Small@2x.png:58×58像素,iPhone 6的Settings设置图标。
- Icon-Small@3x.png:87×87像素,iPhone 6 Plus的Settings设置图标。
- Icon-Small-29.png:29×29像素,iPad中的Settings设置图标。
- Icon-Small-29@2x.png:58×58像素,iPad 3及以后的设备中的Settings设置图标。
- Icon-Small-40.png:40×40像素,iPad中的Spotlight搜索图标。
- Icon-Small-40@2x.png:80×80像素,iPhone 6、iPad 3及iPad 4的Spotlight搜索图标。
- Icon-Small-40@3x.png:120×120像素,iPhone 6 Plus的Spotlight搜索图标。
依据以上的规则,我们准备一套支持iOS 7及以上版本的一套图标文件。这时,若想将图标文件添加到工程中,大致分为以下几步。
(1)选择左侧“项目浏览窗口”中的Images.xcassets文件,在“编辑窗口”的左侧栏中选择图标集“AppIcon”,如图1-45所示。
图1-45 选择编辑窗口的图标集
(2)从Finder中选中之前准备好的图标文件,拖动其到每个图像配置相关的图标的窗口,如图1-46所示。
图1-46 配置相关图标的窗口
图1-46所示是苹果官方文档的配置App Icon,只要将所有的图标拖曳到此窗口,松开鼠标,Xcode会自动将文件复制到应用中,图像自动寻觅到自己的位置并显示。删除之前模拟器运行的程序,重新运行,再次回到应用程序列表,这样就能够看到成功定制的应用程序图标。
注意:
(1)Images.xcassets所在的目录会复制图像并添加它们,如果之前已经将这些图像资源添加到项目中,你可以很安全地删除源图像文件。
(2)如果你不提供一个列出的可选图标,即该位置为空白,那么,系统会自动缩放现有的图标到合适的大小。但是仍然强烈推荐应用程序包含所有的图标。
(3)所谓Retina屏幕,就是高清视网膜屏幕,该屏幕的分辨率的宽高是标准屏幕分辨率的2倍。
多学一招:设置启动画面
除了应用图标之外,我们还可以通过定制启动界面来美化应用。当用户单击设备上的应用程序图标,启动画面会显示到主界面,接下来,通过一张图来描述,如图1-47所示。
图1-47 微信的启动画面
图1-47所示是手机微信的启动画面,该画面铺满了手机的整个屏幕。依据设备、方向的不同,启动画面要支持以下规格,见表1-3。
表1-3 启动图片的规格
Asset
Launch file or image (required for all apps)
iPhone 6 Plus (@3x)
Use a launch file (see Launch Images)
iPhone 6 and iPhone 5 (@2x)
For iPhone 6, use a launch file (see Launch Images) For iPhone 5, 640×1136
iPhone 4s (@2x)
640×960
iPad and iPad mini (@2x)
1536×2048 (portrait) 2048×1536 (landscape)
iPad 2 and iPad mini (@1x)
768×1024 (portrait) 1024×768 (landscape)
表1-3列举了针对不同设备的启动图片的规格,其中,iPad包含竖屏和横屏情况。定制iOS应用的启动图片iPhone和iPad程序包需要以下尺寸的图片,具体如下。
- 768像素×1024像素:用于iPad 2和iPad mini标准屏幕启动画面的显示,仅适用于竖屏。
- 1024像素×768像素:用于iPad 2和iPad mini标准屏幕启动画面的显示,仅适用于横屏。
- 1536像素×2048像素:用于iPad和iPad mini Retina屏幕启动画面的显示,仅适用于竖屏。
- 2048像素×1536像素:用于iPad和iPad mini Retina屏幕启动画面的显示,仅适用于横屏。
- 640像素×960像素:用于iPhone 4s启动画面的显示。
- 640像素×1136像素:用于iPhone 5启动画面的显示。
- 750像素×1334像素:用于iPhone 6启动画面的显示,仅适用于竖屏。
- 1334像素×750像素:用于iPhone 6启动画面的显示,仅适用于横屏。
- 1242像素×2208像素:用于iPhone 6 Plus 启动画面的显示,仅适用于竖屏。
- 2208像素×1242像素:用于iPhone 6 Plus 启动画面的显示,仅适用于横屏。
同样,启动画面的图片文件的命名也要遵守苹果的规范,大致分为以下几种情况,具体如下。
- Default@2x.png:640像素×960像素,iPhone 4s的启动图片。
- Default-568h@2x.png:640像素×1136像素,iPhone 5的启动图片。
- Default-Portrait~ipad.png:768像素×1024像素,iPad 2和iPad mini竖屏标准屏幕的启动图片。
- Default-Portrait~ipad@2x.png:1536像素×2048像素,iPad和iPad mini 竖屏Retina屏幕的启动图片。
- Default-Landscape~ipad.png:1024像素×768像素,iPad 2和iPad mini横屏标准屏幕的启动图片。
- Default-Landscape~ipad@2x.png:2048像素×1536像素,iPad和iPad mini 横屏Retina屏幕的启动图片。
由于Xcode 6添加了一个LaunchScreen.xib,用于指定支持iOS 8系统的设备启动界面,即iPhone 6和iPhone 6 Plus,可支持不同大小的屏幕。默认情况下,其内部包含一个标签,该标签的文本内容为应用程序的名称。实质上,xib文件最终会转换为图片保存在沙盒路径下。
除此之外,我们还可以采用添加应用图标的方式设置启动画面。依据以上的规格,准备一套支持iOS 7及以上版本的一套图像文件,要想添加启动画面,大致经历以下几个流程。
(1)单击根目录,编辑窗口内默认选中“General”选项,在其对应的面板中,找到“App Icons and Launch Images”选项,删除“Launch Screen File”对应的文本框的内容,单击“Launch Images Source”选项对应的“Use Asset Catalog”按钮,弹出一个对话框,如图1-48所示。
图1-48 转移启动图片Images目录
(2)单击图1-48所示的“Migrate”按钮,会看到“Use Asset Catalog”按钮消失,变为一个列表框,同时后面添加了一个图标。单击该图标,跳转到Images.xcassets对应的编辑面板,如图1-49所示。
图1-49 Images.xcassets对应的编辑面板
从图1-49可以看出,左侧添加了一个设置项Launch Image,用于设置启动画面。随着右侧“属性检查器”面板中复选框的勾选的增加,编辑窗口的虚线框增加,以适应更多的屏幕尺寸。将之前准备好的启动图片拖曳到此窗口,松开鼠标,Xcode会自动将文件复制到应用中,图像自动寻觅到合适的位置并显示,这些图片就被设置为应用程序的启动画面。重新运行应用,这样就能够看到成功定制的启动画面。
1.4.4 编译并在模拟器上运行程序
项目创建完成之后,可直接编译运行。单击Xcode工具栏中的“运行”按钮,或者使用快捷键“⌘R”即可,稍等片刻后, Finder中会出现一个类似于iPhone的窗口,如图1-50所示。
图1-50 iOS模拟器
图1-50所示是程序运行后弹出的窗口,一个iPhone出现在屏幕上,它就是iOS模拟器,若程序没有出现任何错误时,Xcode会在模拟器或者真实设备中运行项目程序,以便于进行初步调试和测试。
1.4.5 使用Interface Builder丰富程序界面
Interface Builder,IB,它是一个用户界面设计工具,采用所见所得的方式让开发者编辑用户界面,隶属于Xcode开发环境自带的用户图形界面设计工具。
Storyboard是从iOS 5.0开始新加入的功能,它又被称为“故事板”,用于在一个窗口中显示整个应用用到的所有或者部分页面,且可以定义各页面之间的跳转关系,大大地增加了IB便利性。单击图1-34所示的Main.storyboard文件,其对应的编辑窗口如图1-51所示。
图1-51 故事板窗口
图1-51所示是故事板窗口,由图可知,其大致可以分为两个部分,它们分别为文档大纲区域和IB编辑器区域,针对这两部分的介绍如下。
(1)文档大纲区域
该区域以层次的方式显示其中的场景,与右侧窗口的结构一一对应。从图1-51中可以看出,根节点是一个View Controller Scene,表示一个窗口界面,其内部包含了View Controller、View、First Responder,组合在一起就被称为场景,即Scene。
(2)IB编辑器区域
该区域以可视化的方式显示左侧窗口场景的内容。从图1-51中可以看出,该区域中间放置了一个特定大小的矩形框,表示View Controller,该矩形框顶部包含3个图标按钮,针对它们的介绍如下。
:View Controller,即视图控制器,表示加载应用程序中的故事板场景并与之交互的对象,负责实例化其他所有对象。
:First Responder,即第一响应者,表示用户当前正在与之交互的对象。当用户在使用iOS应用程序时,可能会存在多个对象影响用户的手势或者键击,当前与用户交互的对象是第一响应者。
:Exit,表示退出。
其中,View Controller内部包含一个View,是一个可视化矩形区域,它负责视图控制器显示在设备屏幕上时的布局和界面。除此之外,该区域左侧有一个大大的灰色箭头,用于指定初始加载的视图控制器,程序启动之后,默认会直接显示这个视图控制器的View。
若要丰富界面,可以直接从对象库中拖曳一些组件来实现。接下来,完成一个加法计算器应用的布局,如图1-52所示。
图1-52 加法计算器
图1-52所示是一个加法计算器页面,要想搭建这个界面,大致要经历以下过程,具体如下。
①选中图1-51所示的图标,在右侧的属性检查器面板中看到“Simulated Metrics”选项,从该选项的“Size”对应的下拉菜单中选择“iPhone 3.5-inch”,如图1-53所示。
图1-53 设置模拟器的尺寸
②打开对象库面板,分别拖曳2个Text Field、3个Label、1个Button到程序界面。若要调整界面的布局,指定组件所处的位置,可通过Apple提供的调整布局的工具来实现,大致如下。
- 参考线
当在视图中拖曳对象时,将会自动出现蓝色的参考线,用于辅助布局。通过这些蓝色的虚线能够将对象与视图边缘、视图中其他对象的中心,以及标签和对象名中使用的字体的基线对齐,并且当间距接近Apple界面指南要求的值时,参考线将自动出现以指出这一点。
另外,我们也能手工添加参考线,依次选择菜单“Editor”→“Add Horizontal Guide”或者“Add Vertical Guide”实现。
- 选取手柄
大多数对象都有选取手柄,可以使用它们沿水平、垂直或者这两个方向缩放对象。当对象被选定后在其周围会出现小框,单击并拖动它们可以调整对象的大小。需要注意的是,在iOS中有一些对象会限制如何调整其大小,以确保iOS应用程序界面的一致性。
- 对齐
要快速对齐视图中的多个对象,可单击并拖曳出一个覆盖它们的选框,或者按住Shift键并单击以选中它们,然后从菜单“Editor”→“Align”中选择合适的对齐方式,如图1-54所示。
图1-54 校准窗口
- 大小检查器面板
选中组件,打开右侧窗口的“大小检查器”面板,其提供了大小、位置及对齐方式相关的信息。通过修改View选项中文本框的数值,精确地控制组件的位置和大小。
根据需求,使用以上任意的方式,将全部的组件放置到合适的位置,并指定合适的大小,完成好的界面如图1-55所示。
图1-55 添加完成的界面
从图1-55中可以看出,Label用于显示文字;Text Field用于输入文本,与用户形成交互;Button表示按钮。针对这些组件,后面会有详细地介绍。借助位置辅助线的提示,布局了所有的组件,并显示在文档大纲区域的View子节点内。
③图1-55所示的效果与最终效果图有差异,可以通过设置组件的外观来实现。依次选中每个组件,修改它们的外观,可分为以下情况。
- 选中Button,双击后输入“计算”,改变Button的标题,在右侧的属性检查器面板中,设置其Background为浅灰色,如图1-56所示。
图1-56 修改Button的Background
- 依次选中3个Label,双击使其处于可编辑状态,分别输入“+”“=”“0”。
- 依次选中两个Text Field,在右侧的属性检查器面板中,设置其Keyboard Type为Number Pad,即数字键盘,如图1-57所示。
图1-57 设置文本框的Keyboard Type为Number Pad
④按下⌘S,保存当前的故事板文件。重新单击运行按钮,再次编译并运行程序,运行后的界面如图1-58所示。
图1-58 程序的运行结果图
从图1-58中可以看出,使用Interface Builder更加直观地丰富了程序的界面,完全无需依赖一行代码。
多学一招:IBOutlet和IBAction的使用
固定的界面设计具有一定的局限性,如图1-58所示只显示了应用的静态效果。为此,我们可以使程序界面与代码关联起来,实现动态地改变。
若要实现计算的功能,显而易见,要获取两个Text Field的内容,当用户单击“计算”按钮时计算相加的结果,最终显示到最右侧的Label上。我们需要利用一个变量与控件关联起来,一个方法与按钮绑定起来。为此,iOS提供了两个关键字IBOutlet和IBAction,针对它们的介绍如下。
(1)输出口(IBOutlet)
控制器使用IBOutlet来引用Storyboard中的对象,该关键字声明了一个输出口,并将其指向了某个控件,仅仅是告诉Interface Builder,被IBOutlet修饰的实例变量将被连接到Storyboard中的对象。
(2)操作(IBAction)
控制器使用IBAction来修饰方法,该关键字告诉Interface Builder,该方法是一个操作,并且可以被某个控件所触发。
要想实现计算的功能,关联控件并绑定方法,大致需要经历以下4个步骤,具体内容如下。
1.通过IBOutlet连接来获取控件
(1)在项目浏览窗口中选中Main.storyboard文件,单击Xcode右上角的辅助视图,Xcode会在编辑窗口打开辅助编辑器,如图1-59所示。
图1-59 打开辅助编辑面板
图1-59所示打开了辅助编辑面板,由图可知,编辑窗口分为两个部分,左侧为故事板,右侧为ViewController.m文件。由于故事板中控制器的关联类为ViewController,当选中故事板的同时,打开辅助编辑器,通常会在Xcode左侧显示故事板,右侧会自动切换到控制器类的实现文件。
(2)选中左侧故事板中第一个Text Field,按下键盘上的control键,按住鼠标不放,将Text Field拖向ViewController.m的类扩展部分,此时会看到一条蓝色的线条,该线条从故事板的Text Field开始,一直连接到光标结束,如图1-60所示。
图1-60 为Text Field建立IBOutlet
(3)松开鼠标左键,弹出一个灰色框,如图1-61所示。
图1-61 填写IBOutlet属性信息
从图1-61中可以看出,该对话框总共包含5个字段,开发者可以选择或者填写如下字段。
- Connection列表:可以选择是为该UI控件创建IBOutlet属性还是IBOutlet集合,系统默认会为该控件创建IBOutlet属性。
- Name文本框:通过该文本框为该IBOutlet属性输入任意一个属性名,最好保证较好的可读性。
- Type文本框:用于设置该属性的类型,Xcode默认会设置该属性的类型为UITextField,因为Xcode可以智能地检测到正在建立IBOutlet管理的控件类型。
- Storage列表:开发者可以通过该文本框设置该属性的存储机制,即Strong或者Weak,默认为Weak。
在图1-61所示的Name文本框内输入“textNumber1”,这时,“Connect”按钮呈可单击状态。
(4)单击“Connect”按钮,系统会在ViewController.m的类扩展部分创建一个IBOutlet属性,如图1-62所示。
图1-62 IBOutlet属性
从图1-62中可以看出,IBOutlet属性就是OC语法中的@property属性,只不过额外增加了一个IBOutlet修饰词。另外,该IBOutlet属性左边有一个带有黑点的圆圈,这标志着该IBOutlet属性已经与故事板中的UI控件建立了关联。
(5)采用相同的方式,添加两个IBOutlet属性,用于关联第二个Text Field和最右侧的Label,完成后的界面如图1-63所示。
图1-63 关联完成的界面
2.通过IBAction绑定实现事件处理
当用户单击Button时,能够触发控制器中的某个方法。因此,在ViewController.m中定义一个IBAction方法,并将该方法绑定到Button对应的事件,实现触碰Button时会激发该IBAction方法。
(1)选中左侧故事板中“计算”按钮,按下键盘上的control键,按住鼠标不放,将Button拖向ViewController.m的类扩展部分,此时会看到一条蓝色的线条,该线条从故事板的Button开始,一直连接到光标结束,如图1-64所示。
图1-64 为Button建立IBAction
(2)松开鼠标左键,弹出一个灰色框,在Connection列表中选择Action,如图1-65所示。
图1-65 填写IBAction方法信息
从图1-65中可以看出,该对话框总共包含6个字段,开发者可以选择或者填写如下字段。
- Connection列表:选择为该UI控件创建IBOutlet属性、IBAction方法,还是IBOutlet集合。此处应选择创建IBAction方法。
- Name文本框:通过该文本框为该IBAction方法输入任意一个方法名。
- Type文本框:开发者可通过该文本框设置触发该事件的UI控件的类型,Xcode默认会设置该属性的类型为id,为了更准确地处理事件源控件,应直接将事件源控件的类型设为UIButton。
- Event列表:该列表框用于选择为哪种事件绑定IBAction方法。Xcode默认会选择的事件类型为“Touch Up Inside”,表示当用户在按钮区内部触碰并松开时触发该IBAction方法。
- Arguments列表:选择IBAction的形参列表,此处选择Sender,表示创建的IBAction方法包含一个形参,该形参代表触发该IBAction方法的事件源。该列表框支持3种选项:None,该IBAction方法不包含任何形参;Sender,该IBAction方法仅包含一个形参;Sender And Event,该IBAction方法包含两个形参,分别代表触发该IBAction方法的事件源控件和事件本身。
在图1-65所示的Name文本框内输入“calculate”,Type指定为UIButton,Arguments设置为None,这时,“Connect”按钮呈可单击状态。
(3)单击【Connect】按钮,系统会在ViewController.m的类扩展部分创建一个IBAction方法,同时,在ViewController.m的实现部分也会添加一个IBAction方法,如图1-66所示。
图1-66 IBAction方法
从图1-66中可以看出,IBAction方法就是OC语法中方法,只不过返回值类型为IBAction,作用相当于void。另外,该IBAction方法左边有一个带有黑点的圆圈,这标志着该IBAction方法已经被绑定到故事板的Button的特定事件。
3.实现计算的功能
在ViewController.m中的calculate方法中,编写处理代码即可。单击“计算”按钮,获取两个Text Field的内容,并将计算结果显示到最右侧的Label上,代码如例1-1所示。
【例1-1】 ViewController.m
1 #import "ViewController.h" 2 @interface ViewController () 3 // 定义3个属性,分别表示两个数值、结果 4 @property (weak, nonatomic) IBOutlet UITextField *textNumber1; 5 @property (weak, nonatomic) IBOutlet UITextField *textNumber2; 6 @property (weak, nonatomic) IBOutlet UILabel *resultLabel; 7 - (IBAction)calculate; 8 @end 9 @implementation ViewController 10 // 单击“计算”按钮激发的方法 11 - (IBAction)calculate { 12 // 1.获取两个文本框的内容 13 int number1 = self.textNumber1.text.intValue; 14 int number2 = self.textNumber2.text.intValue; 15 // 2.相加 16 int sum = number1 + number2; 17 // 3.将结果显示到resultLabel 18 self.resultLabel.text = [NSString stringWithFormat:@"%d",sum]; 19 // 4.隐藏键盘 20 [self.view endEditing:YES]; 21 } 22 @end
在例1-1中,第11~21行代码是calculate方法,表示单击“计算”按钮后激发的方法。其中,第13~14行代码分别获取了两个文本框的内容,并将其转换为int类型的数值;第16行代码将两个数值相加;第18行代码将sum转换为NSString类型,并显示到resultLabel上;第20行代码将弹出的虚拟键盘隐藏。针对这些控件,后面章节会有详细介绍。
4.运行程序
单击Xcode左上角的运行按钮,程序运行成功后,单击第一个文本框,屏幕顶部动画地弹出一个虚拟数字键盘,通过该键盘输入任意一个数值,同样在第二个文本框中输入任意一个数值,单击“计算”按钮,最终结果显示在右侧的标签上,部分运行结果如图1-67所示。
图1-67 程序的运行结果图
1.4.6 使用iOS模拟器
iOS SDK提供了iOS模拟器,用于对程序进行初步测试与调试。一般情况下,Xcode在成功编译项目后会自动启动iOS模拟器,之后在模拟器上运行编译之后的程序。接下来,通过一张图来描述,如图1-68所示。
图1-68 iOS模拟器
图1-68所示是iPhone 6的模拟器,由图可知,程序运行的界面与真实的设备几乎一致,模拟程度很高,在模拟器中可以进行如下操作。
(1)进行各种触屏操作,例如,单个手指的单击、双击、按住不动、拖曳,两个手指的按下、同时移动等。
对于单个手指触屏操作,可以使用鼠标在模拟器界面中直接单击与拖曳,如果要模拟两个手指的触屏,可以在模拟器中按下option键不放,这时模拟器界面出现两个灰色的圆点,表示两个手指。若移动鼠标,两个触屏点会以中心对称的方式向相反方向运动;若要两个触屏点向相同方向运动,需要按住option ⇧不放,移动鼠标即可。
(2)进行方位旋转,例如,90°、180°、270°旋转。
对于设备旋转,单击iOS模拟器的“Hardware”菜单项,会弹出一个下拉列表,如图1-69所示。
图1-69 单击Hardware菜单显示的下拉列表
图1-70 Device对应的窗口
从图1-69中可以看出,大致划分为5个区域。其中,第二个区域内包含“Rotate Left”和“Rotate Right”两个选项,分别表示向左旋转和向右旋转,快捷方式为⌘或者⌘。
(3)特殊情况模拟,例如,内存不足的情形。
如果想要检测程序在内存不足时的情形,如图1-69所示,第四个区域内包含一个“Simulate Memory Warning”选项,表示模拟内存警告,选中该选项,模拟器会向当前程序发送内存不足的警告消息。
(4)切换模拟的设备类型,可选的设备类型为iPhone与iPad。
iOS模拟器可以模拟iPhone与iPad,如图1-69所示,第一个区域内包含一个“Device”选项,表示硬件设备,选中该选项,右侧会弹出一个子列表,如图1-70所示。
除此之外,模拟器也可以模拟回到主页和锁屏,如图1-69所示,第三个区域内包含“Home”和“Lock”两个选项,分别表示回到主页和锁屏,快捷方式为⌘H和⌘L。
iOS模拟器功能强大,使用极其方便,但其只属于一个模拟的设备,必然会存在一定的局限性。究其原因,大致原因如下。
(1)iOS设备本身的硬件条件有限,对程序的内存使用、响应时间都有严格的限制,而模拟器运行在计算机中,允许使用全部的计算机硬件资源,因此,模拟器无法准确地检测程序的性能,不可准确地反映内存使用情况。
(2)模拟器无法使用所有的iOS特性,例如,加速计、陀螺仪、照相机、麦克风与iCloud等,因此程序无法处理这些动作。
(3)模拟器通过鼠标来模拟用户的触屏动作,而计算机只有一个鼠标,无法模拟多点触摸事件。
(4)模拟器使用的软件库与真实设备使用的软件库不一致,可能不能准确表现程序运行时行为。
因此,要想真正对程序进行完整测试,在真实设备上运行程序是必不可少的。
1.5 本章小结
本章首先介绍了iOS相关的内容,包括iOS的发展史、框架层次、开发设备及iOS 8的全新功能,然后搭建iOS开发环境,包括下载并安装Xcode,以及Xcode 6的新特性,之后讲解了真机调试的内容,包括生成并安装证书、注册设备、创建应用程序ID及安装描述文件,为真机设备做好了充分准备,最后讲解了使用Xcode开发工具创建一个iOS程序,包括熟悉Xcode的界面、项目文件的结构、iOS模拟器的使用等。大家应该熟练地掌握Xcode的使用,为之后章节内容的学习打好基础。
【思考题】
1. iOS框架分为哪几个层次?简述iOS框架每个层次的主要作用。
2. IBOutlet和IBAction两个关键字的作用是什么?
扫描右方二维码,查看思考题答案!