View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • コード
  • SwiftUIでドキュメントベースのAppを構築する

    ドキュメントベースのAppをSwiftUIのみで、構築する方法を学びましょう。DocumentGroup APIについて確認していき、AppやScenesをどのように構成するかをお伝えします。ドキュメントブラウジングや標準コマンドなどの文書管理にすぐに使うことのできるサポートを加えることが可能になります。困難な作業は必要ありません。Universal Type Identifierのセットアップ方法や一流のドキュメントベースのAppを構成する内容について学ぶことができます。このセッションを有効活用するには、まずSwiftUIでAppの作成に慣れている必要があります。詳細を学ぶには、"App essentials in SwiftUI"をご覧ください。

    リソース

    • DocumentGroup
    • Uniform Type Identifiers
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC23

    • より優れたドキュメントベースのアプリを構築

    WWDC20

    • SwiftUIにおけるAppの重要事項
    • SwiftUIの新機能
  • このビデオを検索

    WWDC2020へ ようこそ “SwiftUIでドキュメントベース アプリケーションをビルドする” 私はティナです SwiftUIの担当をしています 今日はSwiftUIを使いドキュメントをサポートする App.構築についてお話をし お見せします まず最初に皆さんドキュメントって 何なのでしょう? よくFinderやFiles App.で macOSやiPadOS iOSで ファイルを管理しようとしています タグやクラウドファイルプロバイダのような フィーチャーや 外付けデバイスを使って 自分のプロジェクトを必要に応じて整理できます App.を使って シームレスに所定のファイルを開封し 閲覧編集できることを当然と思っています またApp.でオリジナルのドキュメントを 変更できることも当然期待する機能で その変更は所定のファイルの開封をサポートしている すべてのApp.へアクセスします これはまずファイルをデータベースにインポートし それから初めてApp.で管理できる というApp.とは対照的です 皆さんがインポートされた ドキュメントを編集するときは 実はオリジナルのコピーを編集しているのであり オリジナルは変更されていません Pixelmatorのような プロフェッショナル用のApp.は ユーザが所定のファイルをオープンしたその場で ファイル管理ができるだけではなく よりパワフルな編集機能を使うことができ そのパワフルな機能とは複数のファイルを 同時にオープンする機能も含まれています Keynote, Final Cut Proなどの App.の機能のほとんどは ユーザがこのようなドキュメントの管理が できるようにしていることが重要な点です このようなApp.の挙動を指して私たちはよく “ドキュメントベースApp.”と呼びます でも皆さんのApp.でもドキュメント開封 フィーチャーには対応しており 完全なドキュメントベースではなくても その機能は可能なのです XcodeなどのApp.は 更なるUIやフィーチャーを ドキュメントサポートに加えて持っています メールやConsoleのようなApp.は 元々はドキュメントベースでは ないように見えますが EMLファイルやクラッシュレポートのような ドキュメントもさらにサポートしています

    SwiftUI App.はApp.と シーンとビューで構成されています ドキュメントへのサポート追加は 構成として実行され それにはDocumentGroupと呼ばれる シーンタイプが使われます シンプルなテキスト編集App.は このような外観です 皆さんのApp.でDocumentGroupを使うとき 実はこのApp.が 所定のドキュメントタイプを開封し管理する ということを宣言しているのです

    “App Essentials in SwiftUI” トークにあるように 我々のコード構成はApp.の所有者の ヒエラルキーと一致します この場合我々のApp.には 単一のDocumentGroupシーンが含まれており またそのドキュメントコンテンツの 複数のウインドウをオープンすることができます もちろん構成要素として 様々なタイプのDocumentGroupを 複数サポートできますし また単体のWindowGroupや DocumentGroupもサポートできます みなさんはこれらシーンを App.に構成することもできます またSwiftUIは自動で皆さんのApp.に これらに対応するプラットフォームの挙動も ご期待通りのものをご提供しています それにはドキュメントApp.に特有の 標準UI要素を含みます またMac上のステートトラッキングやHandoff また検索フィールド付きの ドキュメントブラウザやナビゲーションバー iOS上の共有機能などもです これら機能を使うためにも 最低限のコードしか必要ではありません ではDocument Group APIを使って 構築をしてみましょう 私のiPad PlaygroundのSwiftUIで 作図App.のプロトタイプを作っていました ここには様々な色のいろいろな形状を 追加できるカンバスがあり その形状を変更もできます とてもうまく動いています そこで私の作った図面を保存し管理できるApp.へ これを入れたいと思います さあ やってみましょう XcodeをオープンしてドキュメントベースApp.を 作りましょう macOSとiOS両方で実行したいと思います ここでマルチプラットフォームテンプレートを 選びます

    これを"ShapeEdit”と呼ぶことにします

    すでにテンプレートはいくつか出てきています ではこれを構築し実行しましょう

    今テキスト編集App.が使えますが これには先ほど言いましたすべての ドキュメントサポートフィーチャーがあります ここで詳細に入る前に プロジェクト設定を見てみましょう

    今度はmacOSをターゲットにしてみましょう でも今から使うコンフィギュレーションは iOS macOSターゲットの両方に適用できます

    それではInfo.plistを見てみましょう

    XcodeはドキュメントベースApp.用 “ドキュメントタイプ”セクションを追加します

    ここの識別子フィールドの値は Uniform Type Idendifierです このシステムはこの識別子を使ってファイルと 皆さんのApp.を関連付けし システム上で識別子を認識すると そのApp.の中でこのタイプのドキュメントを オープンするのだということを認識します この識別子はここでインポートされた タイプであると宣言されるのです

    これはプレーンテキストタイプが すでに他から宣言されているので重要なことです またこのタイプの宣言をインポートし App.がそれを認識していることを システムに教えます 私たちのApp.については 自分のタイプを宣言することとして ここへ戻りましょう

    そして作ってみましょう

    これは私たちが創ったタイプなので タイプ宣言をエクスポートし 私たちがこのタイプの正当な所有者であることを 通知する必要があります そのため“Exported Type Identifier” セクションに入力します

    では記述をしましょう

    これから図面App.の バイナリーデータを格納します そしてパブリックデータへ一致させます

    そしてパブリックコンテンツにも一致させます

    また拡張子を割り当てます

    必要な変更これだけすべて終わりました メイン機能を見てみましょう

    私たちのドキュメントタイプである ShapeEditDocumentはすでに宣言されています

    使用するドキュメントのタイプと 新しいドキュメントを作成するときに使う ベースドキュメントこれらが DocumentGroupへ渡されます

    クロージャの引数のドキュメントプロパティは バインディングであり 基となるデータモデルへ 読む‣書くアクセスを可能にします これはこのテキスト編集App.ではテキストです DocumentGroupは オープニングスペースをサポートし またバインディングによりSwiftUIは テキストが更新されたことを認識でき ドキュメントの取り消しまた元の保存を変更した などを登録するなどの処理をします それではContentViewを見てみましょう これはドキュメントを表示するときの デフォルトの画面です

    テキストエディターで構成されています これから形状描画図App.を実行するので ユーザが描画できるように キャンバスに換えましょう 後でまたここへは戻ってきます ShapeEditDocumentを見てみましょう

    これはファイルドキュメントプロトコルに 一致する値の型で ディスク上のドキュメントの表現のことです まずreadableContentType つまり可読なコンテンツタイプを定義します これはUT Typeのアレイでユニフォームタイプ アイデンティファイアーUTIです SwiftUIはこれを使い該当するユーザが開きたい ドキュメントのタイプを特定し 定義されたものだけが許可されます Textの例がここに定義されてます

    さっきのターゲットのInfo.plistの“Document Type” セクションへの入力値と一致するはずです ではこれを変更しましょう

    この二つの宣言の違いに注目してください ここではエクスポートされた Asコンストラクターを使っていますが この前はインポートされた Asコンストラクターを使いました インポートタイプは算出された変数です というのもこれはインポートされたからです App.がインストールやアンインストールされると この値はそれに従い変わるということです ここではエクスポートタイプを使いますので 定数として宣言されます さらなる情報が必要な方は 開発者ウエブサイトで UT Typeの資料をご覧ください ではこれを変更して

    私たちのタイプにします

    次に私たちのドキュメントの 初期化を実装しましょう それにはFileWrapperと コンテンツタイプが必要です このコードは要らないので削除します

    コンテンツタイプ引数は 常にApp.にサポートされるタイプとなります やり方はいくつかあります ここではJSONデコーダーを使うことにしましょう

    JSONデコーダーを使うにはタイプが “Codable”に一致する必要があります

    またこの指定されたタイプのため ドキュメントをファイルに書き出しする処理を 実行しなくてはなりません これはどちらも要りませんので 削除します

    FileWrapperはこの シリアライズ化のデスティネーションです これはIN/OUT引数なので 新規のFileWrapperを作成するか これを更新するかのどちらかができます ここでこのやり方も数個ありますが 今回はJSONデコーダーを使いましょう

    そのためファイルドキュメントプロトコルに 一致させるには これだけでできてしまいます ここである値の型を使っていることに 注目してください

    つまりこの構造体を使って得れる すべての恩恵を受けているということなのです それにはコピーと書きこみも含みます そしてユーザが作図中でも App.は保存を開始できるのです

    では所定のドキュメントサポートを使用し プロジェクトに私たちのプロトタイプ キャンバスコードを追加しましょう

    今形状の属性を定義するグラフィックタイプと 形状を表示するCanvasViewが 手元にあります

    ではドキュメント内のデータタイプを テキストから今 使っている グラフィックタイプに変えましょう

    また最初の形状を追加しましょう

    そしてこのキャンバスで TextEditorをスワップアウトしましょう

    これで設定は終わり では実行してみましょう

    ここにドキュメントをサポートする 図面App.があるので 図面を保存しあとで使用することもできます 本当に簡単に SwiftUIのご自身のApp.に ドキュメントサポートを追加できるのです ありがとうございました

    • 2:12 - DocumentGroup TextEditor

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

Developer Footer

  • ビデオ
  • WWDC20
  • SwiftUIでドキュメントベースのAppを構築する
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン