iOS8から導入された機能であり, 双方のアクションを行う上でとても便利なんですが, 開発者でもなんでもない僕は「1段より2段の方がたくさん配置できて便利だからだろうなぁ」くらいにしか思ってませんでした(違ったんですけど).
Extensionとは
実は, エクステンションと名のつく機能は複数あるようです.
その総称は "App Extension" と呼ばれており, 各々が特定の目的に特化し, 開発者は目的に応じて各Extension(拡張ポイントと呼ぶそうです)を選んでいるそうです.
実際使ってみてわかると思いますが, この機能によって場合によっては実際にアプリを起動することなく, そのアプリの機能を使ったり, データを渡したり, 編集・処理したりできるわけですね.
具体的にはあるWebページをTwitterでシェアするとき, そのページURLやタイトルなどをユーザーがコピーしてTwitterアプリへ貼り付けする…なんてことをExtensionがやってくれるわけです.
写真アプリからサードパーティ製アプリの機能を呼び出せることができるのもその一つです.
App Extensionはそれ自身はアプリではなく, システムの各々の特定領域に紐付けされ, それを実行できる拡張ポイントと呼ばれるシステム領域を持ち, 各々で利用目的や指針が決められています.
色んなExtension
App Extensionプログラミングガイド:App Extensionはアプリケーションの効用を拡大する他のアプリケーションに対して何らかの機能を追加する実行可能ファイルである、App Extensionの開発方法を解説。
Extension自体はアプリではなく, セキュリティなどの安全性のために独立して動作するそうです.
例えばアプリA, BにExtensionが絡んだ場合, アプリA, B双方が直接受け渡しをすることはしません.
プログラミングガイドによれば, 2016年11月14日時点で, iOSで利用できるExtensionは次の20個あるようです.
- Action
ホストアプリ(ユーザーがExtensionを選択するのに使用する側のアプリ)で表示されるコンテンツを操作または表示 - Audio Unit
ホストアプリに送信されるオーディーストリームを生成したり, 同じく修正してホストアプリに再送信したりする - Broadcast UI
- Broadcast Upload
- Call Directory
着信が来た場合, その発信者を電話番号で認識し, ブロックする - コンテンツブロッカー
開発するコンテンツブロッカーアプリのブロックルールが更新されたことをWebKitに通知する - カスタムキーボード
標準キーボード以外のカスタムキーボードをアプリケーションで使えるようにする - ドキュメントプロバイダ
ファイルのリポジトリ(データベース)にアクセスして管理する - iMessage
メッセージアプリとやり取りする - Intents
アプリとSiri統合に関連するタスク処理 - Intents UI
Intentsで行った処理の後, Siriやマップのインターフェイスをカスタマイズする - 通知コンテンツ
- 通知サービス
- Photo Editing
写真アプリで写真や動画を編集する - Share
情報投稿サイトに記事を投稿して他のユーザーを共有する - 共有リンク
- Spotlightインデックス
アプリが実行されていない間に, アプリに含まれているコンテンツをインデックスする
インデックスを行うことで各コンテンツを検索する上で最適化されているため処理が高速化されますが, 逆にインデックス自体の処理中は動作が重くなります(iOSアップデート直後に動作が重くなる原因の一つ?) - ステッカーパック
メッセージアプリで使えるステッカーの提供に関わるエクステンション - Today
通知センターの「今日」での表示内容の更新やタスクの実行
(このExtensionがいわゆる「widget(ウィジェット)」です) - VPN
自社独自のVPN(大雑把に言えばプライベートネットワークの規模が大きくなったようなものです, 3大キャリアのモバイルデータ通信も加入者のみが接続できるためある意味VPNですがここで言うVPNはもっと小さいものになります)サーバー用クライアントの開発, 或いは学校環境などの管理対象デバイス向けコンテンツフィルタ機能の開発に関わるExtension
MacOSのみであったりwatchOSのみのExtensionもあるため実際にはもう少しあります.
2段あるエクステンションは
さてこの共有アイコンをタップして表示される2段は一体何なんでしょうか?
結果的に言うと, 上段は Share Extension(前節の12), 下段はAction Extension(前節の1)になります.
因みにユーザーガイドによると上段は「共有オプション」, 下段は「アクションオプション」と言うそうです.
なので上段(共有オプション)は主に
Webサイトや編集した画像などを投稿して他のユーザーと共有する
のが目的のアプリが配置され, 下段は
ホストアプリで表示されたコンテンツ(対象にしたコンテンツや編集した画像・動画など)を他のアプリに表示したり渡す(保存する)
ことを目的としたExtensionが並んでいる…ということになります.
…となると例えば「リマインダー」や「メモに追加」, 「PDFをiBooksに保存」はどっちかというとShare ExtensionでなくAction Extensionなイメージがあるんですけどね…
〆
兎も角, この2つは別の明確な目的で分かれているということがわかりました.
Extensionに追加できるアプリで上段だったり下段だったりするのは機能が違うから…なわけですね.
メモに追加のように, どちらを使うべきかはユーザー目線で開発者が決めたケースもあり得るようなので, 必ずしもこのルールに従うとは限らないようです, 結果的にどのExtensionが適切であるかは実際に操作してみないとわからない…ってことでしょうかね?