[WWDC18][iOS 12] QLPreviewControllerを使用してUSDZファイルをアプリ内で表示する #WWDC18

本記事では、QuickLook FrameworkのQLPreviewControllerを使用してUSDZファイルをアプリ内で表示する実装を紹介します。
2018.06.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

本記事では、QuickLook FrameworkQLPreviewControllerを使用してUSDZファイルをアプリ内で表示する実装を紹介します。

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

検証環境

本記事は以下の環境で検証を行っています。

  • macOS Sierra 10.13.4
  • Xcode Version 10.0 beta (10L176w)
  • iOS Deployment target: 12.0

USDZファイル

USDZファイルは以下のような特徴をもちます。

  • 3Dモデルを提供するための新しいフォーマットであり、モデルとテクスチャを1ファイルにパッケージできる
  • ベースはPixarのUniversal Scene Description
  • 対応環境はiOS 12macOS Mojave
  • USDZファイルへの変換ツールはXcode 10に同梱する

テスト用のUSDZファイル

以下のページから入手できます。

ファイルアプリでUSDZファイルを表示する

iOS標準のファイルアプリを使用すれば、USDZファイルを表示できます。

以下の2種類の方法で表示できます。

  • Object
    • 3Dオブジェクトを表示
  • AR
    • 3Dオブジェクトを現実世界に配置

自前のアプリでUSDZファイルを表示する

QLPreviewControllerの作成/表示処理を追加します。

import UIKit
import QuickLook

class ViewController: UIViewController {

    @IBAction func previewButtonDidTap(_ sender: Any) {
        let previewController = QLPreviewController()
        previewController.dataSource = self
        present(previewController, animated: true)
    }
}

そしてQLPreviewControllerDataSourceのメソッドを実装してファイル情報を提供します。

extension ViewController: QLPreviewControllerDataSource {

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return Bundle.main.url(forResource: "cupandsaucer",
                               withExtension: "usdz")! as QLPreviewItem
    }
}

QLPreviewControllerはiOS標準のファイルアプリと同様の画面を提供し、Object/ARの2種類の方法でファイルを表示できます。

さいごに

本記事では、USDZファイルをアプリ内で表示する実装を紹介しました。

簡単な実装だけで実現できるので気になった方は試してみてください!

参考資料