【swift】iOSシェア機能でファイルを受信する実装

概要

Gmail等に添付されているファイルをシェア機能と使って受取る実装です。

開発環境

  1. Mac OS 11.6.2
  2. Xcode 13.1

事前準備

  • Gmail等シェアできるアプリが必要です。

Info.plistの設定

  • TARGETのInfoから設定するとわかりやすいでしょう

直接設定しても反映されます。
f:id:develop-imonari:20220106142539p:plain

  • nameに適当な名前、Typesにファイルタイプを入れます。

ファイルタイプは受取りたいファイルの種別です。System-Declared Uniform Type Identifiersを参照してくださいIdentifier列の値を入れます。
developer.apple.com

  • 例:テキストファイルはpublic.text、画像ファイル(png)はpublic.png等、複数設定することも可能です。
  • またpublic.dataを設定することで全てのTypeを受けることが出来ます。

f:id:develop-imonari:20220106144920p:plain

  • 他のアプリからのシェア機能で現れました。

受信したファイルのURLの取得

  • iOS13からはSceneDelegateで受け取ります。
  • アプリが起動している時
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    // アプリが起動している場合はこのメソッドで受ける
    // URLContextsにはいているURLが受信したファイルのURL
    let content = urlContexts.first
    let url = content?.url
}
  • アプリが起動していない
var urlContexts: Set<UIOpenURLContext>?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // アプリが起動していない時は起動時にここでシェアするファイルのURL取得する。
    urlContexts = connectionOptions.urlContexts
    guard (scene as? UIWindowScene) != nil else {
        return
    }
}