iOS 8 ドキュメントピッカーの実装

iOS 8 ドキュメントピッカーの実装
iOS 8 ドキュメントピッカーの実装

iOS 8の新しいドキュメントピッカーとプロバイダー機能は、デバイスの可能性を広げる画期的な技術です。Dropbox、Panic、Readdleといった開発者が開発したドキュメントピッカーや拡張機能を統合した優れたアプリが既に数多く登場しています。私も最近、新しいUIDocumentPicker機能が必要になったので、実際に試してみて、実装に必要なものを調べてみました。基本的な実装は非常に簡単で、数行のコードで済むことが分かりました。もちろん、Appleによってドキュメントも充実しており、経験豊富な開発者であれば問題なくピッカーを実装できるでしょう。しかし、初心者にとっては、実装手順が分かりやすく説明されている方が分かりやすいので、以下に簡単なウォークスルーを用意しました。

はじめる

最初に行う必要があるのは、Xcode で iOS プロジェクトを開始し、以下に示すように iCloud と iCloud Documents 機能を有効にすることです。

ピッカーのモードをいくつか紹介するために、2つのボタン(インポートとエクスポート)を持つシンプルなUIを作成しました。View Controllerクラスに2つのメソッドを作成し、それぞれのボタンに接続しました。

(IBAction)openImportDocumentPicker:(id)sender
(IBAction)openExportDocumentPicker:(id)sender

UIDocumentPickerViewControllerまず、 modeを使ってインポート機能を実装しましょうUIDocumentPickerModeImport。インスタンスメソッドを呼び出してinitWithDocumentTypes:inMode:、ビューコントローラの機能を定義する mode を指定したUTIドキュメントタイプの配列を渡すだけです。

Uniform Type Identifiers (UTI) に馴染みのない方は、Apple が提供する便利なサイトをご覧ください。アプリケーションに必要なファイル形式を扱うための入門編として、一般的な UTI をまとめています。この例では、ユーザーが画像をインポートできるようにしたいため、画像形式用の UTI を 1 つだけ選択しました。

- (IBAction)openImportDocumentPicker:(id)sender {
 UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.image"]
 inMode:UIDocumentPickerModeImport];
 documentPicker.delegate = self;
 documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
 [self presentViewController:documentPicker animated:YES completion:nil];
}

が呼び出されるとpresentViewController:、ユーザーにはApple提供のUIが表示され、ドキュメントプロバイダからファイルを選択できるようになります。この時点で、ユーザーはデバイスにインストールされているすべての有効なサードパーティプロバイダにアクセスできます。

選択されたファイルを通知するには、ビューコントローラを にしてメソッド<UIDocumentPickerDelegate>を実装する必要があります- (void)documentPicker:didPickDocumentAtURL:。以下に示すように、受信した画像に応答してファイル名を抽出し、iOS 8の新しいAPIである を使って表示していますUIAlertController。また、このデリゲートメソッドはインポート時とエクスポート時にどちらでも呼び出されるため、メソッドコントローラを調べて、以下に示すように特定のモードプロパティに基づいて操作する必要があることにも注意してください。実際のアプリケーションでは、ここでアプリ固有のロジックを用いてファイルを処理します。

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
 if (controller.documentPickerMode == UIDocumentPickerModeImport) {
 NSString *alertMessage = [NSString stringWithFormat:@"Successfully imported %@", [url lastPathComponent]];
 dispatch_async(dispatch_get_main_queue(), ^{
 UIAlertController *alertController = [UIAlertController
 alertControllerWithTitle:@"Import"
 message:alertMessage
 preferredStyle:UIAlertControllerStyleAlert];
 [alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]];
 [self presentViewController:alertController animated:YES completion:nil];
 });
 }
}

インポート例:

iOS 8でアプリにファイルをインポートするには、これだけで十分です。本当に素晴らしいですね。では、ファイルをエクスポートするにはどうすればいいでしょうか? 実は、エクスポートはさらに簡単です。

必要なファイルを準備したら、モードでドキュメント ピッカーを初期化しUIDocumentPickerModeExportToService、ファイルの URL を渡します。

- (IBAction)openExportDocumentPicker:(id)sender {
 UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithURL:[[NSBundle mainBundle] URLForResource:@"image" withExtension:@"jpg"]
 inMode:UIDocumentPickerModeExportToService];
 documentPicker.delegate = self;
 documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
 [self presentViewController:documentPicker animated:YES completion:nil];
}

ユーザーにドキュメントピッカーが表示され、保存先を選択すると、ファイルが指定された場所にコピーされます。私のサンプルコードでは、バンドルに保存した画像をエクスポートしていますimage.png。下のスクリーンショットでは、iCloud DriveのPreview.appにエクスポートしたところ、Yosemiteのベータ版を実行しているMacにすぐに表示されました。ファイルが既に存在する場合は、ファイル名の変更を求めるメッセージが表示されます。

UIDocumentPickerの基本的な実装はこれですべてです。1時間もかからずにアプリに統合できます。プロジェクトはGitHubで公開しているので、ぜひチェックしてみてください。何か間違いがあれば教えてください。

このトピックに関連する他のリソースをお持ちの場合、またはこの例についてのフィードバックがある場合は、お気軽にご連絡ください。

クラブ・マックストーリーズ

追加コンテンツと特典にアクセスする

Club MacStories は 2015 年に設立され、ほぼ 10 年間にわたって毎週独占コンテンツを提供してきました。

毎週、毎月の電子メール ニュースレターから始まったものが、すべての MacStories ファン向けに設計されたメンバーシップ ファミリーに成長しました。

詳細については、こちらおよびクラブの FAQ をご覧ください。

Club MacStories : アプリ、ヒント、自動化ワークフロー、長​​文執筆、MacStories Unwind ポッドキャストへの早期アクセス、定期的な景品など、盛りだくさんの情報を満載した、電子メールと Web 経由の週刊および月刊ニュースレター。

Club MacStories+ : Club MacStories が提供するすべての機能に加え、アクティブな Discord コミュニティ、クラブの過去のカタログ全体を閲覧するための高度な検索機能とカスタム RSS 機能、ボーナス コラム、多数のアプリ割引などが含まれます。

Club Premier : 上記のすべてに加え、早期に、広告なしで、高ビットレートのオーディオで配信される当社の主力ポッドキャストの拡張バージョンである AppStories+ が含まれます。