iOS9の3D touch クイックアクションを実装する方法とその効果

# 3D Touch クイックアクションとは
iPhone6S,iPhone6S+の端末の3D Touch機能を使ってホーム画面のアプリアイコンを長押しすることで
ショートカットを実装出来る機能です。
![スクリーンショット 2016-03-28 12.07.20.png](https://qiita-image-store.s3.amazonaws.com/0/30928/35c1aed0-bb56-088d-71e7-461c33cdf4ff.png)
（Appleより引用｜[クイックアクション。あなたが頻繁にすることへの近道。](http://www.apple.com/jp/iphone-6s/3d-touch/)）

# ショートカットの出し方
## 静的な手法
　```Info.plist```に```UIApplicationShortcutItems```を追加するだけで簡単に出来ます。
以下、例です。

```xml:Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>UIApplicationShortcutItems</key>
	<array>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeSearch</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>SEARCH</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).Search</string>
		</dict>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeAdd</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>ADD</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).Add</string>
		</dict>
	</array>
</dict>
</plist>
```

### UIApplicationShortcutItemIconType
アイコンの設定です。
各種アイコンは以下を参考にしてください。
[アイコン種別｜UIApplicationShortcutIcon Class Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationShortcutIcon_Class/index.html#//apple_ref/c/tdef/UIApplicationShortcutIconType)

#### 自分で用意した画像が使いたい場合
　```UIApplicationShortcutItemIconFile```に直接画像のファイル名を入れてください
以下、例です

```xml:Info.plist
<dict>
	<key>UIApplicationShortcutItemIconFile</key>
	<string>add_image</string>
	<key>UIApplicationShortcutItemTitle</key>
	<string>ADD</string>
	<key>UIApplicationShortcutItemType</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER).Add</string>
</dict>
```



### UIApplicationShortcutItemTitle
タイトルです。
### タイトルのローカライズ
1. ```InfoPlist.strings```にキーを追加
2. ```Info.plist```の```UIApplicationShortcutItemTitle```に対応したキーを書く

```xml:Info.plist
<dict>
	<key>UIApplicationShortcutItemIconType</key>
	<string>UIApplicationShortcutIconTypeAdd</string>
	<key>UIApplicationShortcutItemTitle</key>
	<string>ADD</string>
	<key>UIApplicationShortcutItemType</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER).Add</string>
</dict>
```
※関係ない箇所は省略してます

```xml:InfoPlist.strings
ADD = "追加";
```

### UIApplicationShortcutItemType
アプリ起動後のハンドリングで使うキーです。
なぜかサンプル見たらみんなbundleIDを含めてたので僕も含めてます。

## 動的な手法
自分ではやってないので、以下を参考にしてください
[動的アクション｜3D Touch の Home Screen Quick Actions に対応する](http://qiita.com/takecian/items/d417498cfe6c3b52c4bc#%E5%8B%95%E7%9A%84%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)

# アプリ起動後のハンドリング

```swift:AppDelegate.swift
    enum ActionForShortcutItemType: String {
        case Search
        case Add
    }

    @available(iOS 9.0, *)
    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
            
        let text = shortcutItem.type.stringByReplacingOccurrencesOfString(NSBundle.mainBundle().bundleIdentifier! + ".", withString: "")
        guard let actionForShortcutItemType = ActionForShortcutItemType(rawValue: text) else {
            // GAイベントとか忘れずに
            completionHandler(false)
            return
        }
        
        switch actionForShortcutItemType {
        case .Search:
            // 検索の何かしら           
        case .Add:
            // 追加の何かしら
        }

        // GAイベントとか忘れずに
        completionHandler(true)
    }
```

# 効果の程は？
告知もなにもしない場合ですが、私が担当している媒体では
利用者数はほぼ**ゼロ**に等しかったです。

以下の方法で対応してるか判定が出来るそうなので、是非告知もセットで考えてください。
[iOS デバイスが 3D Touch に対応しているか判別する](http://qiita.com/ktysne/items/55188e8067c26fe2adee)


# 参考リンク
[3D Touch の Home Screen Quick Actions に対応する](http://qiita.com/takecian/items/d417498cfe6c3b52c4bc)