ShareExtensionの入力テキストとファイル名

以前ShareExtensionで画像を保存するサンプルを作ったのですが、保存する際の名前の取り方と、コメントの取得方法を別途調べたのでまとめておきます。

コメントの取得

Share Extensionではファイルを送信する際にコメントを入力することができます。contentTextというプロパティが値を保持しています。

self.contentText

アプリ側でコメントを使う際はUserDefaultsなどに保存する必要があります。

isContentValid()メソッドで入力コメントの判定を行うことができます。から文字の判定やSNSなどであれば不適切な単語を含んでいる場合弾くみたいなことができると思います。

以下の様にから文字を弾くとpostボタンが押せなくなります。

    override func isContentValid() -> Bool {
        if self.contentText.isEmpty {
            return false
        }
        return true
    }

placeholderにテキストを入れておくと入力フォームが空の時に文字を表示させることができます。

placeholder = "テキストを入力してください"

ファイル名の取得

ファイル名の取得はURLをsplitして取得を行います。

メソッドが用意されていると思ったのですが、公式ドキュメントをみてもそれらしいものを見つけることができませんでした。

    override func didSelectPost() {
        let extensionItem: NSExtensionItem = extensionContext?.inputItems.first as! NSExtensionItem
        let itemProvider: NSItemProvider = extensionItem.attachments!.first!
        
        let suiteName: String = "group.hogehoge.dev"
        
        if itemProvider.hasItemConformingToTypeIdentifier(String(kUTTypeData)) {
            itemProvider.loadItem(forTypeIdentifier: String(kUTTypeData), options: nil, completionHandler: { item, error in
                
                if let firmwareURL = item as? URL {
                    let splitData = firmwareURL.absoluteString.split(separator: "/")
                    let filename = splitData.last
                    print(String(filename!))
                }
                self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
            })
        }
    }

参考文献

SLComposeServiceViewController

Share Extensionでデータを共有する

SwiftでShare Extensionを使う際のポイント