ページ

2018年3月10日土曜日

App ExtensionのShare Extensionを試す 【Swift】

App Extension

以下引用
App Extensionには、基盤となるアプリケーションの機能や能力を拡大する働きがあります。ユーザは、他のアプリケーションまたはシステムとやり取りしながらでも、その機能や能力を活用できます。
つまりはアプリの拡張(まんまw)

Share Extension

↓これ
image.png (65.3 kB)

:computer:環境構築


プロジェクトを作成して、Share Extension用のTargetを追加
image.png (120.6 kB)
image.png (70.5 kB)
Targetを追加すると以下のように聞かれる
image.png (31.9 kB)
-> 「Activate」を選択
Targetが追加されると ShareViewController.swiftが追加されている
swift
import UIKit
import Social

class ShareViewController: SLComposeServiceViewController {

    override func isContentValid() -> Bool {
        // Do validation of contentText and/or NSExtensionContext attachments here
        return true
    }

    override func didSelectPost() {
        // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.

        // 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.
        self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }

    override func configurationItems() -> [Any]! {
        // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
        return []
    }

}

App Groupの設定

もともとのTargetと追加したTargetの Keychain Sharing と App Groups をONにする
image.png (140.3 kB)

Info.plistの編集

扱えるデータ型を定義する
例) テキストを利用する、画像3枚、WebページのURLを1つまでとする場合
  <key>NSExtensionAttributes</key>
  <dict>
   <key>NSExtensionActivationRule</key>
   <dict>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>3</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
   </dict>
  </dict>

この時点で一回実行させてみる:eyes:

追加したTarget(Share Extension実装用)を選択して実行すると

↑のようなダイアログが表示され、どのアプリケーションから Share Extension を動かすか選択できる
image.png (36.1 kB)image.png (72.7 kB)
ちゃんと表示されている!!!
今は選択すると
image.png (18.3 kB)
↑こんな感じになる

:pencil: 実装


ShareViewController.swift側の実装を後は好きなようにやる
既にあるメソッドの意味
メソッド何をするメソッドか?
isContentValidバリデーション(Postを押せる状態か?)
didSelectPostPostが押された後の処理
configurationItems追加項目のリスト管理

1 件のコメント: