iPhoneアプリをiPad対応するノリでMac対応しよう【SwiftUI】

今回は「iPhone/iPadアプリを超低コストでMac対応する方法」と「その次のステップ」について話します。

## 前提
- アップデートを重ねて成熟したiPhone/iPadアプリがある
- SwiftUIを採用した一般的な構成のアプリ
- Macアプリ開発は未経験

![iPhoneアプリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/369b777e-6704-a404-b7a8-73c304a5e72a.png)

## 「iPhoneアプリをiPad対応するノリ」
iPhoneアプリは`Supported Destinations`に`iPad`を追加するだけでiPadで動作します。ただそのままだと「使い辛いiPadアプリ」になってしまいます。「使い辛くないiPadアプリ」にするためには(多くのケースにおいて)少量の改修で十分です。その少量の改修を実施した状態でApp StoreにリリースしているiPadアプリは沢山あります。それを「iPhoneアプリをiPad対応するノリ」と呼んでます。

![Supported Destinations iPad](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/f97682cd-1e80-e31c-c4d5-385898b2fd8c.png)

![iPadアプリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/c7c0ac7b-5003-8629-e3ef-bb7bd468f5de.png)

## 普通にMac対応すると…
初めてのMacアプリ開発はかなり大変です。

例えば

- デバイスの基本的な特徴や操作パターン、ベストプラクティスが異なるためUI全体の再設計が必要
- View層のコードはほぼ共通化不可
- (iOS/iPadOSの成熟してきたSwiftUIに比べると)macOSのSwiftUIは出来が少し悪い

などの理由で、多くの開発リソースが必要になります。

Macアプリ開発を一度でもしっかり経験すれば大した問題ではないですが、初めての場合は完成の目処がなかなか付かずに疲弊してしまうでしょう。

## Mac Catalystを採用しよう
Mac Catalystとは既存のiPadアプリ(やiPhoneアプリ)のMacバージョンを作成するための移植フレームワークです。2019年にmacOS Catalinaの新機能の1つとして登場しました。

![Mac Catalyst紹介](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/720e59e2-a9e3-3326-af41-473dd5777387.png)

`Supported Destinations`に`Mac(Mac Catalyst)`を追加するだけで(多くのケースで)何も変更せずともMacで動作します。必須となる改修作業量は多くありません。つまり「iPhoneアプリをiPad対応するノリ」でMac対応が可能なのです。

![Supported Destinations Mac](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/b4caacc5-3e5d-0176-1bdd-68cd8af3412b.png)

![Mac Catalystアプリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/68a2fd90-1002-23da-725a-e443e95a2928.png)

Mac Catalystは毎年少しずつアップデートされています。特に2023年末現在のSwiftUIアプリであれば非常にスムーズに実装出来ます。

### Mac Catalyst採用における作業
- Supported DestinationsにMac(Mac Catalyst)を追加
- Mac非対応API(背面カメラやモーションセンサー、ARKit、HealthKitなど)を実行対象外にする
- アプリ名のローカライズの調整
- 見た目が崩れている箇所の微調整
- (必要であれば)ウインドウサイズの指定

など

具体的な内容は以下の記事を参照してください。

https://zenn.dev/huiygfutfgvjknj/articles/67072b942d767c

### Mac Catalystの価値はアプリとの相性次第
多くのiPhone/iPadアプリはMac Catalystで十分に価値を持つMacアプリになります。
アプリとの相性が悪ければ、素直にMac Catalystを諦めてフルネイティブアプリを検討しましょう。
アプリとの相性が良ければ、Mac Catalystで継続的に運用していくのも良い選択肢です。無理にフルネイティブアプリに取り組む必要はありません。

![Plain将棋盤のMacバージョン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564662/119b9ba5-6aa7-cf90-a66a-18af5829ef8e.png)

実際、私がリリースした将棋盤アプリではMac Catalystを採用しており、Mac Catalystとの相性が良かったので非常に少ないコストでMacバージョンを運用し続けられています。

### 経験や知識は無駄にならない
Mac Catalyst開発で得られる経験や知識は「SwiftUIフルネイティブMacアプリ開発」や「iPadアプリの更なる最適化」等で役に立ちます。つまり「移植フレームワーク開発で得た経験や知識は潰しが効かず無駄になる」という典型的な状況にはほぼほぼなりません。

## 次のステップ: フルネイティブ化
Mac Catalystはあくまで移植フレームワークなので「完璧なMacアプリ」を作るのは困難です。
Mac Catalystアプリのリリースから一定期間経ったタイミングでフルネイティブ化を検討してみるのも良いかもしれません。そのタイミングでは、Macアプリ開発への理解は進み、ユーザーのニーズもある程度把握できているでしょう。

## まとめ
- 未経験者によるiPhone/iPadアプリのMac対応は結構大変
- Mac CatalystならiPad対応感覚でMac対応出来るかも
- 相性良ければMac App Storeでリリースしよう
- SwiftUIフルネイティブアプリへのステップの1つとしてもMac Catalystは可
- 最近「iOSアプリ開発」と「Macアプリ開発」の断絶は小さくなってきた

## 関連リンク
https://developer.apple.com/jp/mac-catalyst/

https://zenn.dev/huiygfutfgvjknj/articles/67072b942d767c

https://apps.apple.com/app/id1620268476

https://zenn.dev/huiygfutfgvjknj/articles/eea68b91b7306c