本节书摘来自华章计算机《Swift iOS应用开发实战》一书中的第1章,第1.5节,作者:刘铭 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.5 iOS模拟器
iOS模拟器是一个运行在Mac上面的应用程序,它允许我们在不使用iOS真机设备的情况下调试所编写的程序项目。它属于iOS SDK的一部分,所以在安装Xcode的时候会直接被装入Mac系统之中。当我们在Xcode中运行应用程序时,可以选择项目是在模拟器中运行还是在真机上面运行。如果选择模拟器,则Xcode会在成功编译代码以后自动将其打开。
下面来设置HelloWorld项目的运行设备。
1)点击工具栏中停止按钮右侧的Scheme字段,(项目名称右侧,“>”后面的部分),此时弹出的菜单中列出了iOS Device、iPhone 4s、iPhone 5、iPad 2、iPad Retina、iPad Air等可选项,如图1-27所示。
从Xcode 6开始,我们就不能在iOS模拟器中模拟iPhone 4s之前的设备以及第一代iPad设备了,因为这些设备无法支持iOS 7以上的系统。
1.5.1 iOS模拟器的特性
我们可以使用iOS模拟器模拟不同的设备,其中包括iPhone和iPad系列产品。在系统版本方面,Xcode 6只支持iOS 7和iOS 8。模拟器在运行的时候,可以通过菜单中的“Hardware→Device”来改变iOS的版本,如图1-28所示。
如果需要安装其他不同版本的iOS SDK,需要在Xcode菜单中选择“Preferences→Downloads→Components”,之后选择相应的版本下载即可。
通过“Hardware→Device”菜单操作,我们可以在模拟器中切换不同的设备。根据iOS版本的不同,所模拟的设备也有所不同。iOS 8.0比7.1增加了Resizable iPhone和Resizable iPad两个选项,据说这两个选项与iOS 8可能加入的多窗口操作有关。
通过iOS模拟器菜单中的“Rotate Left”(Command+←快捷键)或“Rotate Right”(Command+→快捷键)来调整模拟器的方向,如图1-29所示。
iOS模拟器允许我们模拟一个或两个手指的多点触摸操作。一个手指的操作,比如点击、长按、划动等都可以通过鼠标很好地模拟。实现两个手指的操作需要按住键盘上的Option键,然后按住鼠标拖曳来模拟缩放操作。如果要移动两个手指在屏幕的中心位置,则需要同时按住Shift和Option两个键。想要在模拟器中实现iOS设备的摇动效果,可以通过“Hardware→Shake Gesture”(Control+Command+Z快捷键)来完成。
如果我们开发的应用程序需要地图数据,可以在应用程序运行的时候,使用iOS模拟器模拟一个位置。选择“Debug→Location→Custom Location”,然后输入经纬度数值即可,如图1-30所示。
iOS模拟器还可以模拟一个移动的位置,当设计的应用程序需要获取实时改变的地理位置时,这个功能就显得非常有用。iOS模拟器可以模拟的位置包括如下这些:
Apple: 苹果总部。
City Bicycle Ride:在城市中骑自行车。
City Run:在城市中跑步。
Freeway Drive:无确定方向的驾驶汽车。
如果我们开发的应用程序允许用户打印一些东西,在没有兼容AirPrint打印机的情况下,可以使用打印机模拟器模拟打印。打印机模拟器不会在程序启动时自动运行,需要选择“File→Open Printer Simulator”。
1.5.2 模拟器中iOS系统的基本设置
在安装好Xcode后,模拟器中运行的iOS默认语言是英文,默认区域格式是美国,而且输入法也仅有英文一种。作为中国的程序员,我们希望将模拟器设置成和国内iPhone手机用户一样的使用环境,所以需要进行下面几步操作:
1)在Xcode菜单中选择“Xcode→Open Developer Tool→iOS Simulator”。
2)在模拟器的主屏上点击“Settings→General→ Language & Region→iPhone Language”,将语言设置为简体中文。当点击右上角的“Done”按钮以后,会弹出一个确认框,如图1-31所示。在点击确认以后,系统的语言就变成了简体中文。
3)在“设置→通用→语言与地区”中将“地区”设置为中国。此外,在语言与地区界面中我们还可以看到“区域格式示例”,包括时间、日期、货币和数字格式。
4)进入“设置→通用→键盘→键盘”,确定其中有简体中文的输入法。如果没有,则选择添加新键盘,选中“简体中文”即可,这样在虚拟键盘中就可以输入中文了。
iOS模拟器最主要的目的就是有效节省程序员开发的时间,如果一个应用程序要在真机上调试,需要经过上传、安装、运行这三个阶段,而这将花费很长的时间,因为哪怕是一点点代码的修改,每次测试都需要经历这三个阶段。假如这个应用程序中包含了大量的图片、音频或视频文件,相信这将是对开发人员耐性的一个巨大挑战。
在iOS模拟器上应用程序的运行效果(如执行速度、切换视图的平滑程度等)并不等同于在iPhone真机上的运行效果,毕竟iPhone的硬件无法与Mac相比,而且每代iPhone手机的推出都伴随着CPU性能的增强。避免这种情况的最好方法就是在真机上进行测试(一个成熟的应用至少需要在2~3种iOS设备上进行测试),如果仍然出现上述问题,就需要优化算法。
1.5.3 在模拟器中安装和卸载应用程序
如果在Xcode中运行应用程序项目,该项目就会被自动安装到模拟器之中。
我们不能删除iOS模拟器中默认的应用程序,如照片、通讯录、设置、Game Center、报刊杂志和Safari。要卸载(删除)iOS模拟器中自己编写的应用程序,操作步骤和真机上是一样的。
1)在应用程序图标上按住鼠标,直到图标开始摇晃。
2)当图标摇晃的时候,可以看到其左上角有一个“X”按钮。点击要删除应用程序图标左上角的“X”按钮,此时弹出警告对话框确认删除操作,如图1-32所示。
4)点击“删除”按钮,确认卸载操作。
对于代码存有Bug的应用程序,在模拟器中运行的时候可能会引起崩溃。此时Xcode将会运行代码调试器,进入Debug状态。我们只要点击Xcode工具栏中的“Stop”按钮就可以结束应用程序在模拟器中的运行并关闭代码调试器。
5)如果想快速清空模拟器中的全部应用程序,可以选择“设置→通用→Reset”,点击“还原位置与隐私”,在弹出的警告视图中点击“还原警告”即可。
1.5.4 iOS模拟器的限制
尽管iOS模拟器可以完美地运行我们编写的iOS应用程序,但还是有一定的局限性的,它不能完成下面这些操作:
模拟手机来电的状态
使用重力加速器和三轴陀螺仪
发送和接收短信息
从App Store上下载安装应用程序
使用前后置摄像头
使用设备的麦克风(如果开发设备具备麦克,则可以使用)
一些OpenGL ES的核心特性
尽管iOS模拟器存在上面的这些限制,但对于一般应用程序来说还是足以应付的,只不过它还不能完全代替在真机上的测试。