Appleが教えてくれないvisionOSアプリ開発に必要な知識集(2024春)
こんにちは、Apple Vision Pro発売日にvisionOSアプリを3つ公開した個人デベロッパです。
本記事では私が直面した「Appleによって明文化されていないがvisionOSアプリ開発/公開する上で必要となった知識」をいくつか紹介します。
その1: 仕様変更されたドキュメントに訂正が無い
Appleは年1で開催するWWDC(Worldwide Developers Conference)にて開発者向けドキュメントをまとめて発表します。「セッションビデオ」というハイクオリティなプレゼン動画をドキュメントの軸にするという特徴的なスタイルをとっています。
2023年6月、WWDC23にてApple Vision Proがお披露目されたのと同時にドキュメントもまとめて公開されました。バージョン1.0が正式リリースされた2024年2月までの間にvisionOSは大幅に改善され、破壊的変更含む仕様変更も多々ありました。しかし、その仕様変更がWWDC23で公開されたセッションビデオに反映されておらず、訂正も(動画内や動画ページに)無いのです。
自分自身が実装したコードで想定外の挙動が起きると普通は「自身の理解不足」や「コーディングミス」の可能性を疑いますが、WWDC23セッションビデオに関しては「仕様変更」の可能性も疑う必要があります。
例① RealityViewでSwiftUIビューを組み込む方法
3D空間上で3Dモデルとかを表示する新APIにRealityViewというのがあります。そのRealityView内ではSwiftUIビューを簡単に組み込むことが出来ます。
セッションビデオでは、組み込みたいSwiftUIビューにtag(id:)モディファイアでidを指定し、RealityView側にてビューを呼び出すように紹介されています。しかし、これは動作しません。
2023年8月に公開されたXcode 15 beta 8で仕様変更なされたようで、新しくAttachment構造体を使うようになりました。tag(id:)モディファイアは使いません。
動画内や動画ページにはこの仕様変更に関する修正や訂正は一切ありません。
例② 「xrOS」という謎OS
Apple Vision Proに搭載されるOSは「visionOS」なのですが、セッションビデオ中に「xrOS」という言葉がちょこちょこ登場します。visionOSとxrOSは別物かと言うと、そうではなく同じものを指しています。しかし、Appleはこの「xrOS」という言葉について(これまでもずっと)一切説明していません。
あくまでインターネット上の噂話や推測ですが、「xrOSというのはApple内部で用いていた呼び方であり、公表の数日前にxrOSからvisionOSに急遽変更された。その影響でセッションビデオや開発ツールの一部にxrOSという言葉が残ってしまった。」というのが定説です。
(もちろんこれも)動画内や動画ページにはこの仕様変更に関する修正や訂正は一切ありません。
例③ ボリュームのアプリ名ラベルは無くなった
以下のセッションビデオでは、ボリュームの下部にアプリ名のラベルがシステム標準UIとして表示されています。
ただ、実際には「アプリケーションタイトルバー」というものは表示されません。どこかのタイミングで仕様変更されたようです。
その2: ライフサイクルは謎
visionOSアプリのライフサイクルは謎がいっぱいです。
例えば「アプリインスタンスがどのタイミングでシステムによって破棄(終了?)されるのか」や「ユーザーがウインドウから物理的に遠くへ移動するとそのウインドウやアプリはどうなるのか」、「どの状態であればアプリはバックグラウンド(?)状態になるのか」などの様々な疑問があります。
Appleの公式ドキュメント上にライフサイクルに関する言及は非常に少ないです。(あくまで私の推測ですが)仕様変更の余地を残すためにAppleは意図的にライフサイクルに関して不明瞭にしているようです。
ライフサイクル周りが原因で想定外のシナリオが発生しないように慎重にアプリを設計する必要があります。
補足1: アプリを強制終了する方法
デジタルクラウンとトップボタンの両方を押し続けるとアプリケーション強制終了ウィンドウが表示されます。
ちなみにシミュレーター上でアプリを強制終了する方法はありません。
補足2: xボタンの挙動
- 1つのウインドウのみを表示している状態でxボタンを押すと、ウインドウは消えるがウインドウインスタンスは保持される。つまりmacOSの「隠す」のような挙動になる。
- 単一アプリのウインドウを複数表示している際に任意のウインドウのxボタンを押すと、ウインドウは消えてウインドウインスタンスは破棄される。つまりmacOSの「閉じる」のような挙動になる。
- xボタン長押しすると「Close APPNAME」というボタンが表示される。このボタンでは、同アプリの表示中の全てのウインドウが非表示になり、すべてのウインドウインスタンスは保持される。ホーム画面からアプリを呼び出すと非表示になっていたウインドウがまとめて表示される。
これらの仕様はシミュレーター上で独自に確認しました。こういった仕様についての情報はドキュメント上には(私が調査する限り)ありません。実機があればすぐに確認出来る事でもドキュメント上での明言を避けるパターンは多々あるようです。
その3: この新プラットフォーム(ブランド)の正式名称は何?
Appleプラットフォーム(ブランド)の正式名称と言えば「iPhone」や「Mac」、「Apple Watch」などがあります。
では、visionOSを基盤とした新プラットフォーム(ブランド)の正式名称は何でしょうか。結局のところ、2024年3月現時点でAppleは明言していません。
Appleが(デベロッパに)教えてくれる正式な呼び方
- 初代製品の名前は「Apple Vision Pro」
- 「Apple Vision Pro」は略さずフルネームで呼ぶ
- 基本的に「Apple Vision Pro」に「the」を付けない
- 常に英語で表記する
- 大文字や小文字を変えない
- 「ヘッドセット」と呼ばない
- (名前を繰り返し呼ぶような場合では)「デバイス」と呼んでもいい
- (テキスト上で)「Vision Pro」という表記はしない
ソース1「Apple Vision Pro用のApp Storeへのアプリの提出」: https://developer.apple.com/jp/visionos/submit/
ソース2「Apple Style Guide」: https://support.apple.com/ja-jp/guide/applestyleguide/apsg3acde405/web
「Vision Pro」とは
Apple公式サイトではトップページなどで限定的に使われています。テキスト上ではほぼ使われていません。
Apple Style Guideにて「テキスト上でVision Proという書き方はするな」と書いてあります。テキスト以外でVision Proという表現をしても問題無いのかは不明です。
Apple製品では「」をテキストとして扱うことが出来ます。しかし「」はUnicode的には私用領域(U+F8FF)であるためApple製品以外では文字化けしてしまいます。
その4: In-App PurchaseのCapacity設定は不要になった
今までのiOS/iPadOS/watchOS/macOS/tvOSではIn-App Purchase(アプリ内課金)を実装する場合はCapacityメニューで設定する必要がありましたが、visionOSでは不要になりました。しかし、そのことは一切ドキュメントされてません。(私が個人的にAppleに問い合わせをして「visionOSでは不要になった旨」は確認しました。)
ちなみにXcodeのGUI上ではCapacityメニューでvisionOSターゲットに対するIn-App Purchaseの設定が出来ないようになっています。
これはなぜ明言されていないのか
これに関しては「Appleは忙しすぎて小さな仕様変更に関するドキュメント整備に手が回っていないだけ」だと私は推測しています。
その5: 日本での発売日
現時点でApple Vision Proの日本での発売日は発表されていません。その事を念頭に入れた上で計画を建てる必要があります。
ちなみに、そもそも「日本で発売する」と明言してない
WWDC23のKeynoteで「来年末までにアメリカ以外でも発売予定」と、プレスリリースでは「アメリカ以外の国や地域では来年の後半より販売を開始」と示しています。ただし、その対象にどの国が入るのかは明言していません。
ちなみに、米国発売時点で技適マークは無い(らしい)
技適マークが付いてないので、アメリカから持ち帰ってきたApple Vision Proを日本で使う事は(多くの場合)違法です。ただし「技適未取得機器を用いた実験等の特例制度」に基づいて届出すると合法的に使う事ができます。Apple Vision Pro購入をインターネット上で報告している日本人の多くがこの制度を活用しているようです。
おまけ「Apple公式ドキュメントリンク集」
Discussion