Tamablog

たまに更新するiOS/Mac系技術ブログ。

Marzipanを予想してみた

今年のWWDCで一番の目玉になりそうなのが「Marzipan」です。今回はその姿を予想してみます。

Marzipanとは

昨年12月にBloomburgのMark Gurman記者が「Marzipan」とよばれるプロジェクトをスクープしました。ただ記事の内容はやや曖昧で、「iOSアプリがmacOS上で動くようになる」「iOSとMacアプリのバイナリが1つになる」「MacアプリでもiOSアプリでも使えるフレームワークが登場する」など、さまざまな解釈がなされました。

先月アップルがシカゴで教育イベントを開催しましたが、その中でMarzipanのヒントを見ることができたと思っています。

Classroomアプリ

アップルは教育機関向けに「Classroom」というiPadアプリを提供していますが、このアプリのMac版が6月にベータ版として登場することが発表されました。6月にはWWDCが開催されますが、単なる偶然ではなさそうです。

仮にMarzipanが「iOSアプリをMac上で動作させる」のであれば、このMacアプリは不要なはずです。にも関わらずアップルがMacアプリを作ったという事は、Marzipanは「UIKit for Mac」の可能性が高いと考えています。

Classroom for Macのスクリーンショットを見てみると、iPad版とは若干異なることに気がつきます。例えばMac版ではツールバーの中央にSegmented Controlを使っているのに対し、iPad版は同機能にトグルボタンを使っています。またMac版には検索バーがツールバー上に表示されていますが、iPad版ではiOSらしくナビゲーションバーの下に隠されているのかも知れません。

さらにiPad版はツールバーに「Select」ボタンがありますがMac版にはありません。これは画面中央の子供達の顔をクリック・タップした時のアクションが違うことを意味します。おそらくMac版ではクリックで生徒を選択できるようになっており、ダブルクリックで生徒の詳細を見る、というアクションになっていると思われます。それに対してiPad版はタップすれば生徒の詳細を見るアクションとなり、選択は「Select」ボタンをタップしてから行うと思われます。

このことから、同じアプリでもそれぞれのプラットフォームに合わせて最適化すべし、というアップルのメッセージを読み取ることができます。

UXKit

2015年にMacのPhotosアプリで「UXKit」というフレームワークが使われていることが話題になりました。これはUIKitのAPIをAppKitで実装したものであり、Marzipanはこれを進化させたものであると考えています。

UXKitフレームワークにはAppKitにはなかったNavigationControllerなどのクラスが含まれ、iOSアプリをよりMacに移植しやすくなっています。 またNSViewとUIViewの違いを吸収するUXViewなどのクラスが含まれています。UXKitのヘッダーファイルはこちらで見ることができます。

MacとiOSの違い

「UIKit for Mac」があればMacアプリを作るハードルが下がるのは確かですが、それだけでは良いアプリは作れません。プラットフォームの違いを理解し、Mac特有の機能(マウスによる操作、メニューバーやポップアップメニュー、ショットカットやキーボード操作、TouchBar、リサイズ可能なウインドウ、等)に対応する必要があります。

iPhoneアプリのコードベースからMacアプリを作るのは、iPadアプリを作るよりも作業量としては多くなりそうです。

最後に

というわけでMarzipanの予想をしてみましたが、個人的希望もかなり含まれています。

AppKitを使っているとUIKitの機能が欲しくなることが多々あります。例えばNSScrollViewにはpagingEnabledやtargetContentOffsetを指定できるDelegateがありません。またNSTextFieldの使いにくさはかなりのもので、UITextFieldが欲しくなります。これらがMarzipanで解決するとMacアプリ開発がより楽しく行えるのでWWDCの発表に期待したいと思います!