[Swift]UIActivityの使い方まとめ

開発中のアプリで、シェアボタンを押したら下からピロッと出てくる機能を実装したかったものの、名称がわからずだいぶさまよい歩きました。無知とは辛いものです。
そんな過去の自分に捧げたいメモ書きを残します。

[サンプルリポジトリ - https://github.com/nashirox/uiactivity-sample
](https://github.com/nashirox/uiactivity-sample)

## UIActivityとは？
ＳＮＳへの投稿やメール送信から、画像保存に連絡先追加などの機能を一覧から選択できる機能です。

![image](https://qiita-image-store.s3.amazonaws.com/0/4900/d2c3b95f-79cc-d8af-7add-49b28c9beb4c.png "withimage.png")

## 使用できるサービスの種類
UIActivityでは次のサービスを設定することができます。

| タイプ名 | 概要 |
|:-----------|------------|
| UIActivityTypePostToFacebook| Facebookへ投稿 |
| UIActivityTypePostToTwitter| Twitterへ投稿 |
| UIActivityTypeMessage| メッセージを送信 |
| UIActivityTypeMail| メールを送信 |
| UIActivityTypePrint| プリントダイアログを立ち上げる |
| UIActivityTypeCopyToPasteboard| クリックボードに貼り付け |
| UIActivityTypeAssignToContact| 連絡先を呼び出す |
| UIActivityTypeSaveToCameraRoll| カメラロールに保存 |
| UIActivityTypeAddToReadingList| Safariのリーディングリストに追加 |
| UIActivityTypePostToFlickr| Flickrへ投稿 |
| UIActivityTypePostToVimeo| Vimeoへ投稿 |
| UIActivityTypePostToWeibo| 新浪微博へ投稿 |
| UIActivityTypePostToTencentWeibo| 騰訊微博へ投稿 |
| UIActivityTypeAirDrop| AirDropでの共有 |


## 実装方法
### ストーリーボード
新規プロジェクトで、真ん中にシェア用ボタンを配置します。

![スクリーンショット 2015-03-20 13.52.58.png](https://qiita-image-store.s3.amazonaws.com/0/4900/e70e24b6-0816-1bc3-7bef-97a3bfc46d46.png "スクリーンショット 2015-03-20 13.52.58.png")

Action接続、UIButtonタイプでshareという名前でViewControllerに紐付けます。

![スクリーンショット 2015-03-20 14.06.21.png](https://qiita-image-store.s3.amazonaws.com/0/4900/460892bb-b8a6-1f12-2b0a-1e62043db506.png "スクリーンショット 2015-03-20 14.06.21.png")

### コード
Accountsフレームワークを最初にインポートしてください。あとは次のような感じです。

```swift:ViewController.swift
import UIKit
import Accounts

class ViewController: UIViewController {

  @IBAction func share(sender: UIButton) {

    // 共有する項目
    let shareText = "Apple - Apple Watch"
    let shareWebsite = NSURL(string: "https://www.apple.com/jp/watch/")!
    let shareImage = UIImage(named: "shareSample.png")!
    
    let activityItems = [shareText, shareWebsite, shareImage]
        
    // 初期化処理
    let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

    // 使用しないアクティビティタイプ
    let excludedActivityTypes = [
      UIActivityTypePostToFacebook,
      UIActivityTypePostToTwitter,
      UIActivityTypeMessage,
      UIActivityTypeSaveToCameraRoll,
      UIActivityTypePrint
    ]
    
    activityVC.excludedActivityTypes = excludedActivityTypes
    
    // UIActivityViewControllerを表示
    self.presentViewController(activityVC, animated: true, completion: nil)
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }
}  
```

## 実行結果
テキストやイメージファイル、ＵＲＬの組み合わせで立ち上がるダイアログもちょっとかわるので、参考までにスクショをのせておきます。

| タイプ名 | text + URL + image | text + URL |
|:-----------|:-----------:|:------------:|
| 基本表示 | ![withimage.png](https://qiita-image-store.s3.amazonaws.com/0/4900/9d0fc7ad-b7e7-c8d6-588b-1c1e2d5e34d8.png "withimage.png") |  ![写真 2015-03-20 20 42 04.png](https://qiita-image-store.s3.amazonaws.com/0/4900/91c27c16-313e-ef97-820a-20016bf4b4af.png "写真 2015-03-20 20 42 04.png")|
| Twitter    |![](https://qiita-image-store.s3.amazonaws.com/0/4900/2ae0c39b-eafa-5763-14a3-d3978e9f8ade.png "写真 2015-03-20 14 26 59.png") | ![twitter2](https://qiita-image-store.s3.amazonaws.com/0/4900/d2e35f27-46a3-c51c-37a4-a2149b1bcb08.png "写真 2015-03-20 14 31 38.png") |
| Facebook   | ![facebook1](https://qiita-image-store.s3.amazonaws.com/0/4900/974edff0-54a6-ffb1-b202-e801c55ca6a9.png "写真 2015-03-20 14 27 08.png") | ![facebook2](https://qiita-image-store.s3.amazonaws.com/0/4900/2f8fa1d0-e26d-73e2-87f3-390e44ed64c6.png "写真 2015-03-20 14 29 11.png") |
| メール   | ![写真_2015-03-20_14_27_16.png](https://qiita-image-store.s3.amazonaws.com/0/4900/d056a6e4-14fc-e3f9-d136-f1d3919c076e.png "写真_2015-03-20_14_27_16.png") | ![mail.png](https://qiita-image-store.s3.amazonaws.com/0/4900/1d92e425-b01f-6f8e-db20-603f25b12881.png "mail.png") |
| メッセージ   | ![imessage](https://qiita-image-store.s3.amazonaws.com/0/4900/f4d9ce70-03a1-3b5f-f002-64aaff180153.png "写真 2015-03-20 14 27 35.png") |    ![message.png](https://qiita-image-store.s3.amazonaws.com/0/4900/d9f5833f-5c58-c5df-fcfe-e4deaa298c10.png "message.png") |
| Flickr   | ![flickr](https://qiita-image-store.s3.amazonaws.com/0/4900/8bb05878-9c9f-8b45-7a9c-2b3ef5c82ab3.png "写真 2015-03-20 14 27 51.png") |    非表示    |

## その他
### 英語になってる場合
Project -> Localizationsに`Japanes (ja)`を追加してください。

![設定](https://qiita-image-store.s3.amazonaws.com/0/4900/4948c32d-3ae7-a9e1-9a40-33a7a45c1641.png "スクリーンショット 2015-03-20 14.26.08.png")


### LINEを追加する
Cocoapod で[LineActivity](https://github.com/OopsMouse/LINEActivity)をインストールしてください。

```Podfile
pod "LINEActivity", "~> 0.2.0"
```

`pod install`後、ブリッジングヘッダに追記します。

```yourAppName-Bridging-Header.h
#import "LINEActivity.h"

```

あとは、先のUIActivityViewControllerの引数 `applicationActivities`に配列で追加するだけです。

```swift:ViewController.swift
let LineKit = LINEActivity()
let myApplicationActivities = [LineKit]

// 標準以外のサービスも追加
let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: myApplicationActivities)

```
これで追加されました。モノクロなのは仕様なので、カラーにしたい場合は[Qiitaのこの投稿](http://qiita.com/notice_inc/items/2d93c27ab2bcd87fa027)を参考にしてください。

![line.png](https://qiita-image-store.s3.amazonaws.com/0/4900/88ba632d-991c-399f-a876-101c4458ae11.png "line.png")