书名:SwiftUI极简开发
ISBN:978-7-115-64252-3
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 李智威
责任编辑 单瑞婷
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书从实战应用出发,系统地讲解SwiftUI开发的全过程,内容丰富且实用性强,旨在帮助读者快速上手SwiftUI开发。
本书共14章,从SwiftUI的基础概念开始,逐渐深入分析视图、动画、自动布局机制、栏目、代码整理、参数存储、网络请求、架构设计、设备管理、数据存储等主题,为读者提供全面的理论知识和实战技巧。
本书适合对SwiftUI感兴趣的读者阅读。无论你是初学者还是有一定经验的开发者,都能够通过本书全面了解SwiftUI的基础知识和实战技巧,并将其应用到实际项目中,开发出优秀的iOS应用。
李智威,iOS独立开发者、高级产品经理、稀土掘金技术社区签约作者,拥有6年B端SaaS产品开发经验,从零开始负责过国内Top 3上市企业数智化项目的产品规划工作。独立开发并上架“不言笔记”“Linkcard卡包”等应用,出版过《SwiftUI完全开发》等图书。曾获我爱黑“可颂”AI Hackathon大语言模型应用创新挑战赛优胜奖。
谨以此书献给我最亲爱的家人,以及众多热爱iOS的朋友们!
感谢人民邮电出版社的编辑单瑞婷老师在我写作的过程中给予的鼓励和帮助,让我能顺利完成本书。
最后感谢我的爱人江佩琦、我的父母、琦琦的父母,还有准备步入职场的我的妹妹,以及在我的人生道路上指引我的张勇老师、曾璐思老师、叶泳成老师、许治老师,感谢你们对我的支持和帮助,为我照亮未来的路。
“优雅”,是对一名编程工作者的极高赞誉,也是我对SwiftUI最直观的感受。
在Apple的2019年全球开发者大会(WWDC 2019)上,Apple正式向全世界推出了全新的现代化开发框架——SwiftUI。也是从那一年开始,我正式接触和自学编程。
有时候,我非常庆幸选择从 SwiftUI 开始学习,其近似“聊天”的声明式语言特征,对非研发出身但对编程充满渴望的初学者非常友好。开发者只需要在脑海中构想UI的布局及其元素并告知SwiftUI,SwiftUI便可自动且非常优雅地处理UI渲染和更新。开发者甚至可以只使用SwiftUI提供的一系列组件,例如文字、图片、列表、表单等,通过简单的排列组合,非常轻松地构建出复杂的用户界面。
学习一门编程语言,可能对很多人来说是一件非常枯燥的事情,因为开发者需要了解它的语言特征、底层代码逻辑、数据绑定、共享功能和生命周期管理等。但SwiftUI似乎有一种独特的魅力,它很好地将这些复杂的内容融入一种直观且富有创造性的开发体验中,让开发者更加专注于产品的交互和逻辑设计。
SwiftUI的设计目标是简化UI开发流程,提高开发效率,并在不同的环境里实现更高程度的代码共享。正是由于SwiftUI的种种优点,我从编程新手逐渐成为能够独立开发并上架应用的编程熟手,最终成为一名iOS独立开发者。
随着SwiftUI的发展与演进,如今它已成为Apple各款产品中主要的UI开发框架。
无论是iOS 14的桌面小组件,还是iOS 16 的锁屏小组件,甚至是WWDC 2023推出的全新空间计算设备Apple Vision Pro及其搭载的空间操作系统visionOS,它们的开发都离不开SwiftUI的支持。
回顾学习SwiftUI的整个过程,我曾在互联网上寻找大量相关的教程和图书,却难以找到令人满意的体系化教程和图书,这使我在学习过程中倍感艰辛。
为了能快速地整理和学习SwiftUI知识,我尝试在技术论坛上发布一系列和SwiftUI入门与实战相关的原创文章。随着时间的推移和文章数量的增加,我竟然不知不觉走上了技术写作的道路。
本书并没有围绕每个核心要点单独讲解,而是从实际案例出发,将SwiftUI的使用场景进行串联,体系化地讲解和分享SwiftUI的相关知识。
我希望读者能在完成每一个案例之后感受到激动和喜悦,正如我刚开始学习SwiftUI一样,保持这份热情,开发出属于自己的应用。
本书共14章,下面是各章的主要内容。
第1章详细介绍Swift和SwiftUI的关系、软硬件要求和项目文件结构等内容。通过对本章的学习,读者将了解SwiftUI在编程过程中的特点,掌握项目创建的基础技能。
第2章讲解如何使用SwiftUI快速创建一个简单的SwiftUI项目,并介绍SwiftUI中常见组件的使用方法。通过对本章的学习,读者将具备快速使用内置组件搭建UI的能力。
第3章~第8章讲解SwiftUI开发中的基础知识,包含动画、视图、布局、代码整理等基础知识,并通过两个项目实战,让读者切身体验应用开发流程,感受SwiftUI原生开发的魅力。
第9章~第13章讲解项目开发中的核心功能,包含参数存储、网络请求、架构设计、设备管理、数据存储等核心功能。在开发中实现这些核心功能,可以让应用不仅仅是静态界面的堆积,更是真正能够交互使用的精美产品。
第14章将通过一个项目实战帮助读者巩固本书涉及的SwiftUI知识,并结合实际项目流程,开发一款可上架运营的应用。
本书适合SwiftUI的初学者阅读,也适合作为初级iOS开发人员的进阶读物。
书中难免会有一些疏漏和不足之处,请读者见谅,也欢迎读者给予指正和反馈。书中的所有案例及其代码都可以从GitHub(https://github.com/RicardoWesleyli/SwiftUIDeveloper.git)中下载。如果读者有任何宝贵的想法和建议,可以直接发送邮件至16620164429@163.com,期待与读者的交流。
本书提供如下资源:
● 本书源代码;
● 本书思维导图;
● 异步社区7天VIP会员。
要获得以上资源,您可以扫描下方二维码,根据指引领取。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是shanruiting@ptpress.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。
如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。
“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域多年的发展与积淀。异步图书面向IT行业以及各行业使用IT的用户。
如果你接触过其他编程语言,就应该会被SwiftUI简明的语法特点所吸引。
无论是与Swift语言的无缝衔接,还是与OC(Objective-C)语言的相互兼容,又或者是其声明式语法的简单直观,Swift的这些优点都表明它可作为一门“面向未来”的语言,帮助开发者高效和方便地创建理想中的应用。
本章将分享使用SwiftUI编程前的准备工作,以及创建第一个SwiftUI项目的全过程。如果你对SwiftUI及项目创建过程已经有所了解,可以选择感兴趣的部分内容进行阅读。
本章将创建一个名为“Chapter1”的SwiftUI项目,并在此项目基础上对相关内容进行讲解和分享。
SwiftUI是在Apple的2019年全球开发者大会上,由Apple官方推出的一个可以用来设计Apple生态下所有应用的UI开发框架。
SwiftUI可以简单看作Swift编程语言和UI的组合,其底层编程语言是基于2014年Apple推出的Swift编程语言。在此基础上,SwiftUI实现了UI的可视化声明设计,可以帮助开发者快速搭建UI元素、实现UI与用户之间的互动,以及存储用户数据等。
SwiftUI框架采用了声明式编程范式,其语法特征与人们在日常生活中描述物体或事件的方式颇为相似。例如我们需要搭建一个简单的登录界面,如图1-1所示。
import SwiftUI
struct LoginView: View {
var body: some View {
VStack {
Spacer()
Image("loginImage")
.resizable()
.scaledToFit()
Spacer()
Text("微信登录")
.foregroundColor(.white)
.padding()
.frame(maxWidth: .infinity)
.background(Color.green)
.cornerRadius(32)
.padding()
}
}
}
图1-1 登录界面
在上述案例中,只需要告知SwiftUI在界面中放置什么元素、按照什么方式对元素进行排布,SwiftUI就可以快速实现所需要的页面。
SwiftUI作为全新的UI开发框架,几乎可以应用于Apple生态下的所有平台,包含iOS、iPadOS、macOS。Swift声明式语言的特点就是用语言描述UI元素的样式、状态、交互效果等内容。SwiftUI可以借助很少的代码,并根据用户的“想法”快速呈现具体的内容。
说到SwiftUI,就不得不提到底层编程语言Swift。
2014年,Apple正式推出了全新的编程语言Swift,旨在替代已经使用多年的初代面向对象编程语言OC。
Apple称Swift语言是“符合直觉的程序性语言”,涵盖数据类型、流程控制以及其他强大的编程语言特性。由于Swift语言强大、快速,同时兼容OC代码,因此开发者可以很简单地从原本的OC项目慢慢过渡到Swift项目,使应用开发更加安全和高效。
由于本书将重点放在介绍和使用SwiftUI上,这里将不对Swift做过多的介绍。如果你之前了解过其他编程语言,例如C语言或者Java,那么学习Swift将没有太大难度。
如果你是零基础或者编程基础知识比较薄弱的初学者,建议下载Apple官网提供的Swift语言学习工具——Swift Playgrounds,并跟随游戏剧情一步一步学习,这对你往后的学习很有帮助。Swift Playgrounds的界面如图1-2所示。
图1-2 Swift Playgrounds的界面
目前在互联网上出现最多的提问之一是,入门iOS开发是学Swift还是学OC?
随着Swift普及率的提高,以及2023年iOS 17的发布,iOS 13及以上版本设备的市场占有率达到了 95%,在众多现实条件下,建议读者,特别是独立开发者,可以直接学习Swift+SwiftUI的开发方式。
Swift语言简洁、高效,SwiftUI拥有简约的声明式语法、绚丽的交互动效,以及精妙的数据处理方式,两者的结合可以帮助你快速实现完美的应用。
在正式开始编程之前,我们需要提前准备好开发所需的设备和工具。
开发一款iOS应用,你需要准备一台Mac计算机,或者装有macOS的设备。建议准备Apple旗下的搭载M系列芯片并拥有16GB以上内存的硬件设备,其强大的性能和低功耗的特点可以帮助你很好地应对应用开发中的各种复杂场景。
本书将全程使用搭载Apple M2芯片的Mac mini设备,其相关信息如图1-3所示。
图1-3 搭载Apple M2芯片的Mac mini 设备的相关信息
准备好Mac计算机之后,还需要下载Apple官网推出的全平台开发工具Xcode。Xcode可以帮助开发者快速开发iOS、iPadOS、macOS、watchOS、tvOS平台下的相关应用,并且实现编程开发、功能测试、应用打包、应用上传、版本管理等一系列开发流程。
读者可以直接在Mac计算机上的Apple Store中对Xcode进行下载和安装,搜索“Xcode”,选择Xcode软件开发工具,单击“获取”,即可下载Xcode。Xcode的下载页面如图1-4所示。
图1-4 Xcode的下载页面
在使用Xcode时需要注意两点。第一点,Xcode的安装包占用空间较大(大概100GB)。除了必要的编辑器,Xcode还会附带安装用于预览、测试的模拟器设备,因此安装前需要预留足够的存储空间。第二点,开发者需要定期更新Xcode,以获得最新的功能特性,初次安装和定期更新时,下载和安装都需要较长的时间,因此建议在晚上或者白天空闲时进行。
虽然Xcode提供了iOS模拟器供开发者进行功能测试和应用预览,但在设计某些功能时,模拟器可能会出现一些意想不到的情况。因此除了Mac计算机和Xcode,建议开发者再准备一台运行最新iOS版本的iPhone,用于进行上架前的真机测试,iPhone模拟器如图1-5所示。
图1-5 iPhone 模拟器
下载Xcode开发工具并安装完成后,在Mac启动台中可以看到Xcode软件图标,单击此图标打开Xcode。初次加载可能需要较长时间,软件加载完成后,映入眼帘的是Xcode的欢迎界面,如图1-6所示。
在Xcode的欢迎界面中,开发者可以创建一个新的Xcode项目,也可以从Git仓库中克隆一个已有的项目,还可以打开一个已经创建好的本地项目。
当取消勾选底部的默认显示欢迎界面的复选框时,再一次打开Xcode将不再显示欢迎界面。开发者可以通过按下键盘快捷键“Command+Shift+1”,重新要求Xcode显示欢迎界面。
图1-6 Xcode的欢迎界面
开发者也可以通过顶部菜单栏的相关操作,或者按下键盘快捷键“Command+Shift+N”来新建项目。菜单栏的相关操作为选择“File”→“New”→“Project”,即可通过Xcode菜单栏新建项目,如图1-7所示。
图1-7 通过Xcode菜单栏新建项目
创建项目时,Xcode会提供Apple生态下的项目模板供开发者选择,开发者可以根据实际开发需求选择合适的项目模板,如图1-8所示。本书将基于iOS应用进行分享,因此这里选择“App”模板。
图1-8 选择合适的项目模板
单击“Next”按钮,接下来需要完善项目基本信息。项目基本信息由项目名称(Product Name)、项目开发团队(Team)、组织标识符(Organization Identifier)、唯一标识符(Bundle Identifier)、是否使用Core Data本地数据存储框架(Use Core Data)、是否包含测试(Include Tests)这6项内容组成。完善项目基本信息如图1-9所示。
图1-9 完善项目基本信息
值得注意的是,项目名称建议使用英文名称,由于项目模板创建的示例代码中会使用项目名称作为视图文件名称,因此在非英文情况下可能会出现意想不到的问题。
在初次创建项目时,项目开发团队名称为“None”,当开发者添加了账户信息后,项目开发团队则可以选择个人开发者或者团队名称。项目开发团队与项目紧密相关,当开发者从互联网上下载其他开发者的项目时,在预览前需要将项目开发团队名称转换为自己的项目开发团队名称或者个人开发者名称,方可在模拟器或真机上运行。
组织标识符是项目的唯一标识符,一般填写项目开发团队或者个人开发者的域名,惯用方式是将官方域名反向来写,如果没有官方域名,那么可以填写“com.example”。
在填写项目名称和组织标识符后,Xcode会将它们自动组合,生成唯一标识符,例如当前项目名称为“Chapter1”,组织标识符为“com.silence”,则唯一标识符为“com.silence.Chapter1”。唯一标识符是应用上架和分发的项目唯一性标识,因此创建项目时请勿使用重复的项目名称。
最后的两项内容即是否使用Core Data本地数据存储框架和是否包含测试,读者可以根据项目需要进行设置,也可以在后续项目中自行创建相关内容,因此在创建项目时先不勾选这两项内容对应的复选框。
单击“Next”按钮,选择项目文件的存储目录后,单击“Create”按钮。等待一段时间,Xcode将会创建一个带有示例代码的App项目。App项目示例如图1-10所示。
图1-10 App项目示例
本节分享Xcode开发工具的常用功能和使用技巧。
在通常情况下,可以单击Xcode右上角的收起视图按钮,以扩大中心视图的展示区域。收起右侧视图效果如图1-11所示。
图1-11 收起右侧视图效果
接下来可以看到Xcode在创建项目时自动创建的代码示例,首先介绍左侧的代码编辑区域。
Xcode创建了一个SwiftUI文件ContentView,在ContentView文件中,将SwiftUI引入项目中,随后声明了一个遵循View协议的结构体ContentView。代码编辑区域如图1-12所示。
import SwiftUI
struct ContentView: View {
var body: some View {
// View的内容
}
}
图1-12 代码编辑区域
对于遵循View协议的ContentView,其内容将会在Xcode右侧的实时预览窗口中呈现。因此,开发者可以遵循这样的代码结构,创建多个 UI 视图来搭建应用的界面。要想用通俗的语言描述上述操作,就是创建一个叫作ContentView的View界面。
而在View协议中,声明了一个body属性的视图容器,它遵循的是some View协议。可以将some View协议当作一个View容器,相当于在ContentView界面中放置了一个body属性的视图容器,开发者在界面中创建的所有视图元素都需要放置在这个容器中。
Xcode代码示例中使用了VStack,在VStack中又放置了一个Image(图片)视图和一个Text(文字)视图。我们可以在右侧的实时预览窗口中查看项目的最终呈现效果,实时预览窗口如图1-13所示。
图1-13 实时预览窗口
实时预览窗口的内容则来自遵循PreviewProvider协议的结构体ContentView_Previews,预览的视图默认为ContentView视图。开发者在创建子视图时,可能由于子视图有绑定关系或者有参数传入,需要删除或者注释与PreviewProvider相关的代码,注释代码的键盘快捷键为“Command+/”。注释项目预览代码如图1-14所示。
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
将与 PreviewProvider 相关的代码注释后,右侧实时预览窗口则会隐藏起来,后续也可以按下“Command+/”键盘快捷键取消注释来显示实时预览窗口。
当开发者进行某些操作导致实时预览窗口被Xcode隐藏时,还可以通过设置实时预览窗口上方的“Adjust Editor Option”(调整编辑器选项)中的“Canvas”(画布)来显示和隐藏实时预览窗口。“Adjust Editor Option”中的“Canvas”如图1-15所示。
图1-14 注释项目预览代码
图1-15 “Adjust Editor Option”中的“Canvas”
编辑代码的另一个常用小技巧是可以启用代码的缩略视图窗口。当代码编辑区域的代码量较大时,可以通过设置“Adjust Editor Option”中的“Minimap”来查看代码的缩略信息,开发者也可以快速定位代码位置。“Minimap”选项如图1-16所示。
默认预览的模拟器型号为iPhone 14 Pro,开发者也可以在Xcode顶部菜单栏进行预览设备的切换,选择适合当前项目开发的设备型号进行效果预览。切换预览设备如图1-17所示。
图1-16 “Minimap”选项
图1-17 切换预览设备
在实时预览窗口中,预览设备底部的项目预览操作栏提供了项目预览的常用操作。
提高代码编写效率的有效途径之一是实现代码最终效果的实时预览功能。单击项目预览操作栏的“Live”(模拟互动)按钮,即可实现实时模拟界面的交互效果,每当视图相关代码改变时,就会自动实时渲染UI。当UI层级出现结构性调整时,可单击此按钮重新加载预览界面。“Live”按钮如图1-18所示。
图1-18 “Live”按钮
“Selectable”(选择模式)按钮可将实时预览窗口效果切换至UI元素选择模式。当单击预览设备中的元素时,左侧代码编辑区域将自动定位该UI元素对应的代码。在代码编辑区域修改UI元素的属性或者增加修饰符时,也可以在实时预览窗口的选择模式下,查看UI元素的尺寸大小和修饰效果。“Selectable”按钮如图1-19所示。
图1-19 “Selectable”按钮
“Variants”(场景对比)按钮用于快速比较不同场景下设备预览的效果。在iOS 13中,Apple引入了全局“深色模式”的设计理念,也要求所有开发者在开发应用时必须支持深色模式。开发者在开发过程中就可以借助项目预览操作栏中的“Variants”,查看不同场景下的项目效果。
通过“Color Scheme Variants”,开发者可以查看项目在不同颜色场景下的效果,预览浅色模式和深色模式下的效果。颜色场景对比如图1-20所示。
图1-20 颜色场景对比
在实时预览窗口中,也可以通过“Orientation Variants”查看项目在不同设备方向场景下的效果,预览设备在纵向、横向(左边横向、右边横向)场景下的效果,在通常情况下,大多数应用都是纵向布局的,当然,也可以在项目的配置菜单中取消勾选横向展示的功能。设备方向场景对比如图1-21所示。
图1-21 设备方向场景对比
最后一项是“Dynamic Type Variants”(字体大小对比),通过它可以看到开发者选用的不同字体大小在界面中的效果。字体大小的范围从X Small到AX 5,当开发者没有指定字体大小时,系统默认的字体大小是“Large”。字体大小对比如图1-22所示。
图1-22 字体大小对比
由于字体大小的选用将影响到UI的排版和实际效果,因此开发者最好在UI设计上拥有或者借鉴一套设计规范,以设计出精美且优秀的应用。
除了通过“Variants”进行场景对比,如果开发者只想查看某一特定场景下的预览效果,那么可以在单击“Live”按钮后,通过配置“Canvas Device Settings”(画布设备设置)来查看效果,配置“Canvas Device Settings”如图1-23所示。
图1-23 配置“Canvas Device Settings”
在单击“Live”按钮后,也可以开启“Preview on Device”(在设备中预览),于是当开发者接入真机设备时,就可以在实时预览窗口和真机设备上同步预览项目效果。
最右侧的一组按钮则比较简单,用于调整实时预览窗口中设备的预览大小,这里不做过多说明。使用比较频繁的按钮是“Zoom to fit”(自适应缩放)按钮,该按钮让预览设备可以以合适的预览大小呈现,“Zoom to fit”按钮如图1-24所示。
图1-24 “Zoom to fit”按钮
综上,开发者可以在不借助模拟器和真机设备的情况下,实时预览项目的交互、动画、数据处理、UI布局等效果。
最左侧的项目文件导航区域会存放所有与项目相关的文件,包含项目主文件、视图文件、资源库文件、预览配置文件等,开发者也可以自行创建文件和文件夹来完善项目内容。项目文件导航区域如图1-25所示。
图1-25 项目文件导航区域
可以看到视图文件ContentView放置在项目的文件中,通过单击文件,代码编辑区域和实时预览窗口将会自动切换展示内容。
项目文件导航区域中最上面的“Chapter1”文件为项目主文件,所有与项目相关的文件都会放置在此文件的目录层级之下,且该文件还可以用于进行项目的各项配置。项目主文件如图1-26所示。
图1-26 项目主文件
项目主文件分为“PROJECT”和“TARGETS”两部分,PROJECT部分包含配置该项目的基础信息,包括该项目开发和测试的版本、使用的语言,以及使用的第三方库等情况。
由于Apple每年都会更新SwiftUI框架的内容,新推出的UI视图可能需要较高的iOS版本,因此在PROJECT部分可以设置该项目开发的版本,项目开发的版本如图1-27所示。
图1-27 项目开发的版本
其他配置在后续的章节中将会使用,可以先保持默认选项,下面来看TARGETS部分。单个PROJECT下会有多个TARGETS。例如该应用除了iOS端的项目,还包含Widget项目,抑或watchOS端的项目,开发者可以在现有的项目基础上直接创建其他子项目,TARGETS部分就会整合并关联所有的子项目的相关配置。
在当前项目中,可以在TARGETS部分的“Supported Destinations”栏目下配置项目支持的平台,iOS项目默认可以在iOS、iPadOS、macOS(搭载M系列芯片)平台上运行,开发者也可以自行添加或删除项目所支持的平台,项目支持平台如图1-28所示。
图1-28 项目支持平台
与项目支持平台相关联的配置还有“Minimum Deployments”栏目,该栏目用于配置项目运行的最低iOS版本。每年Apple都会对各平台的操作系统进行大版本更新,而每次更新时一些发布较早的产品将不再支持新版本的特性。
当开发iOS项目时,SwiftUI的某些功能特性也会要求最低iOS版本,当该应用正式发布到Apple Store时,也需要制定最低iOS版本。Xcode默认的最低iOS版本为当前最新iOS版本,开发者可以根据项目需求自行选择合适的iOS版本,最低iOS版本如图1-29所示。
图1-29 最低iOS版本
“Identity”栏目用于设置应用的基本信息,包含应用的分类、显示的名称、标识符、版本号等,应用的基本信息如图1-30所示。
图1-30 应用的基本信息
“Deployment Info”栏目可以设置项目运行设备的方向及顶部状态栏配置信息,例如设置在iPhone设备上运行时,只支持用户手持时的纵向布局,而在iPad设备上运行时,支持任意方向布局。
顶部状态栏的配置信息可以根据业务设置为默认,或者只以浅色模式或深色模式固定,抑或在应用运行时不使用顶部状态栏的全屏显示模式。运行设备设置如图1-31所示。
图1-31 运行设备设置
“App Icons and Launch Screen”栏目可以设置应用图标的来源和启动页的文件路径。应用图标的来源和启动页的文件路径设置如图1-32所示。
图1-32 应用图标的来源和启动页的文件路径设置
默认情况下应用图标的来源为资源库Assets中的“AppIcon”文件,对于这个配置项,开发者可以不做调整。启动页默认为空,开发者可以创建一个Storyboard类型的文件,通过绘制的方式完善启动页的UI设计,这部分内容将会在后续的章节中进行更详细的分享。
其他栏目的配置项使用得较少,保持默认即可。TARGETS部分还有一个特别重要的栏目,该栏目可用于权限的配置,在“Info”选项卡下,每当项目中需要调用iOS硬件设备时,都需要在此选项卡下的“Custom macOS Application Target Properties”栏目中配置相关权限。权限配置栏目如图1-33所示。
图1-33 权限配置栏目
再回到项目主文件Chapter1中,第一个文件是“Chapter1App”,在Chapter1App文件中,可以看到和ContentView文件相似的代码。Chapter1App文件中的代码如图1-34所示。
图1-34 Chapter1App文件中的代码
在Chapter1App中,使用Swift 5.3发布的@main属性包装器修饰整个Chapter1App结构体,即将遵循App协议的Chapter1App结构体中的视图作为App打开时的默认视图。简单来说,当用户打开App时,App默认显示的“首页”就是Chapter1App中配置的视图。
与View协议类似,App协议中也需要一个body属性的视图容器作为入口,而入口遵循Scene协议,通过WindowGroup来显示应用被打开时显示的视图,默认为ContentView视图。
在实际开发过程中,打开App时默认显示的页面可能是“首页”,或者是“登录页”“引导页”。在更复杂的场景下,开发者可以增加判断条件,根据用户是否登录和是否首次进入来呈现不同的页面。
WindowGroup可以更好地处理这种复杂场景,它通过将不同的视图添加到视图组中,自动管理需要显示的视图,甚至通过不同的平台来管理视图的呈现方式。可以按住“option”键并单击WindowGroup,查看Apple官方对WindowGroup的说明,WindowGroup的说明文档如图1-35所示。
图1-35 WindowGroup的说明文档
Assets库是存放当前项目的素材内容的文件夹,可以存放包含应用图标、图片素材、颜色素材等文件。
在实际开发过程中,为保障App质量和UI风格的统一,UI设计师常常针对某一款App设计一套UI设计规范,设计规范中规定了App的色彩、字体、应用图标等。开发者可以提前将符合相关规范的素材文件拖入Assets库中,Assets库中的文件可以直接在项目中被调用。Assets库如图1-36所示。
图1-36 Assets库
除了自行导入素材,Apple还提供了内置的图标资源库SF Symbols(SF符号)供开发者使用,这对独立开发者有很大的帮助。截至2023年10月,SF Symbols图标资源库中的图标数量已经达到5000多个,且无须在项目中安装即可直接使用。
Apple SF Symbols 5官方下载地址为https://developer.apple.com/cn/sf-symbols/。
为了方便开发,开发者可以下载SF Symbols图标资源库到本地,便于快速查询所需要的图标的名称,SF Symbols图标资源库如图1-37所示。
图1-37 SF Symbols图标资源库
SF符号的使用方式很简单,只需要借助Image视图,并调用其systemName参数,直接使用SF符号的名称即可显示对应图标。使用SF符号如图1-38所示。
图1-38 使用SF符号
最后一个文件夹是Preview Content文件夹,用于存放开发者在测试应用时使用的素材或者文件,此部分内容会在应用打包上架时被自动过滤,因此可以存放临时的素材文件,例如本地视频文件、音频文件等。Preview Content文件夹如图1-39所示。
图1-39 Preview Content文件夹