UITextViewのコンテキストメニューのカスタマイズはできたものの、WKWebViewではできなかったというところで終わってました。何とかならないかなぁと思っていたのです。
あ、App Extensionで「共有」に追加でき、、、?
それや!
App ExtensionはiOS8で追加された機能ですが、使ったことがなかったので思いつかなかったです。
ここではApp Extensionについてのざっくりとした話題だけですので、詳細についてはAppleの「App Extensionプログラミングガイド」を参照してください。
--
登場人物は3人です。
- ホストアプリケーション(Host app)
- App Extension
- 収容アプリケーション(Containing app)
1.のホストアプリケーション(Host app)は、例えばSafariやメモappなど、App Extensionを呼び出す側のアプリです。
3.の収容アプリケーション(Containing app)は、App Extensionを備えたアプリで、いわゆる「アプリ」です。
App Extensionは、収容アプリケーションのプロジェクトに含まれていますが、収容アプリケーションとは独立して動きます。
ホストアプリケーションは、収容アプリケーションを呼び出すのではなく、App Extensionを呼び出してやりとりするだけで、収容アプリケーションが起動されるわけではないというところが肝でしょうか。
--
さっそく、テストアプリを作ってみます。
ホストアプリケーションはとりあえず、Safariを使います。
収容アプリケーションは、AwesomeAppというアプリにしてみます。
いつもどおり、普通にAwesomeAppというプロジェクトを作成したら、App Extensionを新しいターゲットとして追加します。シンプルにShare Extensionにします。
File > New > Target で、Share Extensionを選択します。
ターゲットとして追加 |
Share Extensionを選択 |
ターゲット名は自由に決められますが、「収容アプリケーション+機能」がわかりやすいと思いますので、AwesomeAppShareにしました。
AwesomeAppShareのテストのスキームを作成するか否かのダイアログが表示されるので、'Activate'を選択します。
Activateを選択 |
ターゲットが追加されました |
このApp Extensionのターゲットの中には、3つのファイルが生成されています。
- ViewController
- Storyboard
- info.plist
--
ひとつ、はまりどころとしては、Deployment Targetがあります。
App Extensionと収容アプリケーションのDeployment Targetが同じになっているか確認するのを忘れないでください。
ターゲットの追加時には、デフォルトのDeployment Targetになります。既存のアプリにターゲットを追加するときには、同じにならないことがありますので、要確認です(テストで、はまりましたよ)。
--
たったこれだけですが、とりあえず動きます。
スキームを「(E)AwesomeAppShare」に設定して、実行します。
(E)AwesomeAppShareに変更 |
ホストアプリケーションが選択できるので、Safariを選んでRunを押します。
Safari(ホストアプリケーション)が起動するので、適当な文言を選択してから、Shareを選択します。
Shareを選択 |
AwesomeAppShareのアイコンがあるので、タップ。
※ここではアイコンがデフォルトのものになっていますが、収容アプリケーションにアイコンが設定されていれば、そのアイコンが自動的に表示されます。
Share Extensionが起動します。
選択した文言が取得できています |
コーディングなしで、ここまでできました。ただ、ここで動いているのはあくまでShare Extension(AwesomeAppShare)です。収容アプリケーション(AwesomeApp)は、全く動いてません。念のため。
今回はここまで。
「使ってみた(App Extension編) その2」に続きます。
♪♪♪
こちらもどうぞ。
使ってみた(App Extension編) その2
使ってみた(App Extension編) その3
使ってみた(App Extension編) その4
使ってみた(App Extension編) その5
使ってみた(App Extension編) おまけ