[Swift] 新型「iPad Pro 2018」開発の進め

2019年になっちゃいましたが、遅らせながら投稿いたします。

# 前置き
Appleが新型のiPad Pro（2018）
<img width="796" alt="スクリーンショット 2019-01-04 15.18.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/175242/105cf2e6-2380-7710-72c2-3e1836f5e9e6.png">
(参考： [Apple公式](https://developer.apple.com/videos/play/tech-talks/804/))

- 11インチ
- 12.9インチ

の2モデルを``2018年11月7日``に発売しました。

上記に伴って、Appleは11~12月にかけて企業向けにWorkshopを開催していた。
(一般参加はなく、Appleと直接やりとりのあるアプリ開発をしている企業周りが参加できた、っぽい)

これは良くある動作確認レクチャーのようなワークショップではなく**エンジニア・デザイナー向け**のもので、
その中で得られた知見を、共有できる範囲でここに記載できればと。
（ワークショップ自体はコンフィデンシャルな（守秘義務がある）ので内容を話せない）

## 機能・デザイン

新しいiPadが今までと明らかに違うのは以下の２つ

### FaceID導入とホームボタンの廃止

#### 内容
指紋認証はなくなりホームボタンもなくなった。代わりにFaceIDが導入された。
これは一見すると、大したものには見えないが、多少なり画面サイズが変わるので、**アプリのデザインが変わる**ことを忘れてはならない。

以下、SafeArea外の比較
<img width="800" alt="スクリーンショット 2019-01-04 16.15.44 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/175242/cebec0e3-54b2-da20-138b-50c752aa9a78.png">


#### アドバイス
Appleの人いわく、UI/UXとしても、**ボタンがなくなったので360度回転に対応するアプリが望ましい**とのこと。
→ボタンがあることで、端末の向きが上か下か判断できていたものがなくなったことにも起因している

### Apple Pencilのダブルタップ機能

#### 内容
今までの``Apple Pencil``との違いをあげると、描きやすいとか、充電が、、、、
云々あるが、エンジニア目線でフォーカスすると、やはり**ダブルタップ機能**の存在が一番大きい。
簡単にいうと。これは**ペンをダブルタップすると、特定のアクション機能が使える**ことだ。

例　ダブルタップによるペンの切り替え
![20181129121851.gif](https://qiita-image-store.s3.amazonaws.com/0/175242/efa36b36-e478-f648-270e-e3f1817c3fc1.gif)
（参考： [SinSpace](https://www.sin-space.com/entry/applepencil2-vs-applepencil-review))

設定画面には、ダブルタップした際のアクションが、デフォルトで**４つ**用意されている。
やはり、ペンという名前だけあって、**ペンに特化した機能**が用意されている。
<img width="651" alt="スクリーンショット 2019-01-04 14.35.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/175242/98015d63-ddea-1eb2-1180-a7278596bf3e.png">

この４つは**アプリ上（swift上）でハンドリングすることができる**。

#### 実装

[公式リファレンス](https://developer.apple.com/documentation/uikit/pencil_interactions/handling_double_taps_from_apple_pencil)

実装は至って簡単。以下の２ステップを踏むだけ。

1.アクション（インタラクション）を入れたい画面に追加する

```.swift
let pencilInteraction = UIPencilInteraction()
pencilInteraction.delegate = self // ※ 2で追加する
view.addInteraction(pencilInteraction)
```

2.ダブルタップ時の挙動を実装する（Delegate追加）

```.swift

class xxxViewController: UIPencilInteractionDelegate {
    
    func pencilInteractionDidTap(_ interaction: UIPencilInteraction) {
        // 現状ApplePencilの設定が何かを判定する        
        switch UIPencilInteraction.preferredTapAction {
        case .switchEraser:
            // 現在使用中のツールと消しゴムの切り替え
        
        case .switchPrevious:
            // 現在使用中のツールと前回使用したツールの切り替え
            
        case .showColorPalette:
            // カラーパレットを表示
            
        case .ignore:
            // オフ
            
        }
    }
}
```

上記はあくまでも４つをハンドリングするための分岐である。
ダブルタップ時に無条件で特定のアクションを実装したい場合は、switchによる分岐は特にいらない。

#### アドバイス
Appleの人いわく、ペンでのカスタムアクションを新たに作成することは、ユーザーに新たにアクションを覚えてもらう必要があるので、推奨しているわけではないとのこと
→**ApplePenceilはあくまでもペン**なので、**ペンとして親和性のある使い方**で機能を作った方が良いらしい

## その他

### AppleStoreでのフィーチャー
実際にリリースしているアプリで、上記のレイアウトや新規機能を実装している企業は、Appleからいつリリースなのかということをざっくり聞かれることがある。
→ **SafeAreaへの対応や新しい機能実装は、AppleStoreでフィーチャーしてくれるのかもしれない**

### MacOSアプリとの互換性
今年の発表でもあったが、来年にはMacOSアプリをUIKit(iPhoneと同じ)で動かせるようになる予定。
→現在Apple公式アプリの一部はそうなっており、デザインはiPadよりのUIである。
　→今のうちにIPadでちゃんとつくっておけば、**MacOSアプリとして**すぐにリリースできるかもよ？

# あとがき
iPhoneでは積極的に開発しているが、iPadの開発をないがしろにしているアプリって多いかと。
実際、ユーザー数や開発から得られる利益とか考えると合理的ではないのは確かだが、、

MacOSアプリのことも考え、これを機に開発してみてはいかがでしょうか？