大多数浏览器和
Developer App 均支持流媒体播放。
-
在 Swift Playgrounds 中构建您的首个 App
学习如何使用 Swift Playgrounds 轻松地制作原型并构建 App。我们将介绍如何在空白项目的基础上开发 App,利用 SwiftUI 为它构建界面,以及借助 Swift Package Manager 添加来自开源软件包的额外功能。我们还将讨论您可以如何使用 Previews 和控制台调试问题,并指导您通过 TestFlight 将 App 提交到 App Store Connect 以便进行分发。
资源
相关视频
WWDC22
-
下载
欢迎来到“在 Swift Playgrounds 中 构建您的首个 App” 我是 Swift Playgrounds 团队的工程师 Collett Charlton 我是 Connor Wakamo Swift Playgrounds 团队的 另一位工程师 Swift Playgrounds 是学习 Swift 编码的绝佳工具 现在您可以更进一步 可以通过它构建 App! 今天 我们将介绍在 Swift Playgrounds 中 如何从一个空白模版 构建一个 App 然后我们将展示 如何使用预览和控制台进行调试 最后 我们会将 App 提交给 TestFlight
我们的团队非常喜欢泡茶和喝茶 我们非常喜欢这个活动 以至于我们想为此制作一个 App Connor 和我将构建一个 App 来帮助我们在下午茶时间 提供给我们一份茶清单 用来帮助我们选择每天喝什么 Swift Playgrounds 在 Mac 和 iPad 上工作得很好 因为我今天带着 Mac 电脑 所以我要开始在这里构建这个 App
无论您是编程新手 还是经验丰富的开发者 Swift Playgrounds 都会为您提供开始编程的 各种模版和教学内容 对于开发我们的选茶 App 我们要首先单击空白 App 模板 它在屏幕的左下角
现在我们有了模板 让我们双击打开
好了 右侧的实时交互式预览里 显示了“Hello World”文本
在我们开始写代码前 要使用 App 设置 对程序进行一些功能的自定义 为此 我需要单击边栏左上角的 App Settings (App 设置) 按钮
在这里 您可以自定义各种项目属性 例如 App 名称 和主题颜色 您还可以添加自定义 或占位符程序图标 软件功能或用途的 描述字符串和 Bundle ID 我会将 App 的名称 更改为“Tea Time”
然后将主题颜色设置为棕色
然后把程序图标换成 咖啡杯的占位符图标
好的 现在重要的部分已经设置完毕 让我们通过选择模板文本 开始编写一些代码 并将其替换为 我们在库中的第一个视图 可以通过单击项目工具栏 中的加号按钮访问库 它包含易于使用的 代码片段 如:视图 修饰符、SF 符号和颜色 我们将使用列表视图 来显示我们的茶列表 所以我将在搜索中键入 list (列表) 并单击将其插入代码段
现在我们有了列表视图 下面向其中添加一些茶的项目
我将开始输入文本… 并使用回车键 从内联代码完成面板 接受并插入建议的完整代码
好的 现在我们的列表视图里 有了一个茶项目 让我们再添加一些
等等 我好像不小心 加了两次“茉莉绿茶” 为了避免我们输入重复 我们应该 将它们存储为 orderedSet 幸运的是 Apple 的 swift-collection 包 提供了这一功能 所以 让我们将 swift-collection 包 添加到我们的项目中
为此 让我们打开“文件”菜单 并选择 Add Package (添加软件包)
我将首先输入 swift-collections 包 的 URL 地址 然后按回车键
获取包后 我们需要查看包的版本 以及其他可以添加到 我们项目中的功能 对于这个 App 我们将只选择 Collections (合集) 然后单击 Add to Project (添加至项目)
现在我们在 Packages 下的侧边栏中将 swift-collections 添加到我们的项目中 让我们创建一个 String 类型的 OrderedSet 用来存储我们的茶列表
等等 好像我们的程序有点问题 让我们通过点击问题图标来看看
“在范围内找不到类型有序集” 哦 我明白是什么问题了 我忘记在我们的项目中导入 Collections 模块 现在让我们导入它 问题应该能得到解决
现在我们已经解决了这个问题 下面让我们更新列表视图 以使用我们刚刚创建的集合 为此 我们需要 使用 ForEach 视图
好的 这里就有内容了 我们的列表正在从 茶集合中展示各种茶的信息 在我做这个项目时 我对要添加的功能 产生了越来越多的想法 如果我们的 App 可以听到 茶壶的叫声那就太酷了 可以让我们知道什么时候倒茶 我现在还不打算添加这个功能 但让我们先来看看 将采取哪些做法 才能向用户解释清楚为什么 我们的 App 需要使用麦克风
要添加它 让我们回到我们的 App 设置 并单击 Capability (功能)
使用右上角的加号按钮 我们将看到 可以添加到项目中的功能列表 让我们找到“麦克风” 并点击“Add”将其添加 对于目标描述字符串 我们将编写:“Tea Time 使用麦克风 监听茶壶的声音” 然后单击“Add” 关闭 App 设置
好的 我们今天做了很多 并且我非常高兴为您分享这个项目 以及我与 Connor 在这个项目之中那些很酷的想法
我会与 Connor 在我们共享的 iCloud 文件夹中共享这个项目 但首先 我们要给它起一个比 My App 更好听的文件名称
现在 我需要将文件拖拽到 iCloud 共享文件夹中
我已完成我的工作内容 现在我将 交给 Connor 来完成这个 App 谢谢 Collett 我会在 iPad 上完成优化这个项目 由于我们是通过 iCloud 共享文件夹 来共享我们的项目文件 因此项目文件没有出现在 Swift Playgrounds 的项目的主列表中 但如果 我点击 Locations (位置) 我就可以从 iCloud 访问项目文件 或者甚至可以从 第三方文件提供商获取 现在我已经处于 我们的共享文件夹中 所以我会点击 Tea Time 文件来打开项目 我所做的任何程序更改 都会自动更新这个共享项目 看起来 Collett 是个很好的工程师 把只添加了一些额外功能 的项目文件上传到 iCloud 她在这里实现了一个 TabView 控件 所以我们的项目不只有一个茶列表 同时它还是一个助手类程序 如果我点击 Assistant (助手) 选项卡 可以看到它非常简单 但可以工作 我可以做一个推荐功能 并且提供一些可能要喝的茶的建议
看来今天我应该喝茉莉清茶 现在我知道 Collett 正在制作一种有趣的选茶新方法 为它添加一些有趣的风格 让我们打开侧边栏来找找看
看起来 TeaWheelView 像是我们正在找的 所以让我们打开它
我们看到 这里有一个收集数据集的视图 让我们添加一个视图预览 以便我们可以 在 TeaWheelView 添加到主程序之前 先看看效果 滑到文件的底部
然后输入“PreviewProvider”
在这里我将通过按回车键 来应用代码完成建议 然后将其命名为 TeaWheelView_Previews
在右侧预览区域的底部 此时出现页面切换箭头 这表示 Swift Playgrounds 可以识别我的程序 如果我点击 App 预览下方的右箭头… 这样就可以只使用我的视图预览 而不是使用 App 的预览 现在这里只显示了 “Hello, world!” 那么现在让我们添加一些代码 来创建 TeaWheelView 首先 我将添加一个 包含一些条目的数组 作为静态属性 以便于我的预览可以使用它们
我会将光标放在两个方括号之间 然后通过拖动右括号添加占位符
接下来我将用 条目内容描述字符串替换这些占位符
现在我们已经有了一些条目 让我们把它添加至 TeaWheelView 我会选择 Hello, world! 示例 然后将其替换为显示刚创建的条目的 TeaWheelView 实例
我还需要 添加一点 padding 空间
太好了 现在我们的视图预览里 显示了一个轮盘 多漂亮的轮盘 我可以旋转它 它会根据 停止的位置 来选择不同的条目 让我们回到助手选项卡 并添加这个轮盘 我将使用侧边栏打开名为 AssistantTab Swift 文件 我将删除 Button 控件 并将其替换为 TeaWheelView
TeaWheelView 可以通过 使用可选的操作闭包 当轮盘停止旋转时调用
我会用它把上一次选择的茶 设置为 “选定的茶” 然后将 showPickAlert 设置为 true 以便 SwiftUI 显示告警信息
好的太棒了 我们已把轮盘编辑好了 那么现在让我们来试试吧 我会旋转它… 然后它建议我喝字节乌龙茶 我再刷一遍…
还是字节乌龙茶 再一次
唔 似乎有些不对劲 即使它落在轮盘上的不同位置 程序还总是推荐字节乌龙 虽然那是一种很好的茶 但我还是想要一些多样性的选择 让我们切换回轮盘视图 并试着查查到底怎么回事
从这里看不出哪里出了问题 因为轮盘确实旋转了 并降落在不同的位置 让我们在视图预览中 添加一个打印语句 以便于检查预览是否也出了问题
现在 当我转动轮盘时…
在源编辑器的左下方会 弹出一条控制台消息 条目一… 条目一…条目一 啊哈 每次旋转都会给我们条目一 这表明某些功能 并没有正确的关联起来 因为它每次都给我第一个条目 我将首先使用项目范围内 的查找进行搜索 我将点击位于屏幕左侧的 侧边栏顶部 的搜索框 然后键入“first” 并按回车键
这个结果看起来像是我正在找的 所以我会点击它
啊 看来 Collett 在这里 留下了一些调试代码 这使轮盘每次都返回第一个条目 而不是正确的结果 让我们快速修改它 然后再旋转一次
条目二 … 条目四 太好了! 看起来它已经可以正常工作了 如果我们通过点击预览下方的左箭头 切换回我们的 App 预览 我们就可以在真实的 App 中测试一下功能 转动轮盘 然后它推荐给我英式早餐茶 所以现在我们有了一个助手功能 太厉害了!为了确认 App 在各种屏幕尺寸下都能正常工作 我可以通过按下 屏幕左上角的 Run (运行) 按钮 让它在这个设备的 真实窗口中运行程序
好的 看起来 所有功能都在这里了 我有我的茶单功能 和包含一个轮盘的助手功能 我可以通过点击 状态栏右侧的小 Swift 图标 返回 Swift Playgrounds 项目 然后在弹出的视窗中 选择 Show Project (显示项目) 按钮
我已准备好 我与朋友和家人 一起测试这个 App Swift Playgrounds 让测试变得容易 因为您可以从 Swift Playgrounds 把项目直接提交到 TestFlight 如果我打开 App Settings 并滚动到底部 您会看到有一个 “Upload to App Store Connect”的按钮 如果我点击这个按钮 Swift Playgrounds 会完成创建 App 记录 以及将 App 上传到 App Store Connect 的所有麻烦工作 这样我就可以将它发布到 TestFlight 并最终发布到 App Store
现在我的 App 已上传 我可以前往 App Store Connect 并将其提交给 Beta App Review 稍等片刻后 我们可以转到 TestFlight 并从那里安装它 甚至可以安装在 iPhone 上
我将点击 Install (安装) 来安装 Tea Time
现在它已安装 我点击 Open (打开) 按钮将其打开 我会点击测试按钮 这里会显示 关于如何提供反馈的说明
好了 我们的 App 正在 iPhone 上运行 我今天应该喝什么茶?
看起来我要参加 Matt P 的茶话会了 今天 Collett 和我向您展示了 如何使用 Swift Playgrounds 在 Mac 和 iPad 上构建 App 我们演示了如何使用库和代码 完成插入新的代码 我们通过 iCloud 共享文件夹 分享了我们的项目 我们使用视图预览和控制台 来调试我们的代码问题 我们甚至直接从 iPad 向 TestFlight 提交了一个 App 希望您在此过程中学到了一些内容 我们迫不及待地想看看 您使用 Swift Playgrounds 构建的内容 感谢您的收看 希望您享受 WWDC 的其他讲座
-
-
3:31 - First Tea Item
Text("Jasmine Green")
-
3:39 - List Of Teas
Text("Jasmine Green") Text("English Breakfast") Text("Byte's Oolong") Text("Golden Tippy Assam") Text("Matt P's Tea Party") Text("Darjeeling") Text("Genmaicha") Text("Jasmine Green") Text("Vanilla Rooibos")
-
4:45 - OrderedSet of Teas
let teas: OrderedSet<String> = ["Byte's Oolong", "Golden Tippy Assam", "English Breakfast", "Matt P's Tea Party", "Darjeeling", "Genmaicha", "Jasmine Green", "Vanilla Rooibos"]
-
5:28 - ForEach View
ForEach(teas, id: \.self) { tea in Text(tea) }
-
8:45 - Initial Preview Provider
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { Text("Hello, world!") } }
-
9:22 - Preview Provider with TeaWheelView
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { TeaWheelView(items, id: \.self) .padding() } }
-
10:40 - TeaWheelView in Assistant Tab
TeaWheelView(dataSource.teas, action: { tea in lastPickedTea = tea showPickAlert = true })
-
11:55 - Preview Provider with Print Statement
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { TeaWheelView(items, id: \.self) { print($0) } .padding() } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。