サイトマップ 連絡先 最初に戻る 戻る 次へ進む
$Date: 2018-07-07 06:49:13 +0900 (2018/07/07 (土)) $
$Revision: 1347 $

swift 3 での Share Extension

  1. 元となるプロジェクトを作る
  2. Share Extension を追加する
  3. info.plist を編集して Web URL の Share を許可する
  4. ShareViewController の didSelectPost に Post されたときのコードを実装する

参考サイト

元となるプロジェクトを作る

手順は省略

Share Extension を追加する

Xcode のメニューから File -> New -> Target を選ぶと以下のメニューが出てくるので Share Extension を選んで Next を押す。

info.plist を編集して Web URL の Share を許可する

作った Share Extension のプロジェクトで info.plist を選ぶ。
以下のように NSExtensionActivationRule がTRUEPREDICATE になっているので必要なものだけを有効にする。
NSExtensionActivationRule のタイプを Dictionary に変更する
右クリックして Add Row を選ぶ。
追加した項目に NSExtensionActivationSupportsImageWithMaxCount と名前をつける。
タイプを Number にして値を 1 にする

ShareViewController の didSelectPost に Post されたときのコードを実装する

didSelectPost に以下のようなコードを実装します
    override func didSelectPost() {
        // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.
    
        
        // http://stackoverflow.com/questions/30824486/ios-share-extension-grabbing-url-in-swift
        // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
        if let item = extensionContext?.inputItems.first as? NSExtensionItem {
            if let attachments = item.attachments as? [NSItemProvider] {
                for attachment: NSItemProvider in attachments {
                    if attachment.hasItemConformingToTypeIdentifier("public.url") {
                        attachment.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) in
                            if let shareURL = url as? NSURL {
                                // Do stuff with your URL now.
                                print("\(shareURL)")
                            }
                            self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
                        })
                    }
                }
            }
        }
    }

作ったコード

作ったコードは以下で公開しています
https://github.com/m-tmatma/ShareExtensionTest

動作画面

Safari で Share ボタンを押したときの画面です。

作った Share Extension を選んだときの画面です。