Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

iOS9のクイックアクション対応

ホーム画面のアプリアイコンを3D Touchすると実行されるクイックアクションの実装方法です。

Info.plistの変更

UIApplicationShortcutItemsを追加します。

Info.plist

    <key>UIApplicationShortcutItems</key>
    <array>
        <dict>
            <key>UIApplicationShortcutItemIconType</key>
            <string>UIApplicationShortcutIconTypeShare</string>
            <key>UIApplicationShortcutItemSubtitle</key>
            <string>shortcutSubtitle</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>shortcutTitle</string>
            <key>UIApplicationShortcutItemType</key>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER).Second</string>
            <key>UIApplicationShortcutItemUserInfo</key>
            <dict>
                <key>secondShortcutKey1</key>
                <string>secondShortcutValue1</string>
            </dict>
        </dict>
    </array>

仕様

詳しい仕様はこちらのUIApplicationShortcutItemsを参照 https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW36

必須事項

必須なのは、クイックアクションの種類を表すStringであるUIApplicationShortcutItemType と 表示するクイックアクション名を表すUIApplicationShortcutItemTitle です。

アイコンの設定

システムの用意しているアイコンを利用する場合

UIApplicationShortcutItemIconTypeをkeyにして、UIApplicationShortcutItonTypeを指定します UIApplicationShortcutIcon Class Reference

  • UIApplicationShortcutIconType
enum UIApplicationShortcutIconType : Int {
    case Compose
    case Play
    case Pause
    case Add
    case Location
    case Search
    case Share
    case Prohibit
    case Contact
    case Home
    case MarkLocation
    case Favorite
    case Love
    case Cloud
    case Invitation
    case Confirmation
    case Mail
    case Message
    case Date
    case Time
    case CapturePhoto
    case CaptureVideo
    case Task
    case TaskCompleted
    case Alarm
    case Bookmark
    case Shuffle
    case Audio
    case Update
}
            <key>UIApplicationShortcutItemIconType</key>
            <string>UIApplicationShortcutIconTypeShare</string>

独自アイコンを使う場合

UIApplicationShortcutItemIconFileをkeyにして、ファイル名を指定

  • 画像の条件
    • square, single color, and 35x35 point

AppDelegateの変更

クイックアクションが実行されるとAppDelegateのperformActionForShortcutItemが呼ばれます。 shortcutItemを参照すれば、どのクイックアクションが実行されたか判別できるので、それによって対応する処理を実装すればよいです。

    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void) {

}

動的にクイックアクションを追加する方法

Info.plistに書く静的にクイックアクションを追加する方法とは別に、アプリ起動後にアプリのプログラムから動的にクイックアクションを追加することもできます

やることとしては、UIApplicationShortCutItemのインスタンスを生成して、UIApplicationのshortcutItemsにセットすればよいです。

        if let shortcutItems = application.shortcutItems where shortcutItems.isEmpty {
            // Construct the items.
            let shortcut3 = UIMutableApplicationShortcutItem(type: "hoge", localizedTitle: "Play", localizedSubtitle: "Will Play an item", icon: UIApplicationShortcutIcon(type: .Play), userInfo: [
                "": UIApplicationShortcutIconType.Play.rawValue
                ]
            )

            application.shortcutItems = [shortcut3]
        }