iOSアプリ間でのデータ連携まとめ

| Method                          | Available | Description                                                                                                                                                                                                                                              | Send                                                                                                                                                                                                                                                 | Receive                                                                                                                                                                                                         |
|---------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| OpenURL                         | iOS 3.0   | 特定のURLスキーム(mail:等)を指定して、該当するアプリケーションを開く。受け渡しできるのはURL文字列のみ。                                                                                                                                                  | 開きたいアプリの独自URLを指定してOpenURLを使用して開く。                                                                                                                                                                                             | 自分が対応できるURLスキームを定義しておく。被った場合の動きは公式では未定義。(現状では後勝ちらしい)                                                                                                             |
| UIDocumentInteractionController | iOS 3.2   | 指定したファイルタイプに対応しているアプリを選択して開くことが出来る。単一のファイルのみ指定できる。いわゆるOpenInはこれを指す。                                                                                                                         | ファイル及びタイプを指定して、UIDocumentInteractionController を呼び出す。カスタマイズは行えない。                                                                                                                                                   | 自分が対応できるファイルタイプを定義しておく。単一のファイルパスを受け取って、その後アプリ内で自由に扱える。                                                                                                    |
| UIActivityViewController        | iOS 6.0   | 定義済みのアクションをファイルタイプに応じて表示する。複数のファイルを扱え、独自のアクションも追加できるがOpenInの用に自動で別アプリを探してはくれず、結局システム定義済み以外のアプリを開く場合にはOpenURLを内部的に呼び出すことになる。                | ファイル及びタイプを指定して(複数可能)、UIActivityViewController を呼び出す。カスタマイズして独自のActivityも追加できる。独自アプリで開くには結局OpenURLを使うことになる。                                                                           | App Extensions 以前は出来る事がなかった。OpenURLと同等になる。                                                                                                                                                   |
| App Extensions                  | iOS 8.0   | ここではActionExtensionとShareExtensionについてのみ述べる。UIActivityViewControllerに独自の機能を提供することが出来る。ただし、別アプリを開くのではなく、機能の一部を提供する形になる。例えば、ファイルの保存のみや、SNSへの投稿のみ、など。             | 上記と同様に UIActivityViewController を呼び出すのみ。                                                                                                                                                                                               | Action または Share の AppExtensionをアプリ内に作る。Extension には制約が多いが、複数のファイルを受け取って何らかの処理を行うことが出来る。ただしアプリ本体が開くわけではなく、すぐに呼び出し元のアプリに戻る。 |
| Keychain Services               | iOS 2.0   | パスワードや証明書、暗号鍵などの情報を、開発元が同じアプリ間で共有することが出来る。アプリを削除した後もデータを保持する。                                                                                                                               | 割愛                                                                                                                                                                                                                                                 | 割愛                                                                                                                                                                                                            |
| App Groups                      | iOS 7.0   | 文字列情報やファイルを開発元が同じアプリ間で共有することが出来る。共有を行う両アプリ間で、キーとなる文字列等をあらかじめ知っておく必要がある。また、個別にキーを指定してひとつずつ情報を取り出すので、大量のファイルを共有すると、処理は煩雑になりがち。 | DevCenterでAppGroupを定義し、Capabilitiesで使用を明示する必要がある。NSUserDefaults の initWithSuiteName:@“groupname" や NSFileManager の containerURLForSecurityApplicationGroupIdentifier を使用してAppGroup領域に文字列やファイルを読み書きする。 | Sendに同じ。                                                                                                                                                                                                    |
| UIPasteboard                    | iOS 3.0   | いわゆるクリップボード。文字列だけでなく画像などもコピペ出来る。以下の3種類のペーストボードがある。①iOS全体で共通 ②名前を指定して、その名前を知っているアプリからのみ使える(共有するには開発元が同じである必要がある) ③アプリ内限定                       | UIPasteboard  ①generalPasteboard ②pasteboardWithName ③pasteboardWithUniqueName がDescriptionの番号に対応する。上記でボードを取得し、読み書きを行うことが出来る。値やデータの設定・取得時にタイプの指定が必要。                                           | Sendに同じ。                                                                                                                                                                                                    |