第2章 第一个iOS应用——“hello,world”
2.1 新建项目
2.1.1 新建Single View项目
打开Xcode 8,选择“新建Xcode项目”,如图2-1所示。
图2-1 新建Xcode项目
如图2-2所示,选择“Singe View Application”,同时注意左上角对应的选项卡是 iOS。然后单击下一步按钮“Next”,定义项目名字与组织标识,如图2-3所示。
图2-2 选择“Single View Application”
图2-3 项目名字与组织标识(Organization Identifier)
项目名自己随意定义,最好用英文单词。Organization Identifier是组织标识,用来与其他 App 区分,这里笔者用的是自己域名的倒写。在 iOS 系统中,就是靠这个标识来区分各个App,因此每个App的标识不仅要唯一,还要防止可能与别人的App发生冲突。
其他的设置遵循默认就可以了,然后单击下一步按钮“Next”,接下来的窗口是要选择项目存放在哪个文件夹,选择默认即可,便进入初始开发状态了,如图2-4所示。
图2-4 进入开发界面
如图2-4所示,中间的部分是项目的一部分设置,可以进行更改。
(1)Version是项目的版本号,这个自己定义即可,如果提交到App Store,版本号必须至少为1.0。
(2)Build必须是整数,自己定义,这个在App展开测试发布时,如果每次发布的测试版版本号都相同,那就必须通过Build来区分各次提交的App(每次提交的App都不能自己删除,所以如果版本号相同的话,就只有通过这个方法来区分),笔者的方法是每次打包新的测试版时都将Build加1。
(3)Signing 是应用证书签名方面的内容,是必需的(苹果用来给应用打上开发者的数字签名,证明这个应用是某开发者做的,可以防止不明来源,以及检测开发权限等方面的内容),自Xcode 8开始,新增了这个Automatically manage signing的选项,默认是不打勾的,建议这里打勾,让 Xcode 8 接管证书管理。否则必须自己选择证书。这里的Team下拉框是开发者证书列表,在Xcode设置中登记过自己的开发者账号后,在这里会出现自己的开发者证书选项。如果没有的话,默认是none,可以进行模拟器和真机测试,但不能发布出来。证书问题是最令初学者头痛的问题,证书是密码学的内容,但限于篇幅和主题原因在本书未过多阐述,但如果缺乏这方面知识,会理解困难,有关操作时遇到问题会难以解决。关于密码学,推荐日本的结城浩著,周自恒译的《图解密码技术》,这本书通俗易懂,通读便可掌握密码学大概,证书的理解问题也可解决了。Xcode使用的开发者证书,可以登录苹果开发者网站https://developer.Apple.com中自己的开发者账号后管理,也可下载。Xcode一般会自动完成这个过程,但有时候不能正常工作,这时候必须要知道,证书存储在“钥匙串”(Mac OS自带的一个软件,在LaunchPad中可以找到)中,如果 Xcode 提示证书问题,可以到钥匙串中寻找相关的证书,删除掉再重新导入或者让Xcode再尝试,一般都可以解决问题。
(4)Deployment Target是最低支持到的iOS版本。各代iOS的SDK都有区别,因此要看开发者愿意兼容到哪个版本。这里建议最低选iOS 9.0(支持当前最高2个版本)。
(5)Devices是指支持何种设备,可以只支持iPhone,也可以只支持iPad,也可以两者都支持。
(6)Main Interface 指定主页是用哪个 storyboard,这里将默认的 Main 改为LaunchScreen(先学会用代码构建界面,以后再学可视化方法)。
(7)Device Orientation 设备旋转特性,该属性可以指定设备是否可以左转界面、右转界面或者倒转。一般可以只选择Portrait,即正面,不能旋转。
(8)其他的选项待以后章节再进行讲解。
2.1.2 项目结构
如图2-4左侧的文件列表,可以看到自动生成的代码。
项目根目录下有4个文件夹,开发时一般只用到第一个与项目同名的文件夹。其他3个文件夹中1个是放最终产品App,另两个是用来编写测试代码。
与项目同名的文件夹是存放开发相关文件的地方,这里已经生成了两个类,分别是AppDelegate和ViewController,前者是应用程序代理类,用来处理应用程序生命周期的各个事件响应,后者是主界面的视图控制器。
Main.storyboard 和 LaunchScreen.storyboard 分别是主界面和启动画面的可视化界面,打开即可用拖曳控件的方式方便地制作界面。
Asset.xcasset是用来存放图片的地方,可以把App的图标和启动画面根据一定的规格集中在这里指定和存放。
info.plist是一个“键值对”文件,指定该App的很多属性。
Supporting files文件夹存放有main函数,还可存放其他一些文件。