概要
Share Extensionはまず通常通りにプロジェクトを作成したあと、新規ターゲットの追加でShare Extensionを選択することで作成できます。
ターゲットを作成するとSLComposeServiceViewController
を継承したShareViewController
が自動生成されます。
このControllerにユーザーがコンテンツをポストした際の処理を実装することになります。
UIはデフォルトで用意されているものがあるのでそちらを使うか、自分で作ることもできます。
使い方
ユーザーがポストしたタイミングでShareViewController
のdidSelectPost()
が呼ばれるのでここにデータの保存やサーバーへの送信処理などを実装します。
このコードではNSExtensionItemにユーザーが入力したテキストを設定しています。
override func didSelectPost() {
var inputItem : NSExtensionItem = self.extensionContext.inputItems[0] as NSExtensionItem
var outputItem : NSExtensionItem = inputItem.copy() as NSExtensionItem;
// 入力されたテキストを設定する
outputItem.attributedContentText = NSAttributedString(string:self.contentText, attributes:nil);
// ここに処理を書く
self.extensionContext.completeRequestReturningItems([outputItem], completionHandler: nil)
}
SLComposeServiceViewController
には入力チェクをする仕組みが用意されているので、isContentValid()
をオーバーライドして入力チェックを実装できます。
override func isContentValid() -> Bool {
// ここに入力チェックを書く
return true
}
Share Extensionの呼び出しはこれまで通りUIActivityViewController
を行います。
@IBAction func shareAction(sender: AnyObject) {
let firstActivityItem = "test message"
let secondActivityItem : NSURL = NSURL.URLWithString("http://www.mocology.com/");
let activityViewController : UIActivityViewController = UIActivityViewController(
activityItems: [firstActivityItem, secondActivityItem], applicationActivities: nil)
activityViewController.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:Array!, error:NSError!) in
if (completed) {
// ここに完了後の処理を書く
}
}
self.presentViewController(activityViewController, animated: true, completion: nil)
}
補足
Share Extensionでサポートするデータを指定することができます。
例えばターゲット作成時に自動生成されるinfo.plist内のNSExtensionActivationRule
に定義します。
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>10</integer>
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
</dict>
現状では下記の6つの項目をサポートしています。
- NSExtensionActivationSupportsTextWithMaxCount
- NSExtensionActivationSupportsImageWithMaxCount
- NSExtensionActivationSupportsMovieWithMaxCount
- NSExtensionActivationSupportsFileWithMaxCount
- NSExtensionActivationSupportsWebURLWithMaxCount
- NSExtensionActivationSupportsWebPageWithMaxCount
まとめ
Share Extensionについては情報が多くないので、簡単にまとめた部分だけを書いてみました。
今後も情報を追加していきたいと思います。
Today Extensionについてブログに書いていますのでこちらもあわせてどうぞ。