【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

この記事からわかること

  • Swift共有メニュー表示させる方法
  • Share Extension使い方
  • 送信するデータ制限設定する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

共有メニューにアプリを表示させる方法

Swiftで開発できるiOSアプリではSafariなどから共有する際に自身のiOSアプリを表示させることが可能です。これにより例えばSafariで表示しているWebサイトの情報をアプリへ送ることができます。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

逆にiOSアプリからデータを他のアプリなどに共有することもできるのでこちらの実装方法は以下の記事を参考にしてください。

SwiftUIでSNSへのシェアボタンをクリックした時の画面

Share Extensionとは?

iOSアプリを共有メニューに表示させてデータを送るにはApp Extensionで提供されている機能の1つであるShare Extensionを使用します。

公式リファレンス:App Extension

App Extensionとはその名の通りアプリの機能を拡張するための機能のことです。アプリの領域を超えて、ユーザーが他のアプリやシステムと利用しているときにカスタム機能やコンテンツを利用できるようになります。具体的にはWebブラウザからSNSサービスへ投稿できるようにしたり、ホーム画面などに設置できるWidget機能、Apple Watchとの連携などが実装できるようになります。

数あるApp Extensionのなかで「WebブラウザからSNSサービスへ投稿」機能を実装するために使用するのがShare Extensionになります。実際に開発する際にはShare Extension用のターゲットをプロジェクトに新規で追加し、SLComposeServiceViewControllerを継承したViewControllerクラスでデータを受け取ります。

実装方法

ここからは実際にShare Extensionをプロジェクトに導入してみたいと思います。

1.Targetの追加

まずはXcode上部メニュー「File」>「New」>「Target..」から「Share Extension」を探して「Next」をクリックします。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

プロダクト名を決めて「Finish」をクリックすると「プロジェクト名のスキームを有効にしますか?」と問われるので「Activate 」しておきます。

ターゲットが追加され、SLComposeServiceViewControllerを継承したShareViewControllerクラスファイルなどが生成されます。

2.App GroupsとKeychain Sharingの設定

続いて異なるターゲット間でデータを共有するためにApp GroupsとKeychain Sharingを設定していきます。iOSアプリ側のターゲットと追加したターゲットの両方にCapabilitiesからそれぞれを追加してください。追加できたらこのプロジェクト共有のApp Groupsを作成して、両者ともチェックを入れておいてください。グループ名はgroup. + Bundle Identifier形式にすればOKです。

おすすめ記事:【Swift UI】App GroupsでWidgetやアプリ間でデータを共有する方法!

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方 【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

3.ビルドして確認

これでひとまず共有メニューに表示してデータを送信するための基盤が出来上がりました。ビルドターゲットを新規作成したShareExtensionに変更してビルドを実行してみます。起動させるアプリを選択できるので「Safari」を選択して「Run」をクリックします。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

シミュレーターが起動してSafariが立ち上がるので共有マークをクリックすると該当のアプリが以下のように表示されます。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

ここでアプリをクリックすると以下のようにWebページのタイトルと「投稿」ボタンが表示され、ボタンをクリックするとアプリにデータが送信される仕組みです。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

4.送信できるデータを制限する

送信できるデータはInfo.plistにキーを追加することで制限をかけることができます。Share Extension側の「Info.plist」の中身を見てみると以下のようになっています。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

このNSExtensionNSExtensionAttributesのなかでルールを指定していきます。デフォルトではNSExtensionActivationRuleTRUEPREDICATEが渡されているので全てのデータを許可している状態になります。

ルールを追加するにはNSExtensionActivationRuleのTypeをDictionaryに変更して中にルールを追加します。

Key 説明
NSExtensionActivationSupportsAttachmentsWithMaxCount 添付ファイルの最大数
NSExtensionActivationSupportsAttachmentsWithMinCount 添付ファイルの最小数
NSExtensionActivationSupportsFileWithMaxCount ファイル全般の個数
NSExtensionActivationSupportsImageWithMaxCount 画像の最大数
NSExtensionActivationSupportsMovieWithMaxCount 動画の最大数
NSExtensionActivationSupportsText テキストを許可するか
NSExtensionActivationSupportsWebURLWithMaxCount URLの最大数
NSExtensionActivationSupportsWebPageWithMaxCount Webページの最大数

例えば「テキストを許可して画像1枚だけ」の場合は以下のようになります。

【Swift】共有メニューにアプリを表示させる方法!Share Extensionの使い方

次回は送信されたデータをアプリ内から操作する方法をまとめていきます。

参考文献

Share Extensionでデータを共有する

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index