iOS 9应用开发入门经典(第7版)

978-7-115-42178-4
作者: 【美】约翰 雷(John Ray)
译者: 袁国忠
编辑: 傅道坤

图书目录:

详情

本书介绍了iOS开发所需的基本知识,包括使用Swift等开发工具,读写和显示数据,使用表视图导航结构化数据,创建可旋转和可调整的用户界面,使用地图和定位功能,使用加速计和陀螺仪检测运动和朝向,发布应用程序等主题。

图书摘要

版权信息

书名:iOS 9应用开发入门经典(第7版)

ISBN:978-7-115-42178-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


• 著    [美] John Ray

  译    袁国忠

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


John Ray: Sams Teach Yourself iOS 9 Application Development in 24 Hours(7th Edition)

ISBN: 0672337673

Copyright © 2016 by Pearson Education, Inc.

Authorized translation from the English languages edition published by Pearson Education, Inc.

All rights reserved.

本书中文简体字版由美国Pearson公司授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。


本书基于Apple最新发布的iOS 9.1和Xcode 7编写,循序渐进地介绍了从事iOS开发所需的基本知识,包括使用Xcode、Swift和Cocoa Touch等开发工具,使用iOS试验场测试代码,设计及美化用户界面,使用切割工具创建按钮模板,利用多场景故事板、切换、弹出框、导航控制器和选项卡栏控制器,使用表视图和分割视图导航结构化数据,使用堆叠视图和3D Touch,读写和显示数据,使用自动布局和尺寸类创建自适应用户界面,播放和录制多媒体,使用地图、地理编码和定位功能,使用加速计和陀螺仪检测运动和朝向,创建通用应用程序,编写支持后台处理的应用程序,跟踪和调试应用程序等主题。

本书通过简洁的语言和详细的步骤,帮助读者迅速掌握开发iOS应用程序所需的基本知识,适合没有任何编程经验的新手阅读,也可供有志于从事iOS开发的人员参考。


John Ray当前是俄亥俄州立大学科研信息系统办公室(Office of Research Information Systems)主任。他在Macmillan、Sams和Que出版了大量图书,其中包括Using TCP/IP: Special EditionTeach Yourself Dreamweaver MX in 21 DaysMac OS X UnleashedMy OS X – El Capitan EditionTeach Yourself iOS 8 Development in 24 Hours。作为一名从1984年起就开始使用Macintosh的用户,他努力确保在每个项目中都会以应有的深度涉及Macintosh。即使在编写技术性图书(如 Using TCP/IP: Special Edition)时,也在其中包含大量有关 Macintosh及其应用程序的信息。他的写作手法简单明了,即使对初、中级读者来说也简单易懂,因此深受好评。

读者可访问网站http://teachyourselfios.com或关注Twitter账号@johnemeryray或#iOSIn24与他联系。


感谢Sams Publishing的团队成员Laura Norman、Keith Cline和Mark Renfrow,还要感谢技术编辑Anne Groves,是他们帮助我再次顺利地升级了本书。Swift和Xcode工具的发展迅猛,这样的速度让开发人员有点难以跟上步伐。在确保我有条不紊、实事求是而又不偏离目标方面,Pearson的编辑团队做得非常出色。


当你拿起iOS设备并开始使用时,您会感觉非常流畅。无论是iPad、iPhone还是iPod,其界面都犹如与您的手指连接在了一起:流畅、舒适、引人入胜。其他与之竞争的设备也提供了类似的功能,有的甚至装备了诸如全景屏幕和跟踪板等运动小部件,但用户体验却无法与iOS媲美。

最近几年,iOS和相关开发工具发生了翻天覆地的变化。iOS 7引入了使用半透明控件的用户界面,让用户能够将注意力放在内容上,同时又不迷失方向。iOS 8支持一种全新的应用程序开发语言——Swift,让所有的人都大跌眼镜。随着iOS 9的推出,Swift也变成了开源语言,进一步巩固了其Apple平台开发语言的地位。

Swift是iOS和OS X开发历史中的里程碑。通过推出Swift,Apple几乎放弃了在Apple和NeXT平台上使用了25多年的Objective-C语言。Swift具备更多现代语言的特征,有望成为更友好的开发平台。本书出版时,Apple开发Swift语言的历史已有4年之久,但它成为公开的编程语言才一年多。

不幸的是,介绍一门年青的语言有些需要注意的地方。Swift处于快速发展中,在每个Xcode版本中都不同—针对一个Xcode版本编写的代码,可能在下一个版本中不再管用。例如,在iOS 9自带的Swift版本中,依然采用了以前创建循环的语法,但其用途完全不同了。一夜之间,几个月前编写的代码就不管用了。

Swift带来了挑战,但您也将发现,使用它进行编程既有趣又直观。

在打造Swift和iOS开发平台时,Apple考虑到了应用程序的整个生命周期,进而在其中集成了所需的一切—从界面设计工具到使界面能够正常运行并显示所需的代码,并确保它们能够无缝地协同工作。作为开发人员,这是否意味着您需要遵守某些规则呢?确实如此,但通过遵守这些规则,您打造的应用程序将是深得用户喜爱的交互式艺术品,而非安装后就被遗忘的软件。

通过App Store,Apple向开发人员提供了一种最佳的数字发布系统。任何年龄和派别的程序员都可将其应用程序提交到App Store,且只需要支付少量的开发人员年费。人们开发了针对各种领域的游戏、实用程序和应用程序,其范围涵盖了从学前教育到退休生活的所有阶段。鉴于iPhone、iPod Touch和iPad用户群庞大,因此不管什么内容都能找到合适的用户。

本书旨在向新一代开发人员介绍iOS开发相关的知识,并以循序渐进的方式提高开发人员的开发技能。读者只需通过24章内容的学习,就能掌握所有基本知识—从安装开发工具和向Apple注册设备,到调试应用程序,再到将应用程序提交到App Store。

只要有学习兴趣,有时间探索和使用Apple开发工具,并拥有一台运行Yosemite、El Capitan或更高版本的Intel Macintosh计算机,便可开始iOS开发了。更重要的是,从Xcode 7起,即便您没有加入开发人员计划,也可以在自己的设备上运行您开发的应用程序。

开发人员不可能在一夜之间就开发出iOS应用程序,但是只要多加练习,完全可以在几天之内编写出您的第一款应用程序。在Apple开发工具上花费的时间越多,创建出激动人心的应用程序的可能性就越大。

进行iOS开发时,要以创建自己想用的软件为宗旨,而不是创建您认为其他人想用的软件。如果只想着一夜暴富,您很可能会失望。虽然App Store空间很大,但它也是一个拥挤的市场,销售排行榜的竞争非常激烈。然而,如果将重点放在创建有用而独特的应用程序上,您的劳动成果得到用户赏识的可能性将大很多。

本书是为从未进行iOS开发,但使用过Macintosh平台的读者编写的,读者不需要有Swift、Cocoa和Apple开发工具方面的经验。当然,读者如果有一定的开发经验,将更容易掌握这些工具和技术。

虽然如此,本书对读者还是有一定的要求。具体地说,读者必须愿意花时间学习。如果读者只是阅读每章的内容,而不完成其中的项目,很可能错过一些重要概念。另外,读者还需花时间阅读Apple开发文档,并研究本书介绍的主题。有关iOS开发的信息浩如烟海,但本书的篇幅有限,只能为您打下坚实的iOS开发基础。

本书是基于iOS 9.1和Xcode 7.1编写的,大部分内容都适用于所有iOS版本,但也介绍了较新的iOS版本新增的一些功能,如手势识别器、支持3D Touch和AirPlay的嵌入式视频播放、Core Image、社交网络、多任务、通用应用程序(适用于iPhone和iPad)、自动布局、尺寸类等。

遗憾的是,本书并非完整的iOS应用程序编程接口(API)参考手册,也未涉及Apple TV和Apple Watch开发,因为本书的篇幅无法满足有些主题的需求。虽然如此,本书深入地介绍了各种工具和技巧,足以帮助任何iOS开发人员取得成功;另外,您将在第1章下载的免费工具包含Apple开发文档。很多章都包含名为“进一步探索”的一节,指出了您可能感兴趣的其他相关主题。这里需要重申的是,探索精神是成功的开发人员必须具备的重要品质。

涉及编码的每章都有配套的项目文件,其中包含编译并测试示例所需的一切;但更佳的做法是根据介绍自己创建应用程序。请务必从本书的配套网站http://teachyourselfios.com下载项目文件。如果您在使用这些项目时遇到问题,请查看该网站的帖子,看看是否有解决方案。


本章将介绍:


  • 您面临的iOS硬件局限性;

  • 到哪里获取iOS开发工具;

  • 如何加入iOS开发人员计划(Developer Program);

  • 创建并使用供应配置文件(provisioning profile);

  • iOS开发技术概述。

iOS设备向开发人员展示了一个全新的世界——多点触摸界面、可始终在线、视频以及众多内置的传感器,这些传感器可用于创建从游戏到提高生产率的应用程序等各种软件。信不信由您,作为新开发人员,您有一个优势:您是白纸一张,不受以前知道的移动应用程序概念的羁绊。您的高见很可能变成Apple App Store的优秀作品。

本章将让您为开发第一个项目做好准备。您即将踏上成为iOS开发人员的道路,但在开始编码前还需要做些准备工作。

您阅读本书说明您可能有iOS设备,这意味着您知道如何使用其界面:清晰的图形、响应迅速、多点触摸和数以十万计的应用程序,这只是冰山一角。然而,作为开发人员,您需要习惯应对一个迫使您以不同方式思考的平台。

当前,iOS平台家族成员包括iPhone、iPad和iPod Touch。Apple Watch(watchOS)和Apple TV(tvOS)是类似的平台,但使用不同的用户界面,要求使用不同的开发方法。在阅读本书时您将发现,很多屏幕截图都基于以iPhone(具体地说是4.7英寸的屏幕)为中心的项目,这并非是我不喜欢大设备,而是因为iPad和iPhone Plus界面很大,难以在屏幕截图中显示。好消息是,如果您要开发针对iPad的项目,这样去做就是了!同样,如果您要开发针对iPhone 6s+的项目,去做好了。为这两种设备进行开发时,编码过程几乎相同。对于不同的情况,我将确保您明白设备之间的差别(及其原因),但这样的情况很少。您还将发现,每个示例都提供了iPhone版本和iPad版本,这些代码可从本书的配套网站(http://teachyourselfios.com )下载。因此,不管您使用哪种设备,按本书介绍的做都将创建适用于该设备的应用程序。

注意:

与Apple开发工具和文档一样,本书不区分iPhone和iPod Touch。几乎在所有情况下,为这些设备开发的方式都相同,虽然有些功能在较早的iPod Touch版本上没有,但较早的iPhone和iPad版本亦如此。

iOS设备的分辨率各不相同,但iOS提供了一种考虑分辨率的简单方式。例如,在iPhone 5和iPhone 6之前,iPhone的屏幕大小为320 × 480点。请注意,这里说的是“点”而不是像素。iPhone 4采用了Retina屏幕,在此之前,iPhone的屏幕分辨率为320 × 480像素;现在,iOS设备的实际分辨率为上述分辨率与缩放因子的乘积。这意味着虽然在小设备(如iPhone 4s)上对元素进行定位时,使用的是数字320 × 480,但像素数可能更多。例如,iPhone 4(s)、5(s)和6的缩放因子为2,这意味着iPhone 4s的实际分辨率为(320 × 2)×(480 × 2),即640 × 960像素。iPhone 5稍有不同,其屏幕更大,为320 × 568点,即640 × 1136像素;而iPhone 6的屏幕375 × 667点,即750 × 1334像素,如图1.1所示。

那么庞大的iPhone 6+/6s+呢?它更与众不同——缩放因子为3,这意味着屏幕上的每个点都表示9个像素。以点为单位时,屏幕尺寸是多少呢?414 × 736点。在缩放因子为3的情况下,这相当于1242 × 2208像素,对吧?不完全对。iPhone Plus的分辨率为1080 × 1920,但“内部”分辨率为1242 × 2208。实际上,您可以这么认为:内部分辨率更高,但自动缩小内容,以适合1080 × 1920的屏幕。

像素如此之多,屏幕空间好像很大(即便是iPhone 5亦如此),但别忘了,所有这些像素都将显示在对角线只比无名指长一两英寸的屏幕上。

iPad系列产品的情况类似。iPad 2和第一代iPad mini的屏幕分辨率为768 × 1024点,但其缩放因子为1。采用Retina屏幕的iPad Air和iPad Mini的屏幕分辨率仍为768 × 1024点,但缩放因子为2,因此以像素为单位时,分辨率为1536 × 2048。iPad Pro配置了1024×1366点的超大屏幕,其缩放因子为2,因此以像素为单位时,分辨率为2048×2732。

本书后面介绍如何将对象放置到屏幕上时,将更详细地介绍缩放因子的工作原理。您需要知道的要点是,当您创建应用程序时,iOS将考虑缩放因子,以最大可能的分辨率显示应用程序及其界面,而您几乎无需为此做任何工作。

屏幕方面的限制并非坏事。正如您将学到的,使用iOS开发工具可创建层次与桌面软件一样多的应用程序,但其界面设计的结构化程度和效率更高。

您可在屏幕上显示复杂的2D和3D动画,这要归功于所有iOS设备都支持OpenGL ES和Metal。OpenGL是一个定义和操纵图像的行业标准,广泛用于游戏的创建;而Metal是Apple的一个应用程序编程接口(API),用于以极低的开销访问3D硬件。每次升级iOS设备时,都采用了更高级的3D芯片和渲染功能,从而改善了这些功能,但即使是最初的iPhone也有相当不错的图像处理功能。

图1.1 iPhone 6s屏幕大小以点为单位,在纵向模式下为375×667,在横向模式下为667×375,但每个点由4个像素组成(水平和垂直方向上各两个) 

需要考虑不同的屏幕尺寸吗?

iPhone 4引入了Retina屏幕,但处理起来非常简单。开发人员无需编写额外的代码,就可在应用程序中添加用于Retina屏幕的资源,这些资源将在需要时自动加载。之所以可以这样,是因为虽然分辨率变了,但长宽比没变——屏幕的水平和垂直点数都与以前相同。

iPhone 5有了新变化,其屏幕更长,这意味着iPhone的屏幕点数首次发生了变化,从320 × 480变成了320 × 568。然而,Apple更新了界面工具,让界面能够平滑地缩放,以适应不同的屏幕尺寸。

时间如梭,Apple于2013年推出了采用全新用户界面(UI)的iOS 7。突然之间,应用程序必须考虑完全不同的外观——控件和字体大小都与以前不同。

2014年,Apple推出了一系列尺寸不同于iPhone 5和5s的iOS设备。2015年,iPad具备了动态调整应用程序尺寸的功能,能够并排地运行应用程序。

好在Apple在增大设备尺寸的同时,也在不断开发让应用程序能够适应不同屏幕尺寸和布局的工具。

本书后面将介绍这些自适应工具——自动布局系统。通过结合使用自动布局系统和尺寸类(size class),可创建能够适应任何屏幕尺寸的应用。

与台式机和笔记本电脑的高清晰度显示器一样,我们也越来越习惯于处理器的速度比单击速度快。iOS设备装备的处理器各不相同,从早期iPhone采用的400 MHz ARM到当前销售的顶级iPad和iPhone设备采用的多核A9。A系列芯片是一个集成在芯片中的系统(system on a chip),给设备提供了中央处理单元(CPU)、图形处理单元(GPU)和其他功能;这是Apple设计的第一个CPU系列,在随后的很长一段时间内都将使用它们。

为确保iOS设备能迅速响应,Apple做出了巨大努力,限制了设备的多任务功能。从iOS 4开始,Apple创建了一组多任务应用程序编程接口(API),供特定情况下使用。在较新的iOS版本中,放松了对这些API的限制,但如果iOS认为应用会耗费大量资源,就不会允许它继续执行。iOS将用户体验凌驾于其他一切之上。

不能忘记的另一个约束是可用内存。在最初的iPhone中,整个系统(包括您的应用程序)可用的内存只有128MB,而且没有虚拟内存的概念(将速度更慢的存储空间用作内存),因此您必须小心管理应用程序创建的对象。在最新的iPhone中,Apple提供了2GB内存,而iPad Pro配置了4GB内存。但别忘了,用户无法对早期的iPhone进行内存升级。

iPhone和iPad能够通过移动电话提供商(如美国的AT&T、Verizon和Sprint)始终连接到Internet。内置的WiFi和蓝牙对这种广域网接入进行了补充。在无线热点的覆盖范围内,WiFi可提供与台式机相当的浏览速度。另一方面,蓝牙现在可用于将各种外围设备(包括键盘)连接到iOS设备。

作为开发人员,您可利用Internet连接来更新应用程序的内容、显示网页以及创建多玩家游戏。唯一的缺点是,应用程序使用的3G、4G或LTE数据越多,愿意使用它的用户就越少,因为数据套餐的费用很高。有鉴于此,很多应用都只支持WiFi。请针对WiFi设计应用,并尽可能保守地使用无线数据。

在输入和反馈机制及其易用性方面,iOS设备卓尔不群。您可从多点触摸屏幕(在iPad上,最多为11个手指)读取输入值、检查触摸压力(2015年推出的设备)、通过加速计和陀螺仪检测运动和倾斜、使用全球定位系统(GPS)进行定位、使用数字指南针确定面对的是哪个方向,以及使用距离(proximity)传感器和光传感器确定用户当前正如何使用设备。iOS可向应用程序提供很多有关用户当前在什么地方及其如何使用设备的信息,这使其变成了一个万能控制器,就像Nintendo Wii U和PlayStation DualShock 4一样,但功能超越了它们。

iOS设备还支持直接在应用程序中拍摄照片和视频,这打开了与现实世界交互的大门。当前市面上就有应用程序能够识别拍摄的物体并在线查找有关这些物体的参考资料(Amazon Mobile app)或实时地翻译印刷文件(Word Lens)。

最后,对于用户与应用程序交互时执行的每项操作,您都可提供反馈。这可以是在屏幕上能够看到的反馈,也可以是高品质音频以及通过震动(仅iPhone)带来的触觉反馈。作为开发人员,您将在本书中学习如何使用所有这些功能。

有关iOS平台的走马观花之旅到这里就结束了。从来没有哪种设备为开发人员定义并提供了如此多的功能,只要仔细考虑资源限制并相应地进行规划,将有大量的开发机会等着您。

要成为iOS开发人员,并非只需坐下来编写程序即可。您需要一台较新的 Intel Macintosh台式机或笔记本电脑,它运行Mavericks或Yosemite,硬盘至少有8GB的可用空间。开发系统的屏幕空间越大,就越容易营造高效的工作空间。您甚至可将Xcode切换到全屏模式,将分散注意力的元素都隐藏起来。虽然如此,我在13英寸MacBook Air中开发时也相当舒服,因此并非一定要使用多显示器系统。

假设您有运行Yosemite或El Capitan的Mac,还需要什么呢?好消息是需要的不多,且您无需花费一分钱就可以编写第一个应用程序,并在iOS设备上运行它。

如果没有Mac,该如何办呢?

 

iOS开发工具只有Mac版,可经常有人问我能否在Windows系统中进行iOS开发。这个问题的答案既是否定的,也是肯定的。虽然没有Windows本机版iOS开发工具,但可使用Adobe Flash Professional(https://www.adobe.com/products/flash.html )来开发iOS应用。我并非Flash拥趸,因此建议您采取另一种办法:使用iOS开发工具的托管(hosted)版——可从Windows系统访问它。vmOSX公司(http://virtualmacosx.com )提供了可远程访问的Apple开发工具托管版,让您能够在Windows和Linux系统乃至iOS设备上开发iOS应用。

虽然 Apple 网站上的消息令人迷惑,但用户不需要任何费用就可下载iOS SDK(软件开发包)、编写iOS应用程序并在Apple iOS模拟器或自己的设备上运行它们。无需加入开发人员计划就能在自己的设备上运行应用程序是Xcode 7新增的功能,因此如果使用的是早期的Xcode版本,就需要加入开发人员计划。

然而,收费与免费之间还是存在一定的区别。要获得iOS和SDK的 beta 版,必须加入开发人员计划。要通过App Store发布应用程序或将其发送给同事进行测试,也需支付会员费。

如果不确定加入开发人员计划是否适合您,也不用担心,您可随时加入。建议您先使用免费工具,等到要利用预先发布的软件或要将应用程序部署到App Store时,再加入开发人员计划。要成为免费成员,您只需有Apple ID即可。如果您还没有Apple ID,可前往https://appleid.apple.com 注册一个。

提示:

虽然使用Xcode 7可在自己的设备上运行应用程序,但这并不一定是最容易的开发方式。本书编写的大部分应用程序都可在iOS模拟器中运行,我们也将这样运行它们。显然,模拟器不能精确地模拟移动传感器输入和GPS数据等,但这些属于特殊情况,仅在本书后面才需要用到。

如果您选择加入付费的Apple开发人员计划,可考虑两种等级:标准计划(99美元)和企业计划(299美元),前者适用于要通过App Store发布其应用程序的开发人员,而后者适用于开发的应用程序要在内部(而不是通过App Store)发布的大型公司(雇员超过500)。您很可能想选择标准计划。

公司和个人都可选择标准计划(99美元)。在将应用程序发布到 App Store时,如果需要指出公司名,则在注册期间会给出标准的“个人”或“公司”计划选项。

首先,访问Apple开发人员注册页面(https://developer.apple.com/ programs/enroll/),如图1.2所示。

滚动到该页面底部,单击按钮Start Your Enrollment,再使用您的凭证登录。如果您还没有Apple ID,或者需要一个专门用于开发的新ID,可通过登录页面创建一个。

图1.2 访问开发人员注册网站以注册或创建新的Apple ID

在注册过程中,将要求您同意Apple开发人员条款,并收集有关您或公司的信息以及开发兴趣和经验方面的信息,如图1.3所示。

单击Continue按钮开始注册流程。在这个流程的末尾,将要求完成购买过程并启用自动续约,如图1.4所示。

图1.3 注册过程将收集有关您和开发经验方面的信息

图1.4 完成购买过程(这里没有显示相关的按钮),加入付费的开发人员计划

开发人员计划成员资格不会立刻生效。App Store刚发布时,新开发人员需要几个月才能加入计划并获得批准。然而,现在可能只需几个小时(最多一天),因此请耐心等待吧。

拜Mac App Store所赐,只需单击就可下载Xcode(iOS开发工具)。为此,在Dock中打开Apple Store,搜索Xcode并免费下载它,如图1.5所示。坐下来等待Mac下载这个大型应用程序(压缩后约3GB)。

如果您对最新的 Xcode beta版感兴趣,可直接从Developer Xcode网站(https://developer.apple.com/xcode/ )下载预览版。

下载完毕后,您将获得一个磁盘映像(从iOS开发人员网站下载预览版时)或安装程序(从Apple Store下载时)。如果必要,打开磁盘映像并将其中的应用程序复制到Mac的Applications文件夹中。可以安装多个版本的Xcode,因此请大胆安装开发中心提供的Beta版以及Mac App Store提供的最新稳定版。

图1.5 从Apple Store下载Xcode发布版

Xcode的有趣之处在于,它既是一个提供开发环境的应用程序,又封装了一系列独立的工具(如iOS模拟器),您可在Xcode中启动这些工具。与其他应用程序一样,可使用Finder或Launchpad来启动Xcode本身,如图1.6所示。

图1.6 完成大部分工作时,都将首先启动Xcode(可在文件夹Applications或Launchpad中找到它)

安装应用程序Xcode后,要使用它,可能还需安装其他软件。为此,从Finder或Launchpad启动Xcode。如果这是您首次使用Xcode,它很可能显示许可协议,再安装更新和其他组件(如图1.7所示)以支持移动开发。单击Install按钮安装组件。

图1.7 要使用Xcode,必须安装额外的组件

安装完成后,可选择Xcode菜单Quit退出Xcode。至此,开发环境就准备就绪了。虽然几章后才真正进行开发,但下一节将配置Xcode的几个选项,因此请确保正确地安装了这个软件。

获得Apple开发人员资格、加入付费的开发人员计划、下载并安装iOS开发工具后,您仍无法在设备上运行您编写的应用程序!为什么呢?因为您还没有创建开发供应配置文件(provisioning profile)。

在很多开发指南中,都在开始开发后才介绍这个步骤。在我看来,编写应用程序后您将希望能马上在设备中运行它。为什么?因为看到编写的代码在自己的iPhone或iPad上运行太爽了!

当前,Apple对iOS开发过程进行了控制,禁止开发小组将软件随便发布给任何人。其结果是,通过一个令人迷惑的过程将有关您(任何开发小组成员)和应用程序的信息加入到供应配置文件中。

开发供应配置文件标识了开发应用程序的开发人员,并包含应用程序ID以及将运行该应用程序的每台设备的唯一设备标识符。这种供应配置文件只能用于开发过程。为通过App Store发布应用程序或通过ad hoc发布给一组测试人员(或朋友)做好准备后,需要创建一个发布配置文件(distribution profile,只有加入了付费的开发人员计划才能这样做)。由于您刚涉足iOS开发,因此现在还不需要发布配置文件。

以前,创建仅用于开发过程的供应配置文件令人沮丧且耗时,这个过程是在iOS开发网站的Provisioning Portal部分完成的。在最新的Xcode版本中,Apple极大地简化了这个流程,使其非常简单,您只需将Apple ID加入Xcode,就可运行应用。

首先,启动Xcode,并选择菜单Xcode>Preferences加载首选项。在窗口Preferences中,单击按钮Accounts。单击左下角的按钮+,并从出现的菜单中选择Add Apple ID。在出现的对话框中,输入您的Apple ID,如图1.8所示,再单击Add按钮。完成后关闭Preferences窗口。

接下来,确保你的设备未锁定且连接到了计算机,再选择菜单Window>Devices。窗口最左栏的Devices部分应列出了您的iOS设备,如图1.9所示。在这里看到您的设备后,就说明准备就绪了!当您在iDevice上运行应用时,Xcode将自动为您创建所有的供应配置文件和证书。如果没有看到你的设备,请确认你使用的是官方的Apple Lightning电缆和支持的最新iOS版本。

图1.8 在Xcode中添加Apple ID

图1.9 打开Xcode Devices窗口,并查找您的设备

在后台

您可能想知道在设备上运行应用时发生的情况,这里大致地说一下。Xcode将向iOS developer portal添加一个唯一的标识符。该标识符标识了您的身份,并用于对您生成的应用程序进行数字签名,这称为签名身份(signing identity)。它还向Apple注册您的设备,使其能够运行您开发的应用程序(以及iOS测试版)。

Xcode将继续与Apple通信,以创建开发配置文件和唯一的应用程序ID,其中开发配置文件名为iOS Team Provisioning Profile。应用程序ID标识了iOS设备密钥链的共享部分,而您的应用程序有权访问这部分。

密钥链是iOS设备的一个安全信息存储区,可用于存储密码和其他重要信息。大多数应用程序都不共享密钥链空间,因此不能共享受保护的信息。然而,如果多个应用程序都使用相同的应用程序ID,它们将能够共享密钥链数据。

就本书而言,没有理由不让其中的示例应用程序共享一个应用程序ID,因此让Xcode为您生成ID即可。实际上,Xcode将创建一个“通用”应用程序ID,适用于您使用Team Provisioning Profile创建的每个应用程序。

最后,Apple的服务器将根据这些信息以及连接的iOS设备的唯一标识符,给Xcode提供一个完全的供应配置文件。这样,首次在该iOS设备上运行应用时,Xcode就会透明地将配置文件上传到这台设备。

注意:

只有加入了付费计划的开发人员才能访问成员中心并直接修改其供应配置文件。如果没有加入付费的开发人员计划,你将使用Xcode来自动进行配置并部署到自己的设备。

注意:

加入Apple Mac开发人员计划时,也将创建并维护类似的配置文件,用于将应用程序发布到Mac App Store。最大的差别在于,不同于iOS应用,可在任何计算机上运行Mac应用程序。在Mac开发人员计划中,证书用于将应用程序发布到Mac App Store以及测试Apple托管的服务(如Game Center和iCloud)集成。在iOS开发中,要在除iOS模拟器之外的其他设备上运行软件,必须安装合适的证书。

提示:

配置好一台用于开发的计算机后,就可导出签名身份和供应配置文件,进而轻松地配置其他工作站。为此,可选择菜单Xcode>Preferences打开Xcode首选项对话框,再单击工具栏中的Accounts图标。然后,单击账户列表底部的齿轮图标,并选择Export Accounts。这个选项将所有的开发配置文件和证书导出为一个包;还有一个Import Accounts选项,用于导入开发配置文件和证书。

为iOS开发做好准备后却没有任何回报看起来不值得,不是吗?为了对您所做的工作进行测试,下面尝试在您的iOS设备上运行一个应用程序。如果还没有下载项目文件,现在是访问http://teachyourselfios.com 并下载归档的绝佳时机。

提示:

如果您觉得心里没底,http://teachyourselfios.com 提供了一个教程,介绍了Xcode源代码控制方面的基本知识,包含如何连接到一个代码仓库,其中提供了本书所有示例项目的最新版本。

下面来运行这个应用程序。

1.在文件夹Hour 1/Projects中,选择文件夹iPad或iPhone,再打开文件夹Welcome,然后双击Welcome.xcodeproj在Xcode中打开一个简单的应用程序。打开该项目后,Xcode界面应该如图1.10所示。如果不完全相同,也不要紧。

图1.10 打开的项目应类似于这样。如果不完全一样,也不用担心

提示:

打开项目时,如果使用的Xcode版本比用来创建它的版本新,可能提示你对项目进行升级——根据最新的Swift语法对代码进行转换。如果出现这种情况,请让Xcode进行必要的修改。很可能不会做任何修改。使用每个新的Xcode beta版时,我们看到了这种提示;但还未遇到本书的iOS 9项目需要做必要修改的情况。

2.确保将您的iOS设备连接到了计算机。如果你没有iOS设备,请跳过这一步。

3.从Xcode窗口左上角的下拉列表Scheme选择您的iOS设备,如图1.12所示。这告诉Xcode生成项目时将其安装到该设备,而不是在模拟器中运行。如果您没有iOS设备,请根据您使用的项目版本选择相应的模拟器。

通常只能看到可运行当前应用程序的模拟器(iPhone Simulator或iPad Simulator),但在图1.11中,显示了所有的模拟器。当您使用的是针对iPhone的应用程序(它可在iPhone和iPad上运行)或通用应用程序(这将在本书后面更详细地介绍)时,将出现这种情况。这个屏幕截图是使用该项目的iPhone版本截取的,因此能够看到所有的模拟器。

4.确保您的设备已解锁,再单击Xcode工具栏左端的Run按钮,几秒钟后,该应用程序将安装到设备并启动。图1.12显示了该应用程序在4.7英寸的iPhone(iPhone 6)中的样子。

5.单击Xcode工具栏中的Stop按钮退出该应用程序。现在可以退出Xcode了,本章不会再使用它。

图1.11 选择要在哪里(设备还是模拟器上)运行应用程序

图1.12 祝贺您安装了自己创建的第一个iOS应用程序

当您单击Run按钮时,应用程序Welcome将安装到您的iOS设备并在其中启动。它将一直保留在该设备中,直到您手工将其删除。为此,只需按住Welcome图标直到它开始摇摆,然后像删除其他应用程序那样将其删除。开发证书将在120天后过期,到时使用该开发证书安装的应用程序也将停止工作。

提示:

  在首次使用新Apple ID的设备上运行应用程序(或开发账户有问题)时,Xcode可能发出有关设备配置的警告。

如果你看到这样的警告,只需在提示时单击Fix,所有的警告和错误都将有望消失。

 

查看供应配置文件

在您的设备上运行应用后,便可查看其中安装的供应配置文件。为此,可选择菜单Window>Devices打开Devices窗口,再右击您的设备并选择Show Provisioning Profiles。这将打开一个对话框,其中包含为您自动创建的iOS Team Provisioning Profile,如图1.13所示。

 

且慢,我有多台iOS设备!

前面讨论了如何配置单台用于测试的设备,但如果要将应用程序安装到多台设备,该怎么办呢?没有问题,只需将其他设备连接到计算机,并运行应用程序!这将自动配置它们。

如果使用的是付费的开发人员账户,而不是免费的Apple ID账户,Apple允许您在线分发应用程序以便进行测试,而无需使用Xcode来安装它们。在这种情况下,你可在1年内注册100台不同的设备,让它们能够运行你的应用程序。

图1.13 查看在设备上安装的供应配置文件

在接下来的几章中,将简要地介绍用来创建iOS应用程序的技术。我们的目标是让您快速了解这些工具和技术,然后开始开发。这意味着在几章后您才会编写第一个应用程序,但当您开始编码时,将具备成功创建各种应用程序所需的技能和知识。

在本章中,您下载并使用了应用程序Xcode,它自带了iOS模拟器,您在阅读本书的过程中主要使用的就是它。这两个应用程序很重要,本书将用两章的篇幅(第2章和第5章)介绍它们的功能和用法。

需要指出的是,几乎您运行的所有iPhone、iPad、iPod和Macintosh应用程序都是使用Apple开发工具创建的,而不管它们是由单个开发人员开发的,还是由大型公司创建的。这意味着您拥有一切工具,能够开发出与您曾运行过的应用程序一样功能强大的软件。

Swift是您编写应用程序时使用的语言。它提供了应用程序所需的结构,可用于控制逻辑以及应用程序运行时需要做出的决策。

如果您以前从未使用过任何编程语言,也不用担心,第3章将介绍所有的基本知识。即使您以前使用过其他编程语言,使用Swift进行iOS开发也将带给您独特的编程体验。这种语言自然且高度结构化,而且便于理解。创建几个项目后,Swift将退居幕后,以便能够将重点放在应用程序的具体细节上。

虽然Swift为iOS应用程序定义了结构,但Cocoa Touch定义了功能部件——类,让iOS设备能够完成特定的任务。CoCoa Touch只是一系列界面元素、数据存储元素和其他方便的工具,您可在应用程序中使用它们。

正如您将在第4章获悉的,您可使用的Cocoa Touch类有好几百个,而使用它们可完成的任务成千上万。本书只介绍一些最有用的类,并提供让您能够更深入地探索它们的指引。

iOS平台和Macintosh都使用称为模型-视图-控制器(MVC)的开发方法来设计应用程序的结构。设计最复杂的应用程序的结构时,了解为何使用MVC及其带来的好处有助于您做出正确的决策。虽然其名字听起来很复杂,但MVC实际上只是一种确保应用程序组织有序的方式,让您以后能够轻松地更新和扩展它们。第6章将更详细地介绍MVC。

Xcode是iOS开发的基石,设计和测试应用程序以及编写代码都是在Xcode中进行的,配置设备甚至将应用程序提交到App Store也是通过Xcode进行的。注意到了这里的重点吗?Xcode、Xcode还是Xcode。虽然本书后面将介绍Xcode的功能,请花点时间观看Apple提供的介绍性视频,以便对Xcode有大致了解。为此,启动Xcode,再选择菜单Help>Xcode Help。

您对工具越熟悉,就越能快速地使用它们创建可用于生产环境的应用程序。

本章简要地介绍了iOS平台及其功能和局限性。您了解了各种iOS设备的图像功能、内存量以及众多可在应用程序中向用户提供独特体验的传感器。我们还讨论了Apple iOS开发工具、如何下载并安装它们以及各种付费开发人员计划之间的差别。为准备好实际进行iPhone开发,您探索了如何在Xcode中创建并安装开发供应配置文件(这在很大程度上说是自动完成的),以及如何在iOS设备上运行应用程序。

最后,本章简要地讨论了本书将介绍的开发技术,它们是iOS开发工作的基础。

问:我以为低端iPhone和iPad至少有16GB内存,而高端型号至少有128GB内存,是这样的吗?

答:向公众宣传的存储容量指的是可用于存储应用程序、歌曲等的存储空间,这与可用于执行程序的内存不是一码事。如果Apple在以后的iOS版本中支持虚拟内存,较大的存储空间将可用于增加可用内存。

问:我应针对哪种平台进行开发?

答:这取决于您的目的。如果要获得最大的用户群,应开发适用于iPhone、iPad和iPod Touch的通用应用程序,这将本书后面通过几个项目进行介绍。如果要最大限度地利用硬件,当然可以只针对某些设备特有的功能进行开发,但这可能缩小潜在的用户群。

问:为何iOS平台不是开放的?

答:这个问题很好。长久以来,Apple一直致力于对用户体验进行控制,确保无论用户如何设置其设备以及设备是Mac、iPhone还是iPad,用户体验都很不错。通过将应用程序与开发人员关联起来并实施批准措施,可减少有害的应用程序破坏数据或给用户带来负面影响。鉴于App Store的应用程序接近150万个,我想Apple这样做无疑是正确的。

1.您在处理iOS设备屏幕时使用哪种单位?

  A.em。

  B.像素。

  C.点。

  D.皮卡。

2.加入个人iOS开发人员计划的年费是多少?

  A.99美元。

  B.199美元。

  C.299美元。

  D.免费。

3.要在设备上运行应用,必须安装什么?

  A.供应配置文件。

  B.供应中心。

  C.配置文件供应。

  D.供应ID。

4.必须加入付费的开发人员计划才能下载哪种软件?

  A.iOS。

  B.OS X。

  C.App Store。

  D.Xcode Beta版。

5.哪种iPad新增了视频拍摄功能?

  A.iPad 1。

  B.iPad 2。

  C.Retina iPad。

  D.iPad Air。

6.Retina屏幕是哪个型号的iPhone最先采用的?

  A.iPhone 4s。

  B.iPhone 4。

  C.iPhone 3GS。

  D.iPhone 5。

7.较新的iPad的缩放因子是多少?

  A.1。

  B.2。

  C.3。

  D.4。

8.iPhone 5哪方面的改变影响iOS开发?

  A.屏幕高度。

  B.屏幕宽度。

  C.像素密度。

  D.像素形状。

9.Xcode自动为您创建的供应配置文件名为什么?

  A.iOS Profile。

  B.iOS Team Provisioning Profile。

  C.App Provisioning Profile。

  D.Testing iOS Profile。

10.iOS设备最少包含多少内存?

  A.128MB。

  B.512MB。

  C.1024MB。

  D.2048MB。

1.C。处理iOS设备屏幕时,使用的是点而不是像素。

2.A。要加入个人开发人员计划,年费为99美元。这让您能够在自己的设备上运行应用,还能够将创建的应用提交到App Store。

3.A。供应配置文件将设备关联到iOS开发人员账户。

4.D。付费的开发人员可先于普罗大众访问并下载Xcode beta版。

5.B。最初的iPad没有视频拍摄功能。直到iPad 2后,Apple的平板电脑才能拍摄视频。

6.B。iPhone 4是第一款采用Retina屏幕的iOS设备。

7.B。在售的所有iPad的屏幕的缩放因子都为2。

8.A。iPhone 5增加了屏幕高度,给开发人员出了难题。

9.B。虽然在设备上运行应用很容易,只需将其连接到开发计算机并单击Run,但Xcode将在幕后安装iOS Team Provisioning Profile,以做好所有的准备工作。

10.A。最初的iPhone只有128MB内存,真是难以置信!

1.查看网上有关开发人员资格的信息,再下载并安装开发工具。如果您没有按本章介绍的步骤做,这将是一个重要的练习,应在进入下一章前完成。

2.查看iOS开发中心提供的资源。Apple发布了多个介绍性视频和教程,可将其作为本书的补充资料。


本章将介绍:


  • 如何在Xcode中新建项目;

  • 代码编辑和导航功能;

  • 在什么地方给项目添加类和资源;

  • 如何修改项目属性;

  • 针对iOS设备和iOS模拟器编译应用程序;

  • 如何解读错误消息;

  • iOS模拟器的功能和局限性;

  • 在iOS模拟器中添加新设备。

您将在两个应用程序中完成主要的开发工作:Xcode和iOS模拟器,它们提供了设计、编写、测试iPhone和iPad应用程序所需的所有工具。另外,不同于其他平台,它们是完全免费的。

本章介绍使用Xcode代码编辑工具和iOS模拟器所需的基本知识,并让您获取一些使用它们的经验。Xcode的界面创建工具将在第5章介绍。

当您需要编写代码(实际上是输入语句让iOS设备神奇地工作)时,应考虑使用Xcode。Xcode是一种集成开发环境(IDE),让您能够管理应用程序的资源,编辑将不同部分组合起来的代码和用户界面(UI)。

按第1章的说明安装开发工具后,便可在硬盘根目录的文件夹Applications或Launchpad中找到Xcode了。本章介绍Xcode工具的基本用法,如果您还没有安装这些工具,请现在就安装。

启动Xcode。经过一段时间后,将出现如图2.1所示的Welcome to Xcode窗口。

图2.1 在Welcome to Xcode窗口中新建或打开项目

可取消选中复选框Show this window when Xcode launches以禁止显示该窗口。第4章将详细介绍Xcode中的文档系统,它涉及的范围非常广泛。就现在而言,单击左上角的关闭按钮(X)退出欢迎屏幕。

大多数开发工作都以创建Xcode项目开始。项目是一系列与应用程序相关联的文件,还包含根据这些文件生成可运行软件所需的设置。这包括图像和源代码,还有一个这样的文件,即它描述了组成用户界面的对象及其外观。

1.选择项目类型

要新建项目,可在Xcode菜单中选择File>New Project(Shift + Command + N)。请现在就这样做,Xcode将要求您为应用程序选择一种模板,如图2.2所示。Xcode模板包含让您快速进行开发所需的文件。

虽然可从空白开始创建应用程序,但使用模板可节省大量时间。在本书中,将根据要创建的应用程序类型使用多种模板。

在New Project窗口的左侧,显示了可供选择的模板类别,我们的重点是类别 iOS Application,因此请确保选择了它。

右侧显示了当前类别中的模板以及当前选定模板的描述。就这里而言,请单击模板Single View Application(单视图应用程序),再单击Next(下一步)按钮。

您选择模板后,Xcode将要求您指定产品名、组织名和公司标识符。产品名就是应用程序的名称;组织名可以随意设置,如您的姓名或公司的名称;公司标识符通常是创建应用程序的组织或个人的域名,但按相反的顺序排列。产品名和公司标识符组成了束标识符,将您的应用程序与其他iOS应用程序区分开来。

例如,在本章中,我们将创建一个名为HelloXcode的应用程序,这是产品名。我的域名是teachyourselfios.com,因此将公司标识符设置为com.teachyourselfios。即便您没有域名,也必须输入点内容,因为这一项必须填写。

图2.2 要新建项目,首先需要选择合适的模板

将产品名设置为HelloXcode,再提供您选择的组织名和公司标识符。

从下拉列表Language中选择Swift(Apple首选的编程语言),并从下拉列表Device中选择您使用的设备(iPhone或iPad)。不要选中任何复选框,屏幕将类似于图2.3所示。

图2.3 为应用程序指定产品名、公司名和公司标识符以及开发平台

提示:

您可能想知道这些复选框都是做什么用的。Core Data是一种存储应用程序数据的高级方式,随着应用程序的增大,这些数据可能变得很重要。复选框Include Unit Tests和Include UI Tests指定自动编写测试,用于测试应用程序的功能。随着编写的应用程序越来越大,你可能对这些复选框感兴趣。

这些主题超出了本书的范围,要更深入地了解Core Data和测试工具,您可使用下一章将讨论的Xcode文档系统。

对设置满意后,单击Next按钮。Xcode将要求您指定项目的存储位置。切换到硬盘中合适的文件夹,确保没有选择复选框Source Control,再单击Create(创建)按钮。Xcode将创建一个名称与项目名相同的文件夹,并将所有相关联的模板文件都放到该文件夹中。

提示:

在项目文件夹中,有一个扩展名为.xcodeproj的文件。退出Xcode后,可通过打开该文件来返回到项目工作空间。

2.辨别方向

在Xcode中创建或打开项目后,将出现单个窗口,您将使用它来完成,从编写代码到设计应用程序界面在内的所有工作。如果这是您第一次接触Xcode,令人眼花缭乱的按钮、下拉列表和图标将让您感到恐惧。为让您对这些东西有大致认识,下面首先介绍该界面的主要功能区域,如图2.4所示。

图2.4 首次使用Xcode界面时很容易迷失方向

注意:

默认情况下,Debug和Utility部分被隐藏。要显示它们,可分别单击工具栏中倒数第二个按钮和最后一个按钮。在工具栏的最右端,有三个视图控制按钮,其中第一个用于隐藏/显示导航器。通过阅读本书,您将熟悉每个区域提供的功能。就现在而言,我们将重点放在导航器和编辑器上。

如果该界面的显示情况与您预期的完全不同,可使用Xcode菜单栏中的View菜单来显示工具栏、导航器或其他缺失的部分。

3.在项目中导航

导航器可在众多不同的模式下运行——从导航项目文件到搜索结果和错误消息。要修改运行模式,可使用导航器上方的图标,其中的文件夹图标显示项目导航器,您在大多数情况下都将在这种模式下运行导航器。

项目导航器显示一个表示项目的顶级图标(它后面有项目名),这是项目编组。您可单击项目组左边的展开箭头将其展开,这将显示组成应用程序的文件和编组。下面来看看几分钟前创建的项目HelloXcode。

在Xcode的项目导航器中,展开项目导航器,您将看到与该应用程序相关联的3个文件夹,图2.5突出显示了它们。

图2.5 使用项目导航器浏览项目资源

注意:

您在Xcode中看到的文件夹是逻辑编组。在项目文件夹中并不能找到所有这些文件,也找不到相同的文件夹结构。Xcode布局设计用于帮助您轻松地查找文件,而并非文件系统结构的镜像。

在项目编组中有下面两个子组,它们可能很有用。

如果您进一步展开,将发现还有用文件夹图标标识的文件Assets.xcassets,这是一个素材目录,稍后将更深入地介绍。

提示:

如果要添加其他的逻辑文件编组,可使用菜单File>New>Group。如何组织项目由您决定。

利用过滤寻找目标

导航器底部有一个小型工具栏,您可使用它来过滤或调整当前显示的内容。例如,在项目导航器中,可在搜索文本框中输入文本,以便只显示匹配的项目资源(编组或文件)。您还可以使用该文本框左边的闹钟图标,以便只显示最近编辑过的文件。闹钟图标旁边的方框用于显示不受源代码控制的文件;有关源代码控制的更详细信息,请参阅本书的在线附录。

显示的过滤选项随上下文而异,即随导航器当前显示的内容而异。Xcode提供了大量的工具提示,当您遇到新区域和功能时,务必使用工具提示来探索它们。

4.在项目中新增代码文件

虽然Apple iOS应用程序模板提供了不错的开发起点,但您将发现需要在项目中添加其他类文件或界面文件,对高级项目来说尤其如此。要在项目中新增文件,首先选择要在其中添加文件的编组(通常是项目代码编组),再选择菜单File>New或单击导航器左下角的+按钮。Xcode将显示一个与New Project窗口相似的界面,要求您指定要在项目中添加的文件类别和类型,如图2.6所示。如果对示意图中显示的选项不熟悉,请不用担心,本书从头到尾都将提供相应的指南。

能否手工添加空文件?

您可以将现有文件拖放到Xcode编组文件夹中,从而将其复制到项目中。然而,就像项目模板让您能够节省实现时间一样,Xcode文件模板也如此。它们经常包含需要实现的各种功能的骨架。

图2.6 使用Xcode在项目中添加文件

5.在项目中添加资源

很多应用程序都需要声音或图像文件,您需要在开发过程中将其集成到项目中。显然,Xcode不能帮助您创建这些文件,因此您需要手工添加它们。为此,只需单击它们并将其拖放到Xcode的项目代码编组中。Xcode将询问您是否要复制文件,请务必选中指定要复制文件的复选框,让Xcode将文件放到项目文件夹的特定位置。

在文件夹Hour 02\Projects中,有个Resources文件夹,其中包含文件Test.wav。将该文件拖放项目代码编组中,并指定必要时复制它,如图2.7所示。通过复制文件,可确保它们被正确地放到项目中,让您编写的代码能够访问它们。

提示:

如果您将一个包含多个文件的文件夹拖放到项目中,Xcode默认将自动创建一个包含所有这些文件的编组。

图2.7 将文件Test.wav拖放到项目代码文件夹中,并选择必要时复制它

6.删除文件和资源

如果您在项目中添加了不需要的东西,可轻松地将其删除。要将文件或资源从项目中删除,只需在项目导航器中选择它,再按Delete键即可。Xcode将询问您要删除项目中对该文件的所有引用并将文件移到回收站,还是只想删除对文件的引用,如图2.8所示。

图2.8 删除对文件的引用将保留文件本身

如果您选择只删除对文件的引用,文件本身将保留,但在项目中再也看不到它。

注意:

如果Xcode找不到它认为包含在项目中的文件,将在Xcode界面中用红色标出该文件。如果您在Finder中不小心删除了项目文件夹中的文件,便可能出现这种情况;另外,如果Xcode知道项目将创建某个应用程序文件,但应用程序还未创建它,也将出现这种情况。在后一种情况下,可忽略Products编组中以红色显示的.app文件,而不会有任何问题。

7.使用Xcode素材目录

从Xcode 5起,在管理要在项目中包含的文件方面,Apple提供了一种更好的新方法:素材目录(asset catalog)。素材目录提供了一个中央地点,用于存储和管理项目的所有数据文件;它主要用于存储图像,但也可存储其他数据。

相比于将图像文件夹拖入Xcode,素材目录有两个优点。首先,它提供了清晰的界面,可用于指定Retina图像、非Retina图像和随设备而异的图像;其次,可对素材目录中的图像“切割(sliced)”,这是Apple使用的一个术语,指的是指定图像的一些区域,这些区域在图像放大时将被重复。第7章将使用这项功能。

注意:

素材目录不仅给开发人员提供了帮助,还让Apple能够只提供设备所需的图像:不再在iPhone应用程序中存储iPad图像,反之亦然。这种功能是iOS 9为缩小应用程序的规模而引入的。

(1)新增素材目录

在Xcode中新建的每个项目都包含一个默认素材目录,名为Assets.xcassets。如果您打开的是旧项目,或者需要创建多个素材目录,可新增素材目录。为此,可选择菜单File>New>File,再在New File对话框中依次选择Resource和Asset Catalog,如图2.9所示。

图2.9 根据需要新建素材目录。所有新建的Xcode项目都默认包含一个素材目录

(2)将文件加入素材目录

要查看素材目录的内容,可在项目导航器中选择它(通常为Assets.xcassets)。屏幕将刷新,将内容区域分成两栏,其中左边列出了资源的名称,而右边显示了选定的资源。默认情况下,素材目录包含一项:AppIcon。它是特殊的占位符,用于指定应用程序图标。

这里重点介绍如何给素材目录添加新内容。我们的项目HelloXcode需要使用文件Background.png,这个文件可在文件夹Hour 2\Projects\Resources中找到。下面就来将这个文件加入素材目录。

1.在Finder中打开包含文件Background.png的文件夹Resources。

2.在项目导航器中,选择文件Assets.xcassets。

3.将文件Background.png拖放到素材目录的左边那栏中,如图2.10所示。

这就大功告成了。不会询问您是否制作拷贝—什么消息都不会出现。您首次将图像加入到了素材目录。

在本书的所有项目中,我们都将使用这种方法将图像加入项目。在示例中,我通常将整个文件夹拖入素材目录,以添加多个文件。这样做将在素材目录中添加一个编组,让素材组织有序。

图2.10 将文件从Finder拖放到素材目录列表中,从而将其加入素材目录

提示:

如果您更喜欢单击而不是拖放,可使用素材目录列表底部的添加按钮(+)和删除按钮(−)。

注意:

当您查看素材目录中的图像时,将在窗口右下角看到一个Show Slicing按钮。切割让您能够在图像中指定切片,当图像放大时,将重复切片以填充新增的区域。这个概念听起来相当奇怪,但您将发现它很有用,让您能够创建较小的图像,它们能够动态地增大,以填充较大的区域。第7章将更详细地介绍这项功能。

(3)Retina素材

将图像加入素材目录并查看它时,将看到一个有趣的现象:显示了它的三个版本,分别用1x、2x和3x标识,如图2.11所示。它们分别表示非Retina图形(1x)、Retina图形(2x)和iPhone 6+/6s+ Retina图形(3x)。

无论是在水平还是垂直方向上,Retina图形的分辨率都是非Retina图形的两倍(因此名为2x)。iPhone 6+/6s+屏幕的水平分辨率和垂直分辨率都是非Retina屏幕的三倍(因此名为3x)。

虽然这些图像素材是三个独立的图形文件(1x、2x和3x)。但在素材目录中用一个图像名表示。将图像加入素材目录后,如果要添加相应的Retina图像,只需将它分别拖放到2x和3x指定的位置,其他的工作都将由素材目录自动完成。

Apple要求所有应用程序都包含Retina资源,您创建应用程序图形时必须考虑这一点。给非iPhone 6+/6s+ Retina图像命名时,通常添加后缀@2x。例如,图像Background.png的Retina版名为Background@2x.png。iPhone 6+/6s+ Retina版本使用后缀@3x,如Background@3x.png。

如果您使用素材目录,并将图像拖放到相应的位置,则使用什么名称无关紧要;但如果您图像拖放到素材目录,则使用上述命名规则可将Retina和非Retina图像正确地配对。

图2.11 素材目录记录了图像的Retina版和非Retina版

提示:

在代码中指定图像时,总是使用非Retina名(例如,在素材目录中列出的名称)。应用程序运行时,iOS将在需要时自动将图像替换为Retina版。换句话说,您无需做任何特殊的工作,以确保使用正确的图像版本。您只需将图像加入素材目录,确保定义了1x、2x和3x图像,并使用素材目录中列出的名称引用图像。

有关图像就介绍到这里,下面介绍如何编辑代码。

要在Xcode中编辑代码,只需使用项目导航器找到要编辑的文件,再单击文件名。文件中可编辑的内容将显示在Xcode界面的编辑器中,如图2.12所示。

图2.12 依次选择编组和文件,再进行编辑

Xcode编辑器的工作方式与其他文本编辑器类似,但新增了多项不错的功能。为了对其工作方式有基本了解,打开项目HelloXcode的项目代码编组,再单击ViewController.swift,以便开始编辑源代码。注意到编辑器上方显示了当前编辑的文件的路径,单击路径的任何一部分都将打开一个下拉列表,让您能够快速切换到相应路径处的其他文件。路径的左边有前进和后退箭头,让您能够遍历最近编辑过的文件,就像在浏览器中遍历访问过的页面一样。

在这个项目中,我们将使用称为标签(label)的界面元素在设备屏幕上显示文本Hello Xcode。与您编写的大部分应用程序一样,该应用程序也将使用一个方法来显示这句问候语。方法不过是一个代码块,它在某种事情发生时执行。在这个示例中,将使用一个名为viewDidLoad的现有方法,它在应用程序启动后立即开始执行,以加载应用程序的界面。

1.使用符号导航器(Symbol Navigator)在代码间切换

要找到源代码文件中的特定方法或属性,最简单的方法是使用符号导航器。而要打开该导航器,只需单击项目导航器图标右边的那个图标。符号导航器让您能够展开项目类,以显示定义的所有方法、属性和变量,如图2.13所示。如果您选择一个列表项,将跳转到相应的源代码行并高亮显示它。

请切换到符号导航器并展开列表项ViewController。这是这个应用程序使用的唯一一个类。接下来,在列表中找到并选择viewDidLoad,Xcode将跳转到该方法的第一行。单击下一行,并开始编辑吧!

提示:

当您编辑文件时,编辑器上方显示的路径将以光标当前所处位置对应的符号标签结尾。单击该标签将显示一个列表,其中包含当前代码中定义的符号。选择一个符号可切换到相应的位置。

图2.13 符号导航器让您能够在方法和属性之间快速跳转

2.使用代码自动完成功能

使用Xcode编辑器输入如程序清单2.1所示的代码,以实现方法viewDidLoad。在包含文本“// Do any additional setup after loading the view, typically from a nib”的代码行(注释)下方新建一行,并输入程序清单2.1中的代码行。

程序清单2.1 您的第一次编码

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var myMessage:UILabel
    var myUnusedVariable: String
    myMessage= UILabel (frame:CGRectMake(30.0,50.0,300.0,50.0,50.0))
    myMessage.font=UIFont.systemFontOfSize(48.0)
    myMessage.text="Hello Xcode"
    myMessage.textColor=UIColor (patternImage: UIImage (named:"Background")!)
    view.addSubview(myMessage)
    NSLog("Hello Xcode, Again")
}

警告:欲速则不达

如果您决定马上运行该应用程序,将发现您输入的代码不管用!原因是这里故意加入了一些错误,本章后面将修复它们。

注意:

就现在而言,无须理解这些代码的功能,这里只想让您获得一定的Xcode编辑器使用经验。简单地说,这段代码在屏幕左上角创建一个内容为Hello Xcode的标签对象,设置标签的文本、字体、字号和颜色,再将其加入到应用程序窗口中。在屏幕上显示消息Hello Xcode后,这个应用程序在Xcode调试器中显示一条消息(Hello Xcode (again))。

当您输入代码时,注意到发生了有趣的事情。每当您到达Xcode认为它知道您接下来要输入什么内容的地方时,它就显示代码的自动完成版本,如图2.14所示。

要接受自动完成建议,只需按Tab键,这将插入建议的代码,就像您输入了它们一样。如果有多项自动完成建议,您可使用上下箭头键选择您要接受的建议,再按 Tab 键。Xcode将尝试完成方法名、您定义的变量以及它能够识别的与项目相关的其他内容。

图2.14 Xcode在您输入时自动完成代码

输入方法名后,您很可能还需提供参数(就方法systemFontOfSize而言,参数为一个指定文本大小的浮点数)。为此,可使用箭头键在参数之间移动,并输入所需的值;也可按Tab键在参数之间移动。

修改代码后,可选择菜单File>Save保存文件。

注意:

除自动完成代码外,Xcode还自动插入与您输入的左大括号或小括号配套的右大括号或小括号。换句话说,如果您输入{,Xcode将自动添加配套的}。您可在Xcode首选项Text Editing中禁用这项功能,为此可选择菜单Xcode>Preferences>Text Editing>Editing。

3.使用搜索导航器查找代码

通过使用搜索导航器(Search Navigator),在整个项目中搜索文本就是小菜一碟。要使用这种搜索功能,可单击导航器上方的图标栏中的放大器图标,这将在导航器中显示一个搜索文本框,您可在其中输入任何要查找的内容。按回车键将显示搜索结果,如图2.15所示。单击搜索框下方的按钮可调整搜索范围—默认为In Project(在项目的所有文件中搜索);搜索范围按钮右边有一个下拉列表,可用于指定搜索时是否区分大小写。

搜索结果将显示在搜索文本框下方,还有包含您搜索的文本的文件片段。单击搜索结果将在编辑器中打开相应的文件,并跳转到包含搜索内容的那行。

提示:

如果要在当前编辑的文件中查找字符串,可选择菜单Edit>Find(Command+ F)在编辑器顶部显示传统的Find文本框。这让您能够在给定文件而不是整个项目中进行快速查找(或查找并替换)。

更有趣的是,您可使用搜索导航器底部的过滤文本框对搜索结果进行过滤。还可单击搜索导航器顶部的 Find 标签,以切换到替换模式,这让您能够在整个项目中进行查找并替换。

图2.15 使用搜索导航器在整个项目中查找
文本

4.添加MARK、TODO和FIXME标记

有时候,根据符号或使用搜索功能导航代码的效率不高。为使用普通的英语标识重要的代码片段,可在代码中插入特殊格式的注释。这些注释不会在应用程序中添加任何功能,而只是在代码中创建逻辑分节。但您单击编辑器上方的路径的最后一部分时,这些分节将与其他代码符号一起显示出来。

有下面三种类型注释标记:

// MARK: - <label name>
// TODO: <text you want to remember>
// FIXME: < text you want to remember >

MARK在Symbol下拉列表中插入一条水平线,可用于根据功能或负责的程序员将不同的方法编组。

标记TODO和FIXME在Symbol下拉列表中插入一个字符串;顾名思义,它们让您能够牢记需要修复或完成的任务。

例如,要添加一个名为Methods for handling memory management分节和一条水平线,可输入如下代码。

// MARK: - Method for handling memory management 

在代码中添加并保存该标记后,Symbol下拉列表将相应地更新,如图2.16所示。从Symbol下拉列表中选择标记时,将跳转到相应的代码部分。

图2.16 标记可在代码中创建逻辑分节

5.使用助手编辑器

对于那些足够幸运且有大型显示器的读者来说,可利用Xcode的助手编辑器(Assistant Editor)模式。在下一章,您将学习为创建程序而需要编辑的各种文件。届时您将很快认识到,大多数程序功能都是通过编辑两个文件实现的:界面文件(被称为故事板)和Swift(.swift)文件(其中包含让界面能够正常运行的代码)。您还将发现,当您修改其中一个文件时,通常也需要修改另一个。

Xcode提供的助手编辑器模式可简化这种来回编辑的工作。助手编辑器自动监视您打开进行编辑的文件,并在它右边(如果您愿意,也可指定在下边)打开您也需要进行编辑的相关文件,如图2.17所示。

要在标准编辑器模式和助手编辑器模式之间切换,可单击Xcode工具栏中Editor部分的第一个和第二个按钮。

注意:

在助手编辑器的右上角,注意到有一个+图标和一个X图标。+图标在屏幕上添加再添加一个助手编辑器,而X图标关闭当前助手编辑器。

要指定如何在屏幕上添加助手编辑器以及使用多个助手编辑器时将出现的情况,可使用菜单View>Assistant Editor。

6.启动选项卡式编辑功能

选项卡式编辑类似于Web浏览器中的选项卡式浏览。通过使用选项卡式编辑,可同时打开大量文件,并通过单击编辑器顶部的标签在这些文件之间切换。

要新建选项卡,可选择菜单File>New>Tab(Command + T)。这将新建一个选项卡,其中包含当前编辑的文件的内容。要指定选项卡显示的内容,可在项目导航器中单击相应的文件。可重复上述操作,创建任意数量的选项卡,并在各个选项卡中显示所需的文件,如图2.18所示。

图2.17 助手编辑器在当前编辑的文件右边打开相关的文件

图2.18 利用选项卡同时打开多个编辑器

要关闭选项卡,可将鼠标指向相应的标签,再单击它左边出现的X图标。当您关闭选项卡时,Xcode将自动保存它显示的文件,您无须显式地执行命令Save。

再见了,快照

在Xcode 7之前,Xcode编辑器包含快照功能。快照让你能够随时存储代码的拷贝,并比较(或恢复到)不同的版本。

不幸的是,这项功能已被删除。要利用这样的功能,你需要使用Xcode源代码控制。有关Xcode源代码控制功能简介,请阅读网上的附录A。快照功能被删除真是令人遗憾,它是一种快捷易用的版本控制功能,没有源代码控制功能的开销,也不像它那样难学。

提示:

编写好源代码后,便可生成并运行应用程序了。生成过程涉及多个步骤,其中包括编译和链接。编译指的是将您输入的指令转换为iOS设备能够理解的东西;而链接指的是将代码与应用程序运行所需的框架合并。在这些步骤中,Xcode将显示它发现的所有错误。

生成应用程序前,必须指定生成的应用程序将在哪种平台上运行:iOS模拟器还是iOS设备。

1.选择生成方案

要指定要如何生成代码,可使用Xcode窗口左上角的下拉列表Scheme。这实际上是两个独立的下拉列表,单击的位置决定了显示哪个下拉列表。如果您单击右边,将显示可针对哪些设备生成应用程序,如图2.19所示。

图2.19 修改生成方案,指定针对iOS设备还是iOS模拟器生成应用程序

您可在iOS设备(iPhone或iPad设备)、iPhone模拟器和iPad模拟器之间选择。对大多数开发而言,都应使用模拟器,它的速度更快,因为无需每次做简单的修改后都将应用程序传输到设备。

默认情况下,您选择的方案使用调试器运行应用程序。这让您能够跟踪应用程序的执行过程,有助于发现应用程序中的问题。对于要提交给App Store的应用程序,应切换到一种发行配置。第24章将更详细地介绍调试。

2.生成、分析和运行应用程序

要生成并运行应用程序,单击Xcode工具栏中的Run按钮(Command + R),图2.19显示了这个按钮。根据您的计算机的速度,这可能需要一两分钟才能完成。随后,应用程序将传输到iOS设备(如果指定了相应的生成方案并连接了iOS设备)并运行,或者在选定的iOS模拟器中运行。

如果只想生成应用程序而不运行它(这对检查错误很有用),可选择菜单Product>Build (Command + B)。一种更佳的选择是,选择菜单Product> Analyze(Command + Shift + B),以找出生成错误以及应用程序逻辑中不影响生成但可能导致程序崩溃的问题。

提示:

在生成过程中,将生成很多中间文件。它们占用磁盘空间,且项目本身并不需要。要删除这些文件,可选择菜单Product>Clean。

图2.20显示了应用程序HelloXcode在iOS模拟器中的运行情况。现在请尝试单击Xcode工具栏中的Run按钮,以生成并运行您的应用程序版本。

图2.20 iOS 模拟器让您能够快速而轻松地测试代码

如果按前面的步骤做了,您的应用程序将不能运行。前面要求您输入的代码存在两个问题,下面来看看这些问题。

3.在问题导航器中修复错误和警告

当您生成和分析应用程序时,可能从Xcode那里获得三种类型的反馈:错误、警告和逻辑问题。警告是可能导致应用程序行为不当的潜在问题,用黄色警告符号标识;而错误将禁止应用程序运行。如果应用程序存在错误,您将无法运行它。表示错误的符号是禁行标志,这非常合适。Xcode在分析过程中发现的逻辑问题用蓝色标记表示。这些Bug和相关的文件都将显示在问题导航器(Issue Navigator)中,如图2.21所示。如果在生成或分析过程中发现问题,问题导航器将自动显示。您还可手工打开它,方法是单击导航器上方的工具栏中的惊叹号图标。

要跳转到错误所在的代码,只需在问题导航器中单击该错误。这将显示相应的代码,而其下方将显示错误消息。

提示:

如果当前编辑的文件包含错误,而您却试图生成、运行或分析代码,将在屏幕上立刻看到错误,而无需在问题导航器中前后移动。另外,在窗口最右侧(编辑器正上方)有前进和后退按钮,您可使用它们快速遍历错误。然而,仅当存在错误时,这些按钮才会出现。

图2.21 使用问题导航器查找并修复代码中的错误

您首次生成Hello Xcode时,将出现错误“Extra argument in call!”,如图2.21所示。原因是函数CGRectMake接受4个参数并使用它们来创建一个表示标签的矩形,但我们输入了5个数字。在函数CGRectMake的调用中,删除最后一个数字以及它前面的逗号。您修复错误后,问题导航器将立即更新,显示一条警告,如图2.22所示。

图2.22 有些错误或警告仅当您解决了另一个问题后才能检测到

如果您觉得CGRectMake使用的数字是用来定位的,则可能想改变它们,并了解它们是如何控制文本在设备屏幕上的显示位置。前两个数值表示文本标签距离屏幕上边缘和下边缘的位置,后两个数值表示文本标签的宽度和高度。

该警告指出,代码中有一个未使用的变量:myUnusedVariable。请记住,这只是一个有帮助的警告,并非不一定是问题。如果将该变量删除,这条警告消息将消失;但即使不将它删除,应用程序也能够运行。将ViewController.swift中的代码行var myUnusedVariable: String删除,这将修复警告,问题导航器变成空的,可以运行该应用程序了。

单击Run按钮,HelloXcode将在iOS模拟器中运行;另外,您将注意到Xcode显示了调试器,其中包含消息Hello Xcode (again),如图2.23所示。这条消息是命令NSLog生成的,演示了与iPhone应用程序界面无关的输出将出现在什么地方。

图2.23 HelloXcode终于正常运行,它在iPhone屏幕和Xcode调试器中显示了输出

注意:

首次运行iOS模拟器时,可能出现一条消息,询问是否要在Mac上启用开发模式(Developer Mode)。启用开发模式让模拟器与Xcode无缝地协作,不再每次启动时都要求您输入密码。

警告:修复问题后又出现了新问题

正如您在这里看到的,有时并不能检测到所有错误并在问题导航器中显示出来。您可能发现,修复一两个问题后,却出现了以前未检测到的新错误。相反,有时候当您修复错误后,将发现相关的假性错误消失了。

在结束对Xcode界面的简要介绍之前,请将注意力转向稍微不同的东西:描述项目本身的属性。必须在什么地方设置应用程序的图标、启动屏幕、支持的设备朝向等,那么是在什么地方呢?答案是项目的plist文件。

这个文件位于项目的主代码文件夹中,它是在您新建项目时自动创建的,名为Info.plist结尾。虽然您可以直接编辑该plist文件中的值,但Xcode提供了一种更简单的方法。下面来看看如何做。

切换到项目导航器。单击HelloXcode的顶级项目图标(蓝色纸片图标),并确保在右边那栏中,Target下方的应用程序图标呈高亮显示。编辑器区域将更新,顶部出现了多个选项卡,如图2.24所示。

图2.24 项目属性控制着应用程序的几项重要设置

第一个选项卡名为General,让您能够设置项目的众多常规属性(版本、支持的设备等);第二个选项卡名为Capabilities,包含一些开关,让您能够启用一些iOS应用程序功能,如iCloud、Game Center和后台支持(在后台运行)。修改这两个选项卡中的设置时,实际上修改的是项目的plist设置。

第四个选项卡名为Info,让您能够直接访问plist文件的内容。您在前两个选项卡中所做的修改,将在选项卡Info中反映出来。是的,这里没有介绍第三个选项卡(Resource Tags),它用于创建必要时可从Apple服务器加载的应用程序资源编组,而我们暂时不需要应用程序资源编组。

并非所有应用程序都支持所有的设备朝向(纵向、横向朝右、横向朝左、纵向倒转),对这一点您肯定很清楚。要指定应用程序将支持哪些设备朝向,可编辑General选项卡的Deployment Info部分。为此,在该选项卡中向下滚动,直到看到Deployment Info部分。如果必要,单击展开箭头将这部分展开。

在Deployment Info部分的中间,可指定支持的设备朝向。为此,只需单击相应的复选框以选择它:Portrait(纵向)、Upside Down(纵向倒转)、Landscape Left(横向朝左)、或Landscape Right(横向朝右),如图2.25所示。要取消对某种朝向的支持,可取消选择相应的复选框。就这么简单!

图2.25 选择应用程序支持的朝向

警告:并非那么简单

不幸的是,仅设置支持的朝向并不能让应用程序在该朝向正确运行。这只表达了您希望它能够在该朝向正确运行的意图,您还需编写响应设备旋转的代码,这将在第16章介绍。

接下来是应用程序图标、启动图像和启动屏幕。应用程序图标是用于在iOS主屏幕上表示应用程序的图标文件,而启动图像相当于静态的启动屏幕,在应用程序启动时显示。启动图像的一个替代品是启动屏幕,它是一个iOS界面文件,可使用第5章将介绍的Interace Builder来创建,并可在其中包含文本和图形。

这些小资源对应用程序很重要,是在选项卡General的App Icons and Launch Images部分指定的,如图2.26所示。

图2.26 Xcode中的应用程序图标、启动图像和启动屏幕

可以想见,大多数人看到这些设置都会一头雾水。Apple几乎每年都会调整图标和启动图像的配置方式,为搞清楚这些设置,下面分别介绍它们。

1.设置应用程序图标

首先是应用程序图标。从图2.26可知,应用程序图标源为AppIcon,这指的是素材目录。换句话说,图标不过是被拖曳到Assets.xcassets中的图像。

要设置图标,可采取如下步骤。

(1)在项目导航器中,单击Assets.xcassets以打开素材目录。

(2)在左边的素材目录列表中,选择AppIcon;Xcode将刷新右边那栏,以显示可在项目中添加的各种图标文件的占位区。

(3)从Finder将尺寸合适的PNG文件拖放到被虚线包围的占位区(也叫图像区域)内,如图2.27所示。Xcode将把图标复制到素材目录,并对其进行妥善地命名。

图2.27 素材目录包含所有应用程序图标的占位区

默认情况下,应添加三种图标:设置图标、Spotlight图标和应用程序图标。

设置图标是显示在iOS应用程序“设置”中的图标(如果您的应用程序提供了设置),Spotlight是显示在iOS Spotlight搜索结果中的图标,而应用程序图标是用户将在屏幕中央看到的图标。本书只考虑应用程序图标,知道如何设置应用程序图标后,其他图标设置起来将易如反掌。

您可能会问“尺寸合适的PNG文件”是什么意思?Apple很友好,在每个占位区下方指出了图标的尺寸,单位为点。在非Retina屏幕上,一个点相当于一个像素;但Apple还要求您指定Retina图形,其宽度和高度在大多数设备上都是非Retina图形的两倍,但在iPhone 6+/6s+上是三倍。要确定以像素为单位图标尺寸,可查看素材目录中占位区下方的标签,并将倍数(当前为1x、2x或3x)记录下来,然后将以点为单位的尺寸与倍数相乘,得到以像素为单位的尺寸(高度和宽度)。不再有使用非Retina屏幕的iPhone了,因此所有占位区显示的都是2x和3x。在iPad项目中,有些占位区将显示1x,因为Apple依然支持使用非Retina屏幕的iPad。

为何要搞得如此复杂?

就目前而言,您只需明白,对于所有应用程序,Apple都要求指定Retina图像文件,因此需要将像素尺寸为指定点尺寸的两倍和三倍的图像分别拖放到显示2x和3x的占位区。Apple以后可能发布分辨率更高的设备,这将导致倍数进一步增大(如4x或5x)。在任何iOS设备上,点在屏幕上表示的尺寸都相同。在非Retina屏幕上,10×10像素图像的尺寸与Retina屏幕上20×20像素图像以及iPhone 6+屏幕上30×30像素图像的尺寸相同。

还是不明白?没关系。在本书中,每当这种概念很重要时,我都将告诉您怎么办。

在本书的示例项目中,iPhone图标文件被命名为Icon@2x.png和Icon@3x.png,而iPad图标文件被命名为Icon-iPad.png和Icon-iPad@2x.png。

提示:

您创建的图标不必有圆角,iOS会自动设置图标的样式。要更深入地了解iOS图标尺寸和设计标准,建议您阅读Ivo Mynttinen撰写的文章iOS Design Cheat Sheet,其网址为http://ivomynttinen.com 。

2.设置启动图像/屏幕

接下来是启动图像(启动屏幕)。在图2.26中,注意到标签Launch Images Source旁边有一个Use Asset Catalog按钮。如果您单击这个按钮(千万不要这样做),Xcode将在素材目录中添加一个LaunchImage项,让您能够像指定图标一样指定启动图像。

然而,在较新的Xcode版本(Xcode 6和更高版本)中,更佳的方式是使用启动屏幕,因为启动屏幕能够适应多种设备,而不要求您为支持的每种设备指定尺寸不同的图像。默认情况下,每个新项目都包含一个启动屏幕文件,该文件名为LaunchScreen.storyboard。在项目导航器中,单击这个文件将显示Interface Builder编辑器,让您能够使用所有iOS界面工具来定制启动屏幕,如图2.28所示。默认启动屏幕是白色的,因此您可能想让它更有趣些。

图2.28 您使用Interface Builder来创建启动屏幕

我将创建启动图像的工作作为练习留给读者去完成。建议阅读第5章后,再回过头来看看文件LaunchScreen.storyboard。

警告:只关注外观

这里介绍的属性都与应用程序在iOS设备和模拟器中的外观相关;本书后面将介绍控制应用程序如何运行的其他属性。

对Xcode就简要地介绍到这里。随着您不断使用该软件,将发现众多其他的功能,但本章介绍了开发iOS应用程序所需的基本技能。最后,本章将介绍仅次于iPhone手机的好东西:iOS模拟器。

注意:

Xcode包含优秀的文档系统,虽然这里没有介绍。第4章开始涉足Cocoa框架时,将更深入地介绍该文档系统。

第1章说过,甚至不需要有iOS设备就可进行iOS开发,其原因是Xcode包含iOS模拟器。该模拟器很好地模拟了Apple iPhone和iPad,包含Safari、通讯录、设置、Game Center、日历、地图、新闻(News)、提醒事项(Reminders)、健康(Health)、Watch和Wallet等应用程序用于集成测试,如图2.29所示。

图2.29 iOS模拟器包含iOS标准应用程序的简化版

在早期针对模拟器进行开发可节省大量的时间:您无需等到将应用程序安装到实际设备就可看到修改代码的效果。另外,您无需购买并安装开发人员证书就可在模拟器中运行代码。

然而,模拟器并非完美的iOS设备,它不能模拟复杂的多触点事件,也不能提供有些传感器(陀螺仪、加速计等)的真实读数。在这些方面,它最多只能旋转以测试横向界面以及模拟简单的“摇动”。虽然如此,对大多数应用程序来说,其功能足够了,是开发过程的重要组成部分。

警告:在Mac上运行得快并不意味着在iPhone上也运行得快

对模拟器来说,绝对不能指望的一点是,模拟的应用程序性能类似于实际应用程序性能。模拟器通常运行得非常流畅,而实际应用程序可使用的资源可能更有限,因此性能没有在模拟器中好。请务必偶尔在实际设备中进行测试,以确保预期与实际情况一致。

要在模拟器中启动应用程序,可在Xcode中打开项目,确保生成方案被设置为您选择的iOS设备(iPad Air、iPhone 6、iPhone 6+等),再单击Run按钮。几秒钟后,模拟器将启动并加载应用程序。您可使用本章的文件夹Hour 02\Projects中的HelloSimulator项目对此进行测试。

启动并运行后,应用程序HelloSimulator将显示一行文本以及一幅从网站下载的图像,如图2.30所示。

应用程序运行后,您便可使用鼠标与其交互,就像使用手指一样:单击按钮、拖曳滑块等。如果您单击应用程序希望获得输入的字段,将显示屏幕键盘。您可使用Mac键盘输入,也可通过单击屏幕上的键盘按钮来输入。还可模拟iOS的复制并粘贴服务,方法是在文本中单击并按住鼠标,直到出现熟悉的放大镜。

单击Xcode工具栏中的Stop按钮退出应用程序。也可选择菜单Hardware>Home,但Xcode将以为应用程序还在运行,导致不同步。

图2.30 在Xcode中单击Run按钮,在模拟器中启动并运行应用程序

注意:

在模拟器中启动应用程序将在模拟器中安装它,就像在iOS设备中安装应用程序一样。退出应用程序后,它仍保留在模拟器中,直到您手工删除它。

要从模拟器中删除已安装的应用程序,可在其图标上单击并按住鼠标直到它开始摇摆,然后单击出现在左上角的X。换句话说,将应用程序从模拟器中删除的方法与将其从iOS设备中删除完全相同。

要将模拟器重置到原始状态,可从iOS模拟器菜单中选择Reset Content and Settings。

提示:

可随时切换到其他设备,为此只需在菜单Hardware>Device中选择相应的菜单项。

虽然只有一个鼠标,但可在光标位于iOS模拟器屏幕上时按住Option键来模拟简单的多点触摸事件,如两个手指合拢和张开。这将绘制两个表示手指的圆圈,并可使用鼠标来控制它们。要模拟多点触摸事件,可在按住Option键的情况下单击并拖曳。图2.31显示了两个手指合拢手势。

请使用应用程序HelloSimulator来尝试这些操作,您应该能够使用模拟器的多点触摸功能来缩放屏幕上的文本和图像。

图2.31 使用Option键模拟简单的多点触摸

提示:

在模拟器中,要移动模拟的指尖(例如,以便能够在屏幕底部附近执行合拢手势),可按住Shift键并拖曳模拟的指尖。只要按住Shift键不放,就可将模拟的指尖移动到任何地方。

要模拟设备旋转,可从菜单Hardware中选择Rotate Right或Rotate Left,如图2.32所示。您可使用这些菜单项将模拟器窗口旋转到全部4种可能的朝向,并查看屏幕上的结果。

图2.32 旋转到各个可能的朝向

同样,使用HelloSimulator对此进行测试。该应用程序将对旋转事件做出反应:相应地调整文本的方向并获取一幅新图像。

您可能想在模拟器中测试其他几种独特的情形。使用Hardware菜单可访问如下功能。

请在应用程序HelloSimulator中对旋转、摇动或内存不足进行测试。图2.33显示了该应用程序对模拟摇动手势做出的反应。

图2.33 在iOS模拟器中,可测试应用程序如何处理多种独特的情况

警告:在iOS应用程序崩溃时恢复

如果应用程序在iOS模拟器中运行时出现问题并崩溃,Xcode将显示调试器。要在应用程序崩溃时恢复,可单击Xcode工具栏中的Stop按钮退出应用程序,再隐藏调试器并检查代码。第24章将介绍如何使用调试器找出导致应用程序崩溃的bug。

默认情况下,Xcode只显示在售的Apple iOS设备及其模拟选项(可在Xcode的下拉列表Scheme和模拟器的Devices菜单中找到它们)。要添加其他设备,可在模拟器中选择菜单Hardware>Device>Manage Devices,如图2.34所示;也可在Xcode中选择菜单Window>Devices。

这将打开Devices窗口,其中列出了可用的模拟器硬件和iOS版本,如图2.35所示。

要删除设备,可通过单击来选择它,再按Delete键;要添加设备,可单击左下角的+按钮,Xcode将显示Create a new simulator对话框,如图2.36所示。

图2.34 在iOS模拟器中选择菜单Hardware> Device>Manage Devices

图2.35 在iOS模拟器中的设备选项

图2.36 配置新的模拟器

输入模拟器的名称,选择设备类型和iOS版本,再单击Create按钮。新建的模拟器将立即出现在Xcode和iOS模拟器中。

您的水平还不高,无法让您阅读与编码相关的教程,但如果您有兴趣,可花些时间了解Xcode提供的其他功能。由于篇幅限制,本章只有几十页,但有关该独特工具的材料却相当多。本章内容涵盖了您需要掌握的有关Xcode的所有知识,但还是建议您阅读Apple的Xcode Overview。要找到该文档,可在Xcode中选择菜单Help>Xcode Overview。

本章介绍了Xcode开发环境以及您将用来创建应用程序的核心功能。您学习了如何使用Apple的iOS模板创建项目以及如何使用新文件和资源来补充这些模板。您还探索了Xcode的编辑和导航功能,在您每天的开发工作中都将依赖这些功能。为演示概念,您编写并生成了第一个iOS应用程序,还修复了我们故意添加的几个错误。

最后,本章介绍了如何使用iOS模拟器,该工具让您无需使用iOS设备,因为它让您能够快速而轻松地测试代码,而无需在iOS设备中安装应用程序。

问:Interface Builder是什么?它有何用途?

答:Interface Builder是Xcode的重要组成部分,将在第5章专门介绍。顾名思义,Interface Builder主要用于创建应用程序的用户界面。

问:在Xcode中,当我在文件之间切换并做大量的修改时,是否需要经常存盘?

答:不需要。如果您在Xcode编辑器中在文件之间切换,将不会丢失所做的修改。如果您试图关闭应用程序,Xcode还将为您保存文件。

问:我注意到创建项目时可使用OS X模板,请问我能创建OS X应用程序吗?

答:您在本书学习的几乎所有编码技能都适用于OS X开发。然而,iOS设备是与Mac提供的用户体验不同,因此您还需学习Mac窗口模型、UI等。

问:可在iOS模拟器中运行商业应用程序吗?

答:不能。只能运行在Xcode中创建的应用程序。

1.新建项目时,您将选择哪种编程语言?

  A.Swift。

  B.Objective-C。

  C.Object Swift。

  D.C#。

2.您将使用哪种工具来创建用户界面?

  A.UI Builder。

  B.iOS模拟器。

  C.Interface Builder。

  D.Swift User Tool。

3.在Xcode中,出现哪种编码问题时,您依然可以运行应用程序?

  A.错误。

  B.故障。

  C.警告。

  D.注意。

4.如果要在代码中添加错误修复说明,可使用哪种标记?

  A.FIXME标记。

  B.ERROR标记。

  C.BUG标记。

  D.METHOD标记。

5.Xcode编辑器的哪项功能在您输入方法时提供其信息?

  A.Genius Tool。

  B.引用库。

  C.代码大师(Code Master)。

  D.自动完成。

6.代码中的错误使用哪种符号表示?

  A.禁行标志。

  B.惊叹号。

  C.X。

  D.红色下划线。

7.哪个文件包含应用程序的众多配置细节?

  A.Info.plist。

  B.Config.xml。

  C.Settings.cfg。

  D.Xcode.ini。

8.如果我的域名为johnray.poisontooth.com,我得Xcode项目的组织标识符通常是什么?

  A.johnray.poisontooth.com。

  B.johnray.com.poisontooth。

  C.com.poisontooth.johnray。

  D.com.poisontooth。

9.下面哪个区域列出了代码中的所有错误?

  A.问题导航器。

  B.项目导航器。

  C.调试器。

  D.符号导航器。

10.在素材目录中,指定应用程序图标的项名为什么?

  A.ApplicationIcon。

  B.AppIcon。

  C.Icon。

  D.PlistIcon。

1.A。Swift是Apple新推出的iOS开发语言,本书的所有项目都使用这种语言。

2.C。Interface Builder是Xcode工具集的一部分,用于创建应用程序的用户界面。

3.C。警告会显示在Xcode中,但不会禁止您执行代码。

4.A。FIXME标记可用于指向代码,提醒您修复其中的bug或其他问题。

5.D。在您不知道要使用的方法的语法时,Xcode自动完成功能可帮助您编写代码。

6.A。如果在代码中看到禁行标志,就说明这是错误,必须修复。

7.A。文件Info.plist存储了很多设置,它们决定了应用程序将如何工作,如支持的朝向。

8.C。在大多数情况下,将倒转的域名(即com.poisontooth.johnray)用作组织标识符。

9.A。问题导航器让您能够在一个地方查看所有的错误和警告。

10.B。您必须通过AppIcon条目来添加应用程序图标的1x、2x和3x版本。

1.练习创建项目并在Xcode编辑器中导航。尝试本章没有介绍的一些常见的编辑器功能,如查找并替换。尝试使用标记在源代码中创建有用的跳转点。

2.前往Apple iOS开发中心下载一个示例应用程序,再使用本章介绍的方法生成该应用程序,并在iOS模拟器或iOS设备中对其进行测试。


相关图书

iOS 14开发指南【进QQ群414744032索取配套资源】
iOS 14开发指南【进QQ群414744032索取配套资源】
iOS 11 开发指南
iOS 11 开发指南
iOS和tvOS 2D游戏开发教程
iOS和tvOS 2D游戏开发教程
Swift 3开发指南
Swift 3开发指南
iOS  项目开发全程实录
iOS 项目开发全程实录
iOS 10 开发指南
iOS 10 开发指南

相关文章

相关课程