もう一人のY君

読者です 読者をやめる 読者になる 読者になる

もう一人のY君

iPhoneアプリのレビューやアップデートレビューなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU

【iOS】エクステンションが2段あるのはなぜか

エクステンション

 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個あるようです.

 

  1.  Action
     ホストアプリ(ユーザーがExtensionを選択するのに使用する側のアプリ)で表示されるコンテンツを操作または表示
  2. Audio Unit
     ホストアプリに送信されるオーディーストリームを生成したり, 同じく修正してホストアプリに再送信したりする
  3. Broadcast UI
  4. Broadcast Upload
  5. Call Directory
     着信が来た場合, その発信者を電話番号で認識し, ブロックする
  6. コンテンツブロッカー
     開発するコンテンツブロッカーアプリのブロックルールが更新されたことをWebKitに通知する
  7. カスタムキーボード
     標準キーボード以外のカスタムキーボードをアプリケーションで使えるようにする
  8. ドキュメントプロバイダ
     ファイルのリポジトリ(データベース)にアクセスして管理する
  9. iMessage
     メッセージアプリとやり取りする
  10. Intents
     アプリとSiri統合に関連するタスク処理
  11. Intents UI
     Intentsで行った処理の後, Siriやマップのインターフェイスをカスタマイズする
  12. 通知コンテンツ
  13. 通知サービス
  14. Photo Editing
     写真アプリで写真や動画を編集する
  15. Share
     情報投稿サイトに記事を投稿して他のユーザーを共有する
  16. 共有リンク
  17. Spotlightインデックス
     アプリが実行されていない間に, アプリに含まれているコンテンツをインデックスする
     インデックスを行うことで各コンテンツを検索する上で最適化されているため処理が高速化されますが, 逆にインデックス自体の処理中は動作が重くなります(iOSアップデート直後に動作が重くなる原因の一つ?)
  18. ステッカーパック
     メッセージアプリで使えるステッカーの提供に関わるエクステンション
  19. Today
     通知センターの「今日」での表示内容の更新やタスクの実行
     (このExtensionがいわゆる「widget(ウィジェット)」です)
  20. VPN
     自社独自のVPN(大雑把に言えばプライベートネットワークの規模が大きくなったようなものです, 3大キャリアのモバイルデータ通信も加入者のみが接続できるためある意味VPNですがここで言うVPNはもっと小さいものになります)サーバー用クライアントの開発, 或いは学校環境などの管理対象デバイス向けコンテンツフィルタ機能の開発に関わるExtension

 

 MacOSのみであったりwatchOSのみのExtensionもあるため実際にはもう少しあります.

 

 

2段あるエクステンションは

 さてこの共有アイコンをタップして表示される2段は一体何なんでしょうか?

 

 結果的に言うと, 上段は Share Extension(前節の12), 下段はAction Extension(前節の1)になります.

 

 


photos by help.apple.com

 因みにユーザーガイドによると上段は「共有オプション」, 下段は「アクションオプション」と言うそうです.

 

 なので上段(共有オプション)は主に

 

Webサイトや編集した画像などを投稿して他のユーザーと共有する

 

のが目的のアプリが配置され, 下段は

 

ホストアプリで表示されたコンテンツ(対象にしたコンテンツや編集した画像・動画など)を他のアプリに表示したり渡す(保存する)

 

ことを目的としたExtensionが並んでいる…ということになります.

 

 

 …となると例えば「リマインダー」や「メモに追加」, 「PDFをiBooksに保存」はどっちかというとShare ExtensionでなくAction Extensionなイメージがあるんですけどね…

 

 

 兎も角, この2つは別の明確な目的で分かれているということがわかりました.

 Extensionに追加できるアプリで上段だったり下段だったりするのは機能が違うから…なわけですね.

 

 メモに追加のように, どちらを使うべきかはユーザー目線で開発者が決めたケースもあり得るようなので, 必ずしもこのルールに従うとは限らないようです, 結果的にどのExtensionが適切であるかは実際に操作してみないとわからない…ってことでしょうかね?