Cdf1308264c5c3cd968822cde7fd7965
WWDC20 10039 - Build document-based apps in SwiftUI

Session: https://developer.apple.com/videos/play/wwdc2020/10039

前言

通过此 Session 你将学习如何在 SwiftUI 中构建文档型 App, 通过 DocumentGroup API,以及 App 和 Scenes 组合,使你的 App 对文档管理的快速集成,例如文档浏览和 iCloud 文件浏览,而无需繁琐多余的工作。

概述

对于用户而言,访问和处理文档是最常用的操作。
文档型 App 的功能也很明确:

  • 可以创建文档和打开文档
  • 用户可以编辑文档并将其保存到磁盘
  • 可以分享文件给另一个用户
  • 管理磁盘上的文件
  • 可以针对 iCloud 文件做增删查改操作

文字或许比较抽象,我们列举几个比较知名的 App 以便你快速理解什么是文档型 App

  • iOS / iPadOS 中的文件应用
  • Xcode & 系统邮件 App
  • 写作软件 Ulysses & 思维导图软件 MindNode
    等等...

iOS/iPadOS 中的文件应用

iOS/iPadOS 中的文件应用

早在 2017 年的 iOS 11 中,Apple 就发布了 Session 来讲述如何在 iOS 中构建文档型 App,具体可以查看 Session(Building Great Document-based Apps in iOS 11)。

然而在现在 (iOS 14) ,Apple 把它带到了 SwiftUI 中,并且提供了更简单、更优雅的方式让开发者接入,接下去,我们会带你一步步深入如何使用 SwiftUI 去开发一个文档型 App,最终我们会完成一个提供绘图并且具有保存绘图数据,打开绘图文件的功能 Mac / iPadOS 应用。

原理探索

创建项目

使用 Xcode 12 创建一个 Document App。我们这边可以选择多平台。因为我们要支持 iPadOS 和 MacOS

代码初探

创建成功后,你可以看到 Xcode 生成的模板代码结构

@main
struct TextEdit: App {
    var body: some Scene {
        DocumentGroup(newDocument: TextDocument()) { file in
            TextEditor(text: file.$document.text)
        }
    }
}

可以注意到,在 iOS 14 中,SwiftUI 代码发生了一些变化,如之前的 some View 变成了 some Scene,同时也多出了 App & DocumentGroup 这2个新东西。
别急,我会带你们一步步深入探索其中的变化。

首先,我们来看一张层级图:

App: SwiftUI 的新 API,App protocl 使我们能够轻松地用一个结构来替换 AppDelegate 和 SceneDelegate,该结构将管理我们的场景和应用生命周期。
Scene: SwiftUI 的新 API,它表示界面可以由不同的平台独立显示。
DocumentGroup: SwiftUI 的新 API,它可以自动管理 iOS,iPadOS 和 macOS 支持的,基于文档的场景的打开,编辑和保存。
在不同平台下 DocumentGroup的表现为:

  • iPadOS:
  • MacOS:

想了解更多 SwiftUI 的变化可以查看:WWDC 2020 - What's new in SwiftUI

好了,了解了这些概念之后,我们可以成功运行下 App (MacOS),看看效果

top Created with Sketch.