WWDC Quick Look 💓 By SwiftGGTeam
Meet ClassKit for file-based apps

Meet ClassKit for file-based apps

元の動画を見る

ハイライト

Apple が ClassKit にファイルレベルの進捗 API を追加し、ファイル URL を使用してファイルベースの教育アプリケーションを取得できるようになりましたCLSActivity、学習期間、進捗状況、ファイル関連の指標をスクールワークに報告します。

主要内容

多くの教育アプリケーションの中核となるオブジェクトはファイルです。

生徒は作品を開き、プレゼンテーションを編集し、音声ファイルを視聴します。教師が関心を持っているのは、この文書に関する学習プロセスです。つまり、生徒がどれくらいの時間がかかり、どこで終了し、最終的にどれだけの内容を作成したかです。

以前は、ClassKit にアクセスするには、通常、最初にアプリケーションを公開する必要がありました。CLSContext。コース、章、演習など、コンテンツ構造が固定されたアプリケーションに適しています。ファイルベースのアプリケーションの問題はここにあります。コンテンツはユーザーまたは教師のファイルから取得され、アプリケーションは事前にファイルごとにコンテンツ ツリーを構築できません。

Apple は、WWDC 2021 で ClassKit にファイルレベルの API を追加しました。アプリケーションはファイル URL を取得した後、呼び出します。CLSDataStore.shared.fetchActivity(for:)対応するものを取得しますCLSActivity。学生が編集を開始すると呼び出されますstart()、最後にインジケーターを書いて呼び出しますstop()

この設計により、アクセス ポイントがファイルのライフ サイクルに戻ります。アプリは引き続き同じ方法でファイルを開いたり閉じたりしますが、既存のフローに ClassKit コードを数行追加するだけです。教師がスクールワークでファイルを割り当て、生徒が同じファイルを開くと、スクールワークはアプリケーションによって報告される期間、進捗状況、および主要な指標を確認できます。

前提条件: アプリケーションは Open in Place をサポートしている必要があります

ファイルレベルの進行状況は同じファイルに依存します。

Apple は、アプリが Open in Place を使用することを明示的に要求しています。このようにして、教師によって割り当てられたファイルは生徒のデバイス上で元のファイルとして開かれ、アプリケーションは共有ファイル自体を処理します。 ClassKit は、ファイル URL を使用して、スクールワークの課題をアプリ内のアクティビティに関連付けることができます。

データ フロー: アプリケーション、ClassKit、学業

スクールワークでは、教師が課題を作成および表示します。アプリケーションは学習データを ClassKit に渡す役割を果たします。次に、ClassKit はこのデータを生徒と教師に提示します。

このセッションの例はテキスト エディタです。アプリは、生徒が教師によって割り当てられたテキスト ファイルを開くと計測を開始します。生徒が「完了」をクリックする前に、アプリは総単語数、進捗状況を記録し、タイミングを停止します。スクールワークに戻ると、生徒は所要時間と単語数を確認できます。教師ビューでは、クラスの平均所要時間、平均単語数、各生徒の詳細を確認できます。

詳細

ファイル URL を使用して学習アクティビティを取得する

(03:22) ファイルレベルの API が呼び出されますfetchActivity(for:)、寝そべるCLSDataStore。呼び出し時にファイルの URL を渡して戻りますCLSActivity。このアクティビティ オブジェクトには、このドキュメントの進行状況データが含まれます。

func openFile() async throws {
     // Your existing code for opening a file goes here.
     let activity = try await CLSDataStore.shared.fetchActivity(for: fileURL)
     activity.start()
     try await CLSDataStore.shared.save()
}

キーポイント:

  • openFile()セッション サンプルは、アプリケーションの既存のファイルを開くプロセス内に配置され、学生がファイルの編集を開始すると呼び出されます。
  • fileURL現在開いているファイルの URL です。ClassKit はこのファイルに対応するアクティビティを見つけるために使用します。
  • CLSDataStore.shared.fetchActivity(for: fileURL)得るCLSActivity
  • activity.start()生徒がこの文書に取り組んだ時間を記録し始めます。
  • CLSDataStore.shared.save()この変更を送信してください。セッションには、呼び出されないことが明確に示されています。save()書き込まれたばかりのデータは永続化されません。

ファイルを閉じるときにメインのメトリクスと進行状況を書き込みます

(08:07) 生徒が編集を終えてファイルを閉じようとしたとき、アプリは同じファイルを再度取得しましたCLSActivity、主な指標、進行状況、停止タイミングを書き込みます。

func closeFile() async throws {
     let activity = try await CLSDataStore.shared.fetchActivity(for: fileURL)
     let wordCount = activity.primaryActivityItem as? CLSQuantityItem ??
         CLSQuantityItem(identifier: "total_word_count", title: "Word Count")
     wordCount.quantity = currentDocumentWordCount()
     activity.primaryActivityItem = wordCount
     activity.progress = progress()
     activity.stop()
     try await CLSDataStore.shared.save()
}

キーポイント:

  • fetchActivity(for: fileURL)終了プロセスで同じファイルのアクティブなオブジェクトを取得します。
  • activity.primaryActivityItem as? CLSQuantityItem既存の主要指標を再利用するようにしてください。
  • CLSQuantityItem(identifier:title:)既存のメトリックがない場合は定量的メトリックを作成します。この例では、これを使用して総単語数を記録します。
  • wordCount.quantity = currentDocumentWordCount()現在の文書の単語数をインジケーターに書き込みます。
  • activity.primaryActivityItem = wordCountスクールワークのメインインターフェースに表示されるインジケーターとして単語数を設定します。
  • activity.progress = progress()完了の進行状況を 0 ~ 1 で書き込みます。
  • activity.stop()持続時間の記録を停止します。
  • save()単語数、進行状況、停止タイミングの変更を保存します。

適切な進行状況データの種類を選択します

04:01CLSActivityさまざまな進捗データを保存できます。ファイルベースの API は ClassKit の既存のデータ モデルを再利用します。

let activity = try await CLSDataStore.shared.fetchActivity(for: fileURL)

activity.start()
activity.progress = 0.5

let wordCount = CLSQuantityItem(identifier: "total_word_count", title: "Word Count")
wordCount.quantity = currentDocumentWordCount()
activity.primaryActivityItem = wordCount

activity.stop()
try await CLSDataStore.shared.save()

キーポイント:

  • activity.start()そしてactivity.stop()期間を報告するために使用されます。 Apple は、すべてのファイル タイプで時間をレポートすることを推奨します。
  • activity.progress = 0.5学生が 50% 完了したことを示します。例として、セッションの途中で音声またはビデオを使用します。
  • CLSQuantityItemドキュメントのページ数、スライド数、総単語数などの一般的な数値を表します。
  • primaryActivityItemこれはメイン インジケーターであり、スクールワークのメイン UI の場所に表示されます。
  • save()このアクティビティ データを ClassKit に送信します。

05:53primaryActivityItemそしてadditionalActivityItemsすべて保存CLSActivityItemサブカテゴリ。 session には、使用可能な 3 つのタイプがリストされています。

let correct = CLSBinaryItem(identifier: "question_correct", title: "Correct")
let wordCount = CLSQuantityItem(identifier: "total_word_count", title: "Word Count")
let quizScore = CLSScoreItem(identifier: "quiz_score", title: "Quiz Score")

キーポイント:

  • CLSBinaryItemバイナリの結果を表します。セッションの例としては、正解または不正解のクイズの質問があります。
  • CLSQuantityItem通常の数値を表します。セッションの例には、ページ数、スライド数、総単語数などがあります。
  • CLSScoreItemスコアと合計スコアを表示します。セッションの例としては、クイズで 8/10 点を獲得することが挙げられます。
  • アクティビティでは、これらのインジケーターの 1 つを追加したり、複数のインジケーターを組み合わせたりできます。

追加のメトリクスでファイルのメタデータを補足する

05:24additionalActivityItems補助的なインジケーターの設置に適しています。セッションの背後にあるスクールワーク教師ビューには、追加の指標である読みやすさのグレード レベルが表示されます。

let readability = CLSQuantityItem(identifier: "readability_grade_level", title: "Readability Grade Level")
readability.quantity = readabilityGradeLevel()
activity.addAdditionalActivityItem(readability)
try await CLSDataStore.shared.save()

キーポイント:

  • CLSQuantityItem可読性の程度などを数値で表すことができます。
  • readability.quantityアプリケーション自体によって計算されたメトリック値を保存します。
  • activity.addAdditionalActivityItem(readability)このインジケーターを追加インジケーターのリストに追加します。
  • save()追加の指標を保存し、スクールワークの詳細で教師に表示できるようにします。

開発者モードでテストする

(09:05) テストプロセスは 2 つのステップに分かれています。まず、アプリケーションに ClassKit 開発環境を使用させ、次に iPad の開発者設定でスクールワークの役割を切り替えます。

func openFile() async throws {
     // Your existing code for opening a file goes here.
     let activity = try await CLSDataStore.shared.fetchActivity(for: fileURL)
     activity.start()
     try await CLSDataStore.shared.save()
}

func closeFile() async throws {
     let activity = try await CLSDataStore.shared.fetchActivity(for: fileURL)
     let wordCount = activity.primaryActivityItem as? CLSQuantityItem ??
         CLSQuantityItem(identifier: "total_word_count", title: "Word Count")
     wordCount.quantity = currentDocumentWordCount()
     activity.primaryActivityItem = wordCount
     activity.progress = progress()
     activity.stop()
     try await CLSDataStore.shared.save()
}

キーポイント:

  • Xcode で ClassKit 環境の資格を運用環境から開発環境に変更すると、次回の実行で開発者モードになります。
  • iPad の設定で [開発者] > [ClassKit API] に移動し、[教師] を選択し、スクールワークを開いて課題を作成し、アプリでサポートされているファイルを追加します。
  • [開発者] > [ClassKit API] に戻り、[学生] に切り替え、スクールワーク課題のファイルを開いて、アプリケーションをトリガーします。openFile()
  • openFile()電話save()その後、この例では Student Progress バナーが表示され、タイミングの送信が成功したことが示されます。
  • 学生が「完了」をクリックするとトリガーされますcloseFile()その後、スクールワークには期間と主要な指標が表示されます。セッションの例では、41 分と 558 単語が表示されます。
  • テスト後、資格を運用環境に戻します。

重要ポイント

1. アプリケーションを作成する授業モード

  • やるべきこと: 教師が作文テンプレートを割り当て、生徒がアプリでそれを編集すると、スクールワークに作文時間、単語数、完了の進捗状況が表示されます。
  • 価値がある理由: ファイルレベル API を使用すると、アプリは教師によって割り当てられたファイルに関するデータを直接レポートできます。CLSQuantityItem単語数を運ぶことができます。
  • 開始方法: ドキュメントを開くときに呼び出されますfetchActivity(for:)そしてstart(); 生徒が「完了」をクリックすると書き込まれますCLSQuantityItem(identifier: "total_word_count", title: "Word Count")、設定primaryActivityItem、その後電話しますstop()そしてsave()

2. 音声リスニング演習の再生の進行状況

  • 何をすべきか: 生徒は教師によって割り当てられた音声ファイルを開き、アプリケーションは再生完了レベルをスクールワークと同期します。
  • 実行する価値がある理由: セッションでは、オーディオまたはビデオが明示的に 50% まで再生されます。progress = 0.5例。
  • 開始方法: ファイルURLで取得CLSActivity、再生が始まるとstart()、一時停止または終了時の再生位置に応じて設定されます。activity.progress、最後に保存します。

3. プレゼンテーション制作課題

  • やるべきこと: 生徒はプレゼンテーション ファイルを編集し、教師は生徒が完成したスライドの数と費やした時間を確認します。
  • 実行する価値がある理由:CLSQuantityItemスライドの数を報告するのに適しており、スクールワークはそれをメインの指標として表示できます。
  • 開始方法: ファイルを閉じるときに現在のスライドの数をカウントし、次のように書き込みます。CLSQuantityItem(identifier:title:)に割り当てられていますactivity.primaryActivityItem

4. テストファイルのスコア返却

  • 何をすべきか: 教師はクイズ ファイルを割り当て、生徒がそれを完了すると、アプリケーションは各質問のスコアと正解ステータスを返します。
  • 実行する価値がある理由:CLSScoreItem8/10 などの分数に適しています。CLSBinaryItem質問が正しいか間違っているかを示すのに適しています。
  • 開始方法: クイズを完了するとアクティビティを取得し、作成しますCLSScoreItem主な指標として;各質問のステータスをCLSBinaryItem、使用addAdditionalActivityItemに追加。

5. 読み物に対する読みやすさに関するフィードバック

  • 内容: 生徒がファイルを編集または読んだ後、アプリは教師に読みやすさの学年レベルなどの補足的な指標を表示します。
  • 価値がある理由: セッションのスクールワーク教師ビューには、追加の指標として読みやすさのグレード レベルが表示されます。
  • 開始方法: アプリ内で可読性の値を計算し、作成しますCLSQuantityItem、使用addAdditionalActivityItemに追加CLSActivity

関連セッション

コメント

GitHub Issues · utterances