ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ファイル管理とクイックルックの新機能
iOS Appで、外部デバイスに保存されているファイルにUSBおよびSMB経由でアクセスできるようになりました。このセッションでは、物理メディアまたはネットワークストレージ上のファイルの読み取り、書き込み、管理ができるドキュメントベースAppを作成するためのベストプラクティスを紹介します。iOSおよびmacOSでファイルのサムネイルにアクセスして表示するための、クイックルックのエンハンスメントについてご確認ください。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
当セッションへようこそ 最高の新APIをたくさん紹介します
このセッションで説明するのは― アプリケーションでの ドキュメントピッカーを使ったアクセス
USBドライブやSMB Serverに 保存したファイルのサポート リッチなサムネールを フェッチして表示する方法
Quick Lookで画像などの編集を サポートする方法です
Quick Look Extension APIが クロスプラットフォームになり iOS AppのmacOSへの移植が 簡単になりました
最後は Macでの iPadアプリケーションのサポートです
このセッションの対象者は― ファイル操作などのアプリケーションを 作った方や 新たに作る方です ファイルのサポートの ベストプラクティスが学べます ドキュメントへの再帰的なアクセスや バッチファイル操作が必要な方
サムネールの表示を学びたい方や 画像編集を提供したい方にも最適です
2018年の“Managing Documents in Your iOS Apps”もご覧ください UIDocumentBrowserViewControllerと UIDocumentPickerViewControllerの 使い方を説明しています “Quick Look Previews from the Ground Up”もお勧めします iOSとmacOSでの ファイルプレビューがよく分かります
ディレクトリ全体と コンテンツへのアクセスが iOS 13では可能になりました アプリケーションにはコンテンツへの アクセス機能が必要かもしれません 複数の画像に同じ変更を加える場合に 画像エディタは― 元の画像の隣に 変更した画像を保存します
以前はアプリケーションコンテナの 外のファイルに UIDocumentPickerViewControllerで アクセスし ファイルを1つ選びました iOS 13では フォルダを選べるようになりました 検証後 アプリケーションは ディレクトリへのアクセス許可を得ます ドキュメントピッカーに表示する デフォルトディレクトリも設定可能です
UIDocumentPickerViewControllerの 設定の仕方を例に見てみましょう フォルダ選択には― kUTTypeFolderタイプのアレイを 初期化したインスタンスを作ります
インスタンスの デフォルトディレクトリには “directoryURL”の プロパティを設定します
次はフォルダのコンテンツを 列挙する方法ですが FileManager APIを使えば ファイルも書けます URL startとstopAccessingSecurity ScopedResourceのコールと NSFileCoordinator APIを ここでは使います
iOS 13では ユーザは フォルダへのアクセスを管理しています アクセスは“ファイルとフォルダ”の “プライバシー”で無効にできます ユーザはアクセスを無効にできるので ドキュメントを開く時などには コードでのエラー処理が必要です
これはアプリケーション起動時の フォルダへのアクセス維持の方法です resolvingBookmarkDataの オプション呼び出しのURLを使い ブックマークデータを保存し URLを再現しています
新たに外付けUSBドライブ サムドライブ SMB Serverがサポートされます
APFS HFS+ FAT ExFATで フォーマットしたドライブが対象です
ドライブはiPad Proの USB-Cコネクタなどで接続できます
UIDocumentPickerViewControllerか 文書ブラウザで ファイルAppのサイドバーなどに 列挙されます
サイドバーのメニューや キーボードショートカットを使い ユーザは SMB Serverに接続できます
この2つのビューコントローラのAPIの クライアントは同じサポートを 無料で受けられます ただしiOS 13 SDK以降で 作ったアプリケーションで USBとSMBを サポートしているものに限ります
ファイルアクセスは 1つのボリュームではなくなりました 外部ボリュームに 保存可能になったためです USBドライブの接続が切れた場合などに ボリュームは消えます ディスクへのアクセスは 予想よりも遅くなります ネットワークの状態や USBデバイスの速度によりますが あなたが想定する操作は 数秒から数分かかります また ファイルシステムが いつもAPFSかHFS+とは限りません どんな影響があるでしょうか?
ファイルを別の場所に 移す必要がある場合は APIのFileManager.moveItemを使います これがボリューム間でファイルを 動かしてくれます 以前は移動や クローンなどの操作は迅速でしたが ボリューム間での移動は スローなコピーと削除になります
NSTemporaryDirectoryで ファイルを保存するなら コードを更新し 一時フォルダの場所を選びます ファイルの最終的な行き先を元にです 次のFileManagerのコールで 行うことができます
FileManagerのURLに入力するのは “.itemReplacementDirectory” “.userDomainMask” “url”です これでテンポラリディレクトリを 得られます
開いているファイルは 消えないとされていましたが USBドライブなどの接続は 遮断できるため 今は違います コンテンツの読み書きに 失敗する原因です エラーの確認と処理は不可欠です アプリケーションが ファイル書き込みに失敗したら UIDocumentPickerViewControllerで 別の保存先を選ばせます
USBドライブなどにあるファイルの 読み書きは遅いので ファイル操作中のアプリケーションの ハング回避は必須です バックグラウンドキューで ファイルシステム操作を常時行います アクティビティインジケータのような UIを追加して 進行中の処理をユーザに知らせます 操作のキャンセルの仕方を ユーザに提示してもよいでしょう アプリケーションが無反応だと 誤解させないためです
USBドライブなどに ドキュメントを保存する場合は メディアファイルシステムではなく LIFSがレポートされます 基本的なファイルシステムの 心配は無用ですが ファイルシステムの能力と サポートされる操作を確認してください LIFSはファイルシステム抽象化です LIFSの詳細は“What's New in File Systems”をどうぞ
UIDocumentBrowserViewControllerの カスタムサポートが追加されました 見てみましょう
shouldShowFileExtensionをTrueにし File Extensionを表示させます
Create Documentボタンをカスタムし アイコンの縦横比を調整可能です defaultDocumentAspectRatioの プロパティを設定するのです Textというボタンを変更するには localizedCreateDocumentActionTitleの プロパティを設定します
次はリンがQuick Lookの 新機能をお話しします
このセッションの対象者は アプリケーションの見た目を サムネール表示で向上させたい方です
こうした状態ではなく― こういう見た目にできます
Quick Look Thumbnailingは サムネール画像の 検索用のクロスプラットフォーム フレームワークです macOS上のQLThumbnailのC APIと NSURLThumbnailDictionaryKeyを リプレースします
iOSとmacOSはファイルの各形式を ビルトインサポートします 画像やPDF テキストファイルや 動画などです Thumbnail Extensionで 独自のファイル形式もサポートされます
Quick Look Thumbnailingは non-UIフレームワークです UIKitもAppKitもインポートせずに サムネールのCGImageを取得できます UIKitやAppKitをリンクさせれば iOSのUIImageや macOSのNSImageを取得可能です
非同期なのでサムネールの検索中に ブロックしません サムネールが不要になった場合の キャンセルをサポートします
全体像を見てみましょう サムネールを得るには QLThumbnailGenerator.Requestを作成し QLThumbnailGeneratorに渡します サムネールの新しい表示が 利用可能になった時や 最高の表示が完成した時の 通知を指定しておきます
品質などの異なる様々な表示を 要求することもできます
“icon”はファイル形式に 関連のある一般的な画像です 一定の形式のファイル全部に 同じことが言えます
“lowQualityThumbnail”は完成が 早くても サイズは正確ではありません キャッシュされたバージョンや ファイルに埋め込まれたサムネールです
“thumbnail”は高品質のサムネールで 要求に合致しています 作成には最も時間がかかります
“all”を指定すれば どの形式でも取得できます
QLThumbnailの作成を要求する場合は サイズやスケール 表示の形式を指定します 高品質のサムネールが必要な場合や アイコンや低品質のもので よい場合もあります 有用な表示の形式を 全部指定するのが一番です サムネールによっては 使えない形式もあるからです
QLThumbnailRepresentationに移ります “icon”“lowQualityThumbnail” “thumbnail”と形式を指定しました 画像にはCGImageとしても アクセスできます iOSのUIKitや macOSのAppKitに リンクした場合は UIImageやNSImageを入手可能です
QLThumbnailRepresentationを得るには QLThumbnailGeneratorに リクエストを渡します 最高品質のサムネールを得るには generateBestRepresentationを使い 最高バージョンのリクエストで 完了ハンドラをコールします
差分更新を取得したい場合は updateHandlerを提供して 各表示を作成します updateHandlerは各表示が 利用可能になるとコールされます UIなどを素早く更新できるので 良い品質のものが到着するたびに サムネールは向上します
以上がサムネール検索でした 次はQuick Lookでの 画像などの編集方法です
Quick LookはAPIで 各種ドキュメントをプレビューします 更にExtensionによって カスタムプレビューも可能
QLPreviewControllerで 画像やPDF 動画の 迅速な編集をサポートします
QLPreviewControllerは ファイルのプレビューに使います QLPreviewControllerの インスタンスを割り当て データソースを設定し 提示の前にデリゲートします Quick LookとQLPreviewControllerの 詳細は 2018年のWWDCの セッションをご覧ください “Quick Look Previews from the Ground Up”です
QLPreviewControllerは マークアップへのアクセスを提供します この編集ツールは ドキュメントなどのプレビューや メール添付の編集時に利用可能です
画像とPDFに利用できます
更に動画のトリミングや 回転をサポートします この機能を使うには 編集モードを有効にします
任意のデリゲートメソッド編集モードを 実行すればいいのです デフォルトでは編集は無効ですが 項目ごとに有効にできます 編集能力の有無や 作成したファイルの処理の仕方を このデリゲートメソッドで指定できます
ユーザが編集したものを QLPreviewControllerで上書きするには プレビューの編集モードから updateContentsを戻します
保存した編集に戻りたければ 任意の“didUpdateContentsOf previewItem”メソッドを実行します
プレビュー中のファイルの編集コピーを QLPreviewControllerで作り 自分で管理もできます それにはプレビューの 編集モードからcreateCopyを戻し プレビューの編集コピーを保存した デリゲートメソッドを実行します
次はmacOSの Quick Look Extension APIです
ファイルのサムネールと プレビューの説明に続き― 独自のファイル形式のサムネールと プレビューを提供する方法です
iOSではQuick Look Thumbnailと Preview ExtensionをAppで実行し ドキュメントのサムネールと プレビューのサポートを提供しています 同じQuick Look Extension APIが macOSで利用可能です
サムネールはmacOSとiOSで使えるので ユーザは迅速にファイルを確認できます これはFinderでの サムネールの使用例です macOSは共有のファイル形式の サムネールを作成できます Thumbnail Extensionを実行して 独自のサムネールも提供できるので Finderやサムネールが見られる場所で リッチな表示が可能です
古いCFプラグインのジェネレータ システムはリプレースされます Quick Lookジェネレータがあるなら 移行を考えてください
ここで言っているのは 一般的なQuick Look Extensionです これは以前 iOSのQuick Look フレームワークで発表されました UIKitが不要で Extensionが簡潔であれば インポートを考えては?
Thumbnail Extensionの作成には ターゲットをXcodeプロジェクトに追加
Extensionターゲットを設定したら QLThumbnailProviderサブクラスの 実行を開始できます CGかAppKitのコンテキストで サムネールを描けますし 画像へのファイルURLも提供できます
これはリクエストハンドラメソッドの provideThumbnailの上書きの一例です 2017年のWWDCでQuick Look APIの この部分を説明しています “Building Great Document-based Apps in iOS 11”です ぜひご覧ください QLFileThumbnailRequestを 取得します これにはファイルのURLと サムネールの最大と最小のサイズと スケールがあります これらを使って 指定に合うサムネールを作ります
リクエストごとに APIはあなたが QLThumbnailReplyを作るのを待ち それを使ってサムネールを作ります 完了ハンドラに QLThumbnailReplyを渡します
macOSのThumbnail Extensionの デバッグにはQLManageを使えます Quick Lookジェネレータを 書いた人なら ご存じでしょう XcodeでExtensionターゲットを作って 実行し Extensionを登録します QLManageでサムネールを作り そのExtensionに追加します
次はPreview Extensionです macOSのQuick Lookは Preview Extensionを実行することで 独自のファイル形式の プレビューを可能にしました
Quick Look Preview Extensionの サポートについては 2017年の― “What's New in Core Spotlight for iOS and macOS”をご覧ください 今年はファイルプレビューの サポートを追加しました ExtensionでViewを提供し プレビューを表示できます これは以前の Quick Lookジェネレータとは異なります 新しいExtension APIのおかげで プレビューの見た目を制御できます 古いQuick Lookジェネレータは 今後のリリースでは廃止されます
Preview Extensionを作るには プロジェクトにターゲットを追加します
APIはiOS Preview Extensionと同じです 2018年の“Quick Look Previews from the Ground Up”をご覧ください 簡潔に説明すると― QLSupportedContentTypeの サポート済みのUTIのリストの宣言です これはプレビューするファイルの UTIとの合致が必要です ペアレントUTIでのマッチングは サポートされていません テンプレートが ビューコントローラを提供します
こちらがビューコントローラ テンプレートの一例です URLでpreparePreviewOfFileを実行し ビューコントローラを準備した後 完了ハンドラをコールします QLPreviewViewはコールまで スピナーを表示します 迅速にプレビューを準備してください
どんなQLPreviewViewにも プレビューは表示できます プレビューパネルや カラム表示のサイドバー Spotlightや QLPreviewViewのクライアントなどです
デバッグにはXcodeで Extensionターゲットを立ち上げます
XcodeはQuick Look シミュレータを立ち上げます これはCore Spotlight Previewの デバッグのためで サポートもあります ファイルプレビューのデバッグには Finderかqlmanageでプレビューします Preview ExtensionをXcodeで 立ち上げると Xcodeが付与されます
次はMacのiPadアプリケーションの サポートです ドキュメントハンドリングAPIはMacの iPadアプリケーションでサポートされ ドキュメントベースの iOS AppをmacOSで使えます
UIDocumentPickerViewControllerを iOSの時と同じように使えば ユーザはmacOSの独特の感覚を 経験するでしょう .importと.openのモードで NSOpenPanelを表示します .exportToServiceと.moveToServiceの モードは NSSavePanelを表示します
同じように UIDocumentBrowserViewControllerでは macOSのドキュメントベースのAppに 特有の感覚を感じるでしょう ユーザは別のウィンドウで NSOpenPanelを得ます 実行時間のささいな違いはあります iOSとmacOSのインターフェイスの 違いのせいです UIDocumentBrowserViewController ナビゲーションバーがよい例ですが macOSには存在しません これらのケースで行うことの 詳細を確認してください 新しいAPIを使えるケースもあります メニューバーAPIなどで UIの違いを処理します
Quick LookはMacの iPadアプリケーションでも利用可能です QLPreviewControllerで macOSでのQLPreviewPanelを立ち上げ 更なるMacのエクスペリエンスを 提供します QLPreviewPanelは別のウィンドウなので ビューコントローラのコンテンツは 見えますが 非インタラクティブです
MacでiPadアプリケーションを テストし確認してください
MacのiPadアプリケーションの QLPreviewControllerは制約があります QLPreviewControllerのViewの 埋め込みサポートは万全ではなく Live Previewの代わりに サムネールを表示します
さて 今日学んだのは― アプリケーションで iOS 13の新機能を使う方法 ディレクトリの ファイルへのアクセスや USBドライブやSMB Serverの サポートなどです Quick Lookを使って リッチなサムネールを表示することや 画像などの Quick Look編集のサポート MacのModern Extension APIでの プレビューとサムネールの提供です ありがとうございました
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。