[iOS 8] App Extensionでテンション倍増! – Share Extension編

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

アプリ内からコンテンツの受け渡しができる

iOS 7までは、あるアプリからデータを他のアプリに受け渡すには、iCloud などの外部サーバや、URL Scheme 等を使う必要がありました。一度自分のアプリから離れてしまうと、データの受け渡しについて不自由さがあったのが実情でした。

この度 iOS 8 においては、データ受け渡しの仕組みにおいて、大幅に自由度が高まりました。

様々なデータを受け渡すことができる

Xcode 6上で File > New > Target > Share Extension と選択していくと、プロジェクトに Share Extension を実現するためのコードが追加されます。 新しく追加された info.plist を見てみましょう。
NSExtensionActivationRule の中に、extension に関する設定を書き込むことができます
例えば、以下の様な形になります。

    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>NSExtensionActivationRule</key>
            <dict>
                <key>NSExtensionActivationSupportsImageWithMaxCount</key>
                <integer>5</integer>
                <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
                <integer>1</integer>
                <key>NSExtensionActivationSupportsText</key>
                <false/>
                <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
                <integer>5</integer>
            </dict>
            <key>NSExtensionPointName</key>
            <string>com.apple.share-services</string>
            <key>NSExtensionPointVersion</key>
            <string>1.0</string>
        </dict>

共有できるデータの種類を設定できます。
画像、動画、テキスト、URLなどを受け渡しできます。

また、WithMaxCountで終わる Key は、いくつまで共有できるかを指定できるようになっています。
例えば extension で10枚の画像を共有したい場合は、以下のような記述が必要になります。

<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>10</integer>

Share extension を実際に使用する

ここでは、Safari 上で Share extension を実際に呼び出している様子の一例を見てみます。

Safari1
Safari画面下部中央の共有のためのボタンをタップします。

Safari2
新しく表示されたメニューの中に、extension である「share」が表示されていることが確認できます。

Safari3
タップすると、投稿画面が表示されます。

多くの可能性を秘めている

さて、この Share Extension はどんな使い道があるでしょう。
例えば、Microsoft社 の OneNote アプリで Share extension を効果的に活用しているようです。
ブラウザ上で OneNoteの Share extension を呼び出すことで、ウェブページの内容を切り抜いて OneNote 上のノートとして活用することを実現しているようです。

OneNote for iOS 8 – Share Extension - YouTube

他にも、データ共有の仕組みを使った、様々な用途が考えられます。
非常に多くの可能性を秘めていると感じます。