Appleは先日のWWDCの中で、Project Catalystを発表した。Marzipanとも呼ばれるCatalystは、iOSアプリをmacOS用にリリース可能にするために設計されたもので、macOS Cataniaの次のメジャーリリースから提供される予定である。
Appleは昨年から、Voice Catalyst、Apple News、Stocks、HomeなどといったiOSアプリを、Catalystプロジェクトを使用してmacOSに移植する作業に着手している。現時点でScreen TimeがmacOSで動作するようになった他、iOS 13の新機能の一部(新しいリマインダーアプリ、フォトギャラリー、Notes用のフォルダなど)も移植されている。
Twitter、Gameloft、Atlassian、DCなど他の企業も、自社のアプリをmacOSで動作可能にすると発表している。
(画像はblog.twitter.comより)
Project Catalystを使用すれば、iPadアプリを簡単にmacOSに移植することができる。macOSバージョンのiPadアプリは、ウィンドウのサイズ変更と全画面表示、トラックパッド、マウス、およびキーボード入力、コピー/ペースト、とドラッグ・アンド・ドロップ、タッチバーコントロール、デフォルトメニューバー、Macスタイルのスクロールバーなどをデフォルトでサポートする。さらには、開発者が少しの手間を掛けることで、メニューバーコントロール、ツールバーショートカット、半透明のサイドバーなどを使用して、アプリをmacOSにより適合させることもできる。
iPadアプリをmacOSに移植するには、まず最初に、XCode 11ベータ版をインストールした上でXcodeプロジェクトを開き、対象とするiOSターゲットを選択する必要がある。次に、[全般]タブから [展開情報]に移動し、MacデバイスのチェックボックスをONにする(アプリがiPhoneのみをサポートしている場合には、このチェックボックスは使用できない)。
サポート対象デバイスとしてMacを選択すると、Xcodeはプロジェクトを次のように変更する。
- Macバージョンのアプリ用のバンドル識別子を追加
- App Sandbox Entitlement(アプリがアクセス制御テクノロジーを使用できるかどうかを示すブール値)をプロジェクトに追加
- Xcodeからアプリを実行する時、選択可能なデスティネーションのリストに"My Mac"を追加
- 互換性のないフレームワーク、アプリ拡張機能、その他の埋め込みコンテンツを除外
互換性のないフレームワークや埋め込みコンテンツは、可能な限りXcodeが除外してくれるが、一部のコンテンツについては、開発者が手動で除外しなければならない場合もある。この作業を行うには、まずiOSターゲットの[全般]タブから、 [フレームワーク]、[ライブラリ]、[埋め込みコンテンツ]に移動した上で、アイテムのプラットフォーム設定としてiOSを選択する。この設定を行うと、そのアイテムはアプリのMacバージョンから除外されるようになる。
Macでは使用できないフレームワークやAPIが原因でコンパイルできないコードを含むプロジェクトの場合は、その部分を以下のように囲めばよい。
#if !targetEnvironment(UIKitForMac)
// Code to exclude from Mac.
#endif
同じアプローチを使って、macOSでのみ使用可能なフレームワークを含めることもできる。
#if targetEnvironment(UIKitForMac)
// Code to execute only on Mac.
#endif
iPadアプリの大部分がmacOS用の優れた候補となる一方で、ジャイロスコープや加速度計、リアカメラ、HealthKitやARKitなどのiOSフレームワーク、あるいはおもな機能はナビゲーションであるようなものについては、macOSにはおそらく適さないだろう。
Catalystの詳細については、Appleの開発者向けサイトを参照してほしい。Xcode 11ベータ版はhttps://developer.apple.com/download/からダウンロードできる。開発者ガイドも用意されている。