[iOS 8] UIDocumentPickerViewController で iCloud ドキュメントを開く

UIDocumentPickerViewController

iOS 8 で UIDocumentPickerViewController というクラスが追加されました。UIDocumentPickerViewController は iCloud 上に保存されているドキュメントの一覧を表示し、選択できる画面を提供する View Controller です。分かりやすく例えると UIImagePickerViewController の iCloud ドキュメント版といったところでしょうか。

本稿では、この UIDocumentPickerViewController を使って iCloud ドキュメントを開く手順を解説します。

デバイスで iCloud Document を有効にする

UIDocumentPickerViewController を使うためには、iOS 8 を搭載しているデバイスの iCloud 設定で iCloud Drive が利用できるようにしなければいけません。まず設定を開き…

uidocumentpicker01

iCloud Drive がオフになっているので、ここをタップして…

uidocumentpicker02

「iCloud Drive にアップグレード」をタップします。

uidocumentpicker03

有効にしていない(または許可していない)場合、UIDocumentPickerViewController を呼び出しても iCloud ドキュメントを参照できません。以下のスクリーンショットは参照できない状態で呼び出した場合に表示される画面です。

uidocumentpicker04

プロジェクトの設定

iCloud ドキュメントを参照するには、まずプロジェクト設定の Capabilities の iCloud セクションの iCloud Documents を有効にする必要があります。

uidocumentpicker05-v2

設定を変更したあとは Provisioning Profile を再生成する必要があるので注意してください。

UIDocumentPickerViewController を表示する

それでは適当な ViewController から呼び出してみましょう。今回は iWork (Pages, Numbers, Keynote) で作成したドキュメントを開いてみたいと思います(事前にいずれかのデータを作成しておいてください)。

import UIKit

class SampleViewController : UIViewController, UIDocumentPickerDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // UIDocumentPickerViewControllerを開く
        let picker = UIDocumentPickerViewController(documentTypes: ["com.apple.iwork.pages.pages" as NSString], inMode: UIDocumentPickerMode.Open)
        picker.delegate = self
        presentViewController(picker, animated: true, completion: nil)
    }
    
    // MARK: UIDocumentPickerDelegate
    
    func documentPicker(controller: UIDocumentPickerViewController!, didPickDocumentAtURL url: NSURL!) {
        println(__FUNCTION__)
        println("opened url : \(url)")
    }
    
    func documentPickerWasCancelled(controller: UIDocumentPickerViewController!) {
        println(__FUNCTION__)
    }
    
}

iCloud ドキュメントを開くには init(documentTypes:inMode:) イニシャライザを使います。

documentTypes には開く対象のファイルタイプを配列で渡します。ファイルタイプの仕様は Uniform Type Identifier Concepts に記載されているので、こちらを参考にセットします。iWork のドキュメントですが、Pages ファイルは com.apple.iwork.pages.pages を、Numbers ファイルは com.apple.iwork.numbers.numbers、Keynote は com.apple.iwork.keynote.keynote をそれぞれ使います。

mode には iCloud ドキュメントを参照するモードを設定します。これはつまり iCloud ドキュメントを開く目的です。単純にファイルを開きたいのであれば UIDocumentPickerMode.Open を、アプリ内に取り込みたいのであれば UIDocumentPickerMode.Import を設定します。

実行すると次のようになります。

uidocumentpicker06

ファイルを選択すると documentPicker:didPickDocumentAtURL が呼ばれ、ファイルパスが取得できます。

uidocumentpicker07-v2

なお、iCloud ドキュメントにアクセスできるアプリは、iCloud Drive 設定から利用可否を制御できます。こちらがオフになっているとアプリから iCloud ドキュメントを参照することができなくなります。

uidocumentpicker08

まとめ

iWork のファイル以外にも、JPEG などの画像ファイルやテキストファイルなど、iCloud に保存してあるさまざまなファイルを開くことができます。サードパーティ製のアプリでも簡単に参照できるようになったということで、iCloud を利用する機会が増えそうですね。

参考