47
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WWDC2023 Platforms State of the Unionまとめ。visionOSが今回は目玉!

Last updated at Posted at 2023-06-07

こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いている@mogmetです。
mogmet
最近沖縄行きましたが、やっぱりめんそーれな感じで海もきれいでいいところですね。定期的に行きたくなります。

本日はWWDC2023が開催されたので、今年も開発者向けのキーノートであるPlatforms State of the Unionをまとめさせていただきました。

結構大長編なので気になるところは目次を使って飛んで見ていただければと思います。

ちなみに前回はこちら。

Swiftの新機能

Swift Macros

Swift Macrosは、プロジェクトと一緒に構築される新しいコードを生成するために、コードの構造を使用する注釈です。
例えば有効なURL文字列をチェックするURLマクロの例。空白があるとその時点でエラーとして出力してくれます。
CleanShot 2023-06-06 at 09.33.45.png
コードを書いている途中にフィードバックをもらえるのでミスに気づきやすくなります。

async/awaitを使う例

before after
CleanShot 2023-06-06 at 14.28.59.png CleanShot 2023-06-06 at 14.29.31.png

マクロの中身はこうなってます。
CleanShot 2023-06-06 at 14.29.53.png

Swiftパッケージを通して、コミュニティが作成したマクロの恩恵を受けたり、自分のマクロを他の人と共有したりすることができます。

C++への拡張

CleanShot 2023-06-06 at 14.33.03.png

Swift-C++の相互運用性により、中間的なブリッジングレイヤーなしで、同じプロジェクトで両方の言語を使用することができます。コンパイラフラグを設定することで、クラスや関数、さらにはvectorのようなテンプレートの特殊化を両言語間で共有することができます。
CleanShot 2023-06-06 at 14.34.00.png

SwiftからC++を使用することで、初期化される前の変数の使用など、コードにおける未定義の動作の多くの原因を取り除くことができます。

Swift UI Animation

SwiftUIでのアニメーションで、durationとbounceという2つの簡単なパラメータで設定できるスプリングベースのモーションがデフォルトになりました。

.sprint(durtaion: 0.5, bounce: 0.3)

SFシンボルの新しいアニメーション効果を利用することもできます。

CleanShot 2023-06-06 at 14.43.34.gif

マルチパートアニメーションを構築する必要がある場合、SwiftUIにはAnimationPhaseという新しいAPIがあり、わずか数行のコードで洗練されたアニメーションを構築するのに役立ちます。

source animation
CleanShot 2023-06-06 at 14.52.06.png CleanShot 2023-06-06 at 14.51.13.gif

キーフレーミング

SwiftUIはキーフレーミングの完全サポートを追加しました。新しいSwiftUIベースのMapKit APIのプロパティを含む、あらゆるものをアニメーション化することができます。
キーフレームは、アニメーション内の特定の時間に複数のプロパティの値を定義し、そしてSwiftUIに中間値を補間させることができます。

アップルパークまでスムーズで連続した動きを実現するデモの紹介

source animation
CleanShot 2023-06-06 at 14.53.33.png CleanShot 2023-06-06 at 14.55.16.gif

データフロー

ビューにデータを持ち込むためのプロパティラッパーの選択肢として、@State@Environmentだけに集中できるようになりました。

before after
SwiftUIにモデルを公開するときに、ObservableObjectに準拠し、各プロパティにPublishedプロパティラッパーを追加して、このようなコードを書いたことがあるかもしれませんCleanShot 2023-06-06 at 14.59.51.png Swiftの新しいマクロのサポートは、新しいObservableマクロがその代わりとなり、よりシンプルにします。クラスを@Observableでアノテートするだけで完了です。一般に公開されているプロパティはすべて自動的に公開されます。CleanShot 2023-06-06 at 15.00.07.png

SwiftUIのビューでObservableを使用するとき、ビューの更新をトリガーするためにプロパティラッパーを使用する必要はないです。

before after
CleanShot 2023-06-06 at 15.02.33.png CleanShot 2023-06-06 at 15.02.49.png

ObservableはSwiftUIがフィールドごとのレベルでアクセスを追跡することを可能にし、ビューによって使用される特定のプロパティが変更されたときにのみ、ビューのボディが再評価されるようにします。

CleanShot 2023-06-06 at 15.05.07.png

ビューで使用されないフィールドを変更する場合、無効化はまったく起こりません。
CleanShot 2023-06-06 at 15.06.18.png

SwiftData

CleanShot 2023-06-06 at 15.07.02.png

SwiftDataは、データモデリングと管理のためのフレームワークです。Core Dataの実証済みの永続化レイヤーの上に構築されていますが、Swiftのために完全に再設計され、再創造されたAPIを備えています。SwiftUIのように、それは外部ファイルフォーマットなしで、コードに完全に焦点を当てます。代わりに、それは合理化されたAPIを提供するためにSwiftの新しいマクロシステムを使用しています。

SwiftDataでは、@Modelマクロでクラスをアノテートするだけです。

@Model
class Bird {
    var name: String
    var species: Species
    var songs: [Song]
}

この1行のコードには、自動的に永続化、iCloud同期、UndoとRedoなどを有効にするような、多くの機能が詰め込まれています。
そして、値がすべてのインスタンス間で一意でなければならないことを示すような、追加の属性でプロパティをアノテーションすることによって、これらの自動動作を洗練することができます。

@Model
class Bird {
    @Attribute(.unique) var name: String
    var species: Species
    var songs: [Song]
}

また、SwiftDataは構造体とenumを理解するためにCodableプロトコルを使用するので、すでに知っているツールでデータをモデル化することができます。

enum Species: Codable {
    case houseFinch
    case barnOwn
    case baldEagle
    case other(String)
}

struct Song: Codable {
    var length: Duration
    var volume: Int
}

Widget Kit

iOS 17にリビルドしたら、ほんの少しの簡単な変更で、既存のウィジェットがiPhoneのStandByで豪華に見えるようになります。
CleanShot 2023-06-06 at 15.19.22.png

また、iPadのロック画面でも、背景が取り除かれ、エッジが立った状態で表示されます。
CleanShot 2023-06-06 at 15.19.43.png

macOS Sonomaでは、デスクトップ上でフルカラーで表示され、ウィンドウにフォーカスが当たると背景に隠れます。

before after
CleanShot 2023-06-06 at 15.20.55.png CleanShot 2023-06-06 at 15.21.08.png

インタラクティブ機能を新たにサポートすることで、リマインダーのチェックオフなど、タップで実行できる簡単なアクションをウィジェットから直接操作できるようになりました。

CleanShot 2023-06-06 at 15.22.20.gif

アーキテクチャの解説

ウィジェットのコードは、コンテンツを生成するために非同期で実行され、それが構築するSwiftUIビューは、その後アーカイブに保存されます。その後、ウィジェットの描画が必要になると、アーカイブをロードし、バックグラウンドでレンダリングし、システムUIの一部として表示することができます。
CleanShot 2023-06-06 at 15.23.45.png

ユーザーがボタンをタップすると、その拡張機能が再び実行され、アクションを処理し、UIを更新します。
CleanShot 2023-06-06 at 15.24.10.png

このアーキテクチャにより、iPhoneのウィジェットをMac上でシームレスに表示することもできます。

Continuityの魔法により、ウィジェットのアーカイブはネットワークを介してMacに送信され、
CleanShot 2023-06-06 at 15.26.00.png

ユーザーのインタラクションはiPhoneで処理されるように送り返されます。
CleanShot 2023-06-06 at 15.26.17.png

使い方

ウィジェットの背景を特定し、WidgetKitによって提供されるデフォルトを使用するためにそのパディングを更新するだけです。SwiftUIのスタックベースのレイアウトは、システムがコンテキストに基づいてウィジェットの色と間隔を適応させることができます。

既存のウィジェットに新機能を含める方法についてデモ

ウィジェットのビューを見ると、背景がZStackの中にあることがわかります。
CleanShot 2023-06-06 at 15.30.05.png

あとは、これを新しいコンテナ背景ビューモディファイアに移動するだけです。
CleanShot 2023-06-06 at 15.30.22.png

そして、iOS 17から、ウィジェットのパディングが提供されるようになったので、前に追加していたパディングを削除します。
CleanShot 2023-06-06 at 15.30.52.png

Swift Macrosのおかげで、私はXcodeのプレビューで直接全体のウィジェットタイムラインを見ることができます。
CleanShot 2023-06-06 at 15.31.13.png

プレビューキャンバスの下部に、すべてのタイムラインエントリーがあります。そして、それらをクリックすると、ウィジェットが更新されるときにどのようにアニメーションするかが表示されます。
CleanShot 2023-06-06 at 15.32.04.png

さらにエディタで、BirdViewにトランジションモディファイアを追加してみます。リーディングエッジのプッシュを試してみます。

source animation
CleanShot 2023-06-06 at 15.33.21.png CleanShot 2023-06-06 at 15.34.31.gif

プレビューキャンバスが更新されたことで、新しいiPadのロック画面やiPhoneのStandByのように、異なるコンテキストで自分のウィジェットがどう見えるかを簡単に確認できるようになりました。
CleanShot 2023-06-06 at 15.37.09.png
CleanShot 2023-06-06 at 15.38.22.png

SwiftUI は新しい showsWidgetContainerBackground 変数を提供し、背景が取り除かれたときにウィジェットがどのように見えるかをカスタマイズすることができます。

source preview
CleanShot 2023-06-06 at 15.38.03.png CleanShot 2023-06-06 at 15.39.02.png

ウィジェットからアプリと連動できるようになったので、ボタンを追加してみます。

source preview
CleanShot 2023-06-06 at 15.41.15.png CleanShot 2023-06-06 at 15.41.32.png

simulatorで試してみるとボタンと連動していることがわかります。
CleanShot 2023-06-06 at 15.42.42.gif

App Intents

App Intentsは、単にウィジェットのインタラクティブ性を高めるだけでなく、Spotlight、ショートカット、Siriなど、システム全体であなたのアプリケーションの機能を向上させます。
CleanShot 2023-06-06 at 15.43.47.png

インテントをApp Shortcutにまとめると、Spotlightの結果でアプリアイコンのすぐ隣に表示され、よりリッチでインタラクティブなプレゼンテーションができるようになります。
CleanShot 2023-06-06 at 15.45.19.png

実装方法はアプリのショートカットに、短いタイトルと画像またはシンボルを用意します。
CleanShot 2023-06-06 at 15.45.56.png

そして、アプリのInfo.plistに、アプリアイコンと相補的な背景色を指定します。
アプリのショートカットは、アップデートされたショートカットアプリケーションに表示され、ユーザーは自動的に実行するように設定したり、ホーム画面に追加したり、独自のショートカットを作るために使用したりすることができます。
CleanShot 2023-06-06 at 15.46.41.png

TipKit

適切なタイミングで適切な機能についてユーザーを賢く教育するフレームワークです。
CleanShot 2023-06-06 at 15.47.45.png

テンプレートをカスタマイズし、ターゲティングを追加するだけで、現在のコンテキストに関連した機能をユーザーに教育することができます。
CleanShot 2023-06-06 at 15.48.07.png
CleanShot 2023-06-06 at 15.48.41.png

また、全体の頻度を管理することで、ユーザーが別のデバイスで見たとしても、すでに見たことのあるTipを表示しないようにすることができます。
CleanShot 2023-06-06 at 15.49.42.png

AirDrop

共有シートをスキップして、近くにある別のデバイスに素早くコンテンツを送ることができます。
CleanShot 2023-06-06 at 15.50.42.gif

SwiftUIでShareLinkを使用するか、
CleanShot 2023-06-06 at 15.51.24.png

アプリのUIKitビューコントローラーでactivityItemsConfigurationを採用することができます。

ShareSheetやQuickLookのようなシステムが提供するViewControllerは、すでにデフォルトで動作しています。

ゲーム

Game Mode on macOS Sonoma

Mac Sonomaで、ゲームをより良いものにするゲームモードを追加しました。

Game Porting Toolkit

Game Porting Toolkitを使用すれば、3つのステップでMacにゲームを持ち込むのがこれまで以上に簡単になります。

  1. 既存ゲームの評価
    提供されるエミュレーション環境を使って、既存のWindowsゲームがMacでどの程度動作するかを評価することができます。
    CleanShot 2023-06-06 at 15.54.12.png

  2. シェーダーの変換とコンパイル
    Game Porting Toolkitには、新しいMetal Shader Converterが含まれており、これを使用すると、ジオメトリ、テッセレーション、メッシュ、レイトレーシング段階などのゲームの高度なシェーディングパイプラインを含め、既存のHLSL GPUシェーダをすべてMetalに自動的に変換できます。
    CleanShot 2023-06-06 at 15.54.49.png
    このツールは、Xcodeでゲームを構築しているときにも、シェーダーコンパイル用のWindowsベースのカスタムツールチェーンでも使用できます。
    CleanShot 2023-06-06 at 15.55.59.png

  3. グラフィックスコードの変換とゲームの最適化
    Metalは、現代のハイエンドゲームで使用される高度なグラフィックスと計算機能をすべて提供するため、グラフィックスコードの変換は驚くほど簡単です。また、Xcodeに統合された強力なグラフィックスパフォーマンスとデバッグツールは、ゲームを完全に最適化するために必要なすべてのガイダンスを提供します。
    CleanShot 2023-06-06 at 15.57.40.png

カメラとディスプレイ

今年、下記の強力なパフォーマンスの向上が図られました。

Zero shutter lag: シャッターが押された瞬間を正確にキャプチャします。
Overlapping captures: シャッターが急激に押されたときにカメラが画質を動的に調整します。
Deferred processing: Deep Fusionを含む高品質な画像をバックグラウンドで処理することが可能です。

これらの改善により、高画質な画像を撮影しながらも、iOSまたはiPadOSアプリでシャッターを押す間のショット・トゥ・ショット時間が最大で3倍速くなります。

そして今年の後半には、ボリュームボタンと上下ボタンでカメラのシャッターを切ることもできるようになる予定です。

ISO HDR API

AppleはHDR業界全体の取り組みを推進し、HDR写真のエンコードと表示に関する仕様を策定し、国際標準化機構で承認されました。
CleanShot 2023-06-06 at 16.05.18.png
そしてこれらの標準化されたHDRの機能がiOS、iPadOS、macOSのAPIとして提供され、数行のコードで対応する写真をアプリケーションに表示できるようになりました。

キャプチャから編集、共有まで、完全なHDRワークフローが可能になり、撮影者が体験したように、誰もがHDRの輝きを楽しむことができるようになります。
CleanShot 2023-06-06 at 16.04.48.png

Video conferencing

Appleはリアクション、ジェスチャー、プレゼンターのオーバーレイ効果のように、ビデオ照明と効果に投資し続けてきました。これらのエフェクトは、あなたが受け取るカメラフィードに組み込まれているので、あなたのアプリの中でだけ機能します。
CleanShot 2023-06-06 at 16.06.19.png

アプリは、これらのエフェクトが呼び出されたときに観察することができ、そのユーザーのタイルを宣伝して、リアクションしたことをみんなに見てもらうなど、追加のアクションを実行することができます。
CleanShot 2023-06-06 at 16.07.08.png

ScreenCaptureKit

画面共有とカメラ機能に多くの改良が加えられました。

新しいScreenCaptureKitのピッカーは、ユーザーがよりプライベートで安全な方法で、画面共有を開始するのをよりシンプルにするものです。
CleanShot 2023-06-06 at 16.09.39.png

また、ピッカーは、アプリが複数のウィンドウや複数のアプリを一度にキャプチャすることを容易にします。
CleanShot 2023-06-06 at 16.10.16.png

ユーザーは、今いるアプリケーションからすぐに共有を開始でき、
CleanShot 2023-06-06 at 16.11.04.png

新しいビデオエフェクトメニューで共有されるもののプレビューを見ることができるので、とても便利です。
CleanShot 2023-06-06 at 16.11.32.png

ScreenCaptureKitのもう一つの利点は、単一のウィンドウを共有する際に、より見栄えの良い画面共有のための高解像度で共有ができます。

外部カメラとの接続

iPadで外部カメラをサポートするようになりました。あらゆるUSBカメラを接続し、iPadアプリ内で使用することができるようになりました。
CleanShot 2023-06-06 at 16.12.54.png

tvOSにカメラとマイクの機能を追加しました。tvOSのContinuity Cameraを使えば、iPhoneやiPadを活用して、tvOSアプリにビデオとオーディオを初めて統合することができます。
CleanShot 2023-06-06 at 16.13.27.png

例えば、会議アプリケーションはCenter Stageを使うことで、家庭で一番大きなスクリーンでグループビデオ通話をよりダイナミックにすることができます。

Continuity Cameraのデモ

Continuity Cameraの活用例としてPartyCamという楽しいフィルターを使って自撮りするアプリでSwiftUIを使ったデモを紹介。

まず、Apple TVをデスティネーションとして追加します。
CleanShot 2023-06-06 at 16.14.31.png

次に、ピッカーを追加して、ユーザーがどの電話機から選べばよいかを知ることができるようにする必要があります。そして、ピッカーを提示するためのコードを追加します。
CleanShot 2023-06-06 at 16.16.16.png

そして、実行します。そして今度は、リモコンを手に取って写真を撮るだけです。
CleanShot 2023-06-06 at 16.16.46.png

Apple Watch (watchOS10)

Vertical TabView

Vertical TabViewではページサイズを変更することができ、貴重なコンテンツのためのスペースを犠牲にすることなく、アプリ内でスクロールするためのクラウンを有効に活用することができます。

source simulate
CleanShot 2023-06-06 at 16.17.51.png CleanShot 2023-06-06 at 16.18.53.gif

containerBackgroundモディファイア

新しいcontainerBackgroundモディファイアを使えば、ユーザーがアプリ内のどこにいるのかを理解しやすくしたり、データをより見やすくするために、読みやすいグラデーションフィルで色を使うことができます。

CleanShot 2023-06-06 at 16.20.35.png

tab1 tab2 tab3
CleanShot 2023-06-06 at 16.21.03.png CleanShot 2023-06-06 at 16.21.17.png CleanShot 2023-06-06 at 16.21.27.png

自動デザイン

画面いっぱいに広がるアプリのデザインでは、新しいToolbarItemの配置でコーナーを有効活用し、必要に応じて時間を自動的に中央に移動させることができます。

source preview
CleanShot 2023-06-06 at 16.22.14.png CleanShot 2023-06-06 at 16.22.23.png

NavigationSplitViewの改善

ソースリストとディテールビューの関連性が強いレイアウトでは、他のプラットフォームで使用するのと同じコードを使用して、Apple Watch上でNavigationSplitViewがこれまで以上に説得力を増しています。

source preview
CleanShot 2023-06-06 at 16.23.12.png CleanShot 2023-06-06 at 16.23.30.png

詳細ビューのピボットインとアウト

Apple Watchでの詳細ビューのピボットインとアウトは、SwiftUIの新しいインタラクティブなスプリングアニメーションを使用しています。
CleanShot 2023-06-06 at 16.24.23.gif

このアニメーションは、ユーザーの指の速度によって駆動されるビューのサイズと位置の両方をアニメーションさせるアニメーションプランのための12の別々のトラックで構成されています。もちろん、すべての主要なUIコンポーネントは、どんな背景でも読みやすいようにマテリアルトリートメントで更新されており、ハードウェアに合わせて自動的にサイズ調整されます。

すでにアプリにSwiftUIを採用している場合、watchOS 10 SDKでビルドすると、これらのアップデートが自動的に行われます。

watchOS 10でより快適にアプリを使うための編集のデモ

アプリを起動したときに、常にリストから選択するのではなく、プライマリー・ヤードの現在のステータスを確認したいと思います。
NavigationSplitViewは、ソースリストと詳細の関係が強いアプリに特化して設計されているので、NavigationStackをNavigationSplitViewに置き換えてみることにします。
CleanShot 2023-06-06 at 16.27.58.png
一覧はもはやアプリのエントリーポイントではないので、ナビゲーションタイトルを削除し、デフォルトで開くべき詳細ビューを表示することにします。ソースリストは詳細ビューの後ろに隠れるようになり、詳細に集中できるようになりました。
CleanShot 2023-06-06 at 16.28.37.png

しかし、詳細ビューのコードはかなり長いです。
CleanShot 2023-06-06 at 16.30.41.png

そこで、リストを縦長のTabViewに変換して、各セクションに別々のページを作成し、コンテンツを分割することにします。
CleanShot 2023-06-06 at 16.31.00.png

各ページはデフォルトで画面の高さになり、最後のセクションにはForEachループが含まれているので、それぞれの鳥が自分のページを持つことになります。
CleanShot 2023-06-06 at 16.31.30.png

むしろ、すべての鳥のリストを1つのタブに表示し、画面の高さを超えたらスクロールするようにしたいので、このForEachをListに変更し、スクロール可能なビューにすることにします。
CleanShot 2023-06-06 at 16.31.53.png

次に、タブを区別するために色を付けたいので、各タブに .containerBackground modifierを追加します。
CleanShot 2023-06-06 at 16.32.32.png

また、食べ物や水が少なくなったときにすぐに分かるように、「Sustenance」の背景をダイナミックなものにします。供給量に応じて、緑、黄、赤の3色になります。ライブプレビューで変更点を確認すると、背景色によってアプリ内の位置関係がわかり、食料や水の補給が必要なタイミングがわかりやすくなっていることがわかります。
CleanShot 2023-06-06 at 16.34.01.png
CleanShot 2023-06-06 at 16.34.11.png

最後のタブでは、画面の枠を越えてコンテンツをスクロールすることができ、
CleanShot 2023-06-06 at 16.34.48.png

「ソースリスト」ボタンをタップすれば、バックヤードのリストに到達できます。
CleanShot 2023-06-06 at 16.35.03.png

その他の追加機能

watchOS 10 には、AppIntents の関連性によって、ウィジェットが適切なタイミングでスマートスタックに移動できるようになる新しいシステム空間もあります。

CleanShot 2023-06-06 at 16.39.06.png

.containerBackground修飾子を使えば、ウィジェットを美しいカスタム背景で輝かせることができます。

ワークアウトアプリケーションを開発されている方は、アプリケーションからフィットネスプランを共有できる新しいカスタムワークアウトAPIや、ゴルフやテニスなどのスポーツのスイング解析を向上させるために、より忠実なモーションと加速度計データのキャプチャを可能にする新しいCoreMotion APIを使って、Apple Watchのフィットネストラッキング機能をユーザーに活用していただくことができます。
CleanShot 2023-06-06 at 16.40.23.png

また、CoreMotion APIは、ゴルフやテニスなどのスポーツのスイング解析を向上させるために、より忠実なモーションと加速度センサーのデータを取得できるようにします。
CleanShot 2023-06-06 at 16.40.46.png

アクセシビリティ

アニメーションや点滅する光に敏感なユーザーへのサポートの拡充のために2つのAPIを提供しました。

アニメーション画像の一時停止

SafariやメッセージなどのアニメーションGIFの動きを停止させます。

実装例として、SwiftUIのTimelineViewで一連の画像をアニメートしているとします。
新しい環境プロパティを使用して、ユーザーがアニメーション画像の一時停止を好むかどうかを理解し、もしそうなら、アニメーション画像を静止画像に置き換えて、その選択を尊重することができます。
image.png

Dim Flashing Lights

明るく点滅する光のシーケンスの間、ビデオの表示を自動的に暗くするものです。
AVFoundationのビデオレンダリングパイプラインに、点滅する要素を識別して暗くする新しいフェーズが追加されました。

アプリでメディアを再生するためにAVFoundationを使用している場合、この機能をサポートするための余分な作業は必要ありませんが、アプリがカスタムメディアプレーヤーを使用している場合、Dim Flashing Lights APIを使用して、点滅するビデオコンテンツを識別し、自動的に暗くすることができます。

Privacy

許可の拡充

カレンダーの追加アクセス許可

アプリでイベントを書き込むだけであればカレンダーへの読み取りアクセスは必要ありません。このような場合のために、新しい追加専用パーミッションを作成しました。これにより、必要なアクセス権を得ることができ、ユーザーは納得のいくプロンプトを得ることができます。
image.png

写真のアクセス許可の拡充

写真では、ユーザーがアプリに写真を提供する際に、共有する写真を選択するか、自分のライブラリ全体へのアクセスを提供するか、2つの選択肢を用意しました。
image.png

さらにアプリに埋め込むことができる新しいフォトピッカーを追加し、ユーザーはアプリの中から共有する写真を簡単に選択できるようにしました。
image.png

App Privacy

プライバシーマニフェスト

サードパーティーのSDKがどのようにデータを使用するかを理解するためのもの。
標準的なフォーマットで、アプリ内のサードパーティのコードのプライバシー慣行を概説するファイルです。
image.png

アプリを配布する準備をするとき、Xcodeは、あなたが使用しているすべてのサードパーティSDKにわたってすべてのマニフェストを1つの使いやすいレポートに結合します。
image.png

サードパーティーのSDKに署名を導入

アプリでサードパーティSDKの新しいバージョンを採用するとき、Xcodeは、それが同じ開発者によって署名されたことを検証し、より安心感を与えることができるようになりました。
image.png

サードパーティSDKのプライバシーマニフェストと署名により、ユーザーを保護し、データがどのように使用されるかを理解してもらうことがさらに容易になります。

Communication Safety

iOS 15では、メッセージにコミュニケーションセーフティ機能を導入し、Appleデバイスを使用する子どもたちをより安全に保護できるようになりました。
Sensitive Content Analysisフレームワークによって、Communication Safetyをプラットフォーム全体に導入できます。
image.png

このフレームワークは、わずか数行のコードで、ヌードを含む画像や動画を検出するのに役立ち、これは完全にデバイス上で行われます。

let sensitivityAnalyzer = SCSensitivityAnalyzer()
let analysisResult = try! await sensitivityAnalyzer.analyzeImage(at: imageURL)
// analysisResult.isSensitiveがtrueであればアプリの体験をカスタマイズする

このフレームワークは、画像や動画を完全にデバイス上で処理することで、ユーザーのプライバシーを保護します。
センシティブコンテンツ分析フレームワークは、ユーザーがコミュニケーションセーフティとセンシティブコンテンツ警告のどちらを有効にしているかを知らせてくれるので、どちらの機能が有効になっているかによって、アプリの体験をカスタマイズすることができます。
image.png

App Store (StoreKit)

SubscriptionStoreView

StoreKitを拡充してアプリの商品化UIを強化する新しいビューのコレクションを提供します。
image.png

ProductViewでは、App Store Connectで定義したデータを使って商品を表示することができます。アプリのルック&フィールに合うように簡単にカスタマイズできます。
image.png

SubscriptionStoreViewは、サブスクリプションのために作られたビューです。わずか1行のコードで、各レベルのサービスの説明、価格、期間がユーザーに明確に表示されます。
image.png

これらのビューは、iPhoneのためだけのものではありません。同じコードで、すべてのApple製デバイスのプラットフォームエクスペリエンスにマッチするビューが作成されます。しかも、Apple Watchのコンパクトなディスプレイに合わせて拡大縮小することもできます。
image.png

そしてもちろん、すべてのユーザーのためにアクセシビリティとローカライズを念頭に置いて作成されています。
image.png

SwiftUIを使ったSubscriptionStoreViewのデモ

Backyard Birds Passの定期購入の提供についてデモの紹介。

XcodeでSubscriptionStoreViewにいくつかの宣言を追加し、Backyard Birdsのルック&フィールに合わせます。マーケティングコンテンツをビューでカスタマイズし、コンテナの背景を追加し、購読オプションのスタイルを変更します。
image.png

さらに、シミュレーターで、ユーザーと同じ体験をすることもできます。
image.png

ここでは、オファーを選択し、購読をクリックし、購入を完了することができます。
image.png

これだけで、ユーザーが十分な情報を得た上で意思決定を行うために必要な情報をすべて表示する、カスタマイズされた購入体験を構築することができます。

SubscriptionStoreViewは、ユーザーの適格性を自動的に判断し、適切なオファーを表示することができます。新しいStoreKitビューは、アプリ内購入の商品化に最適な方法です。
image.png

SKAdNetworkの拡充

SKAdNetworkは、広告ネットワークがユーザーのプライバシーを守りながら、広告キャンペーンがアプリのダウンロードをどれだけ促進したかを測定するお手伝いをします。
SKAdNetwork 5では、リエンゲージメントを測定することができます。ユーザーがアプリをダウンロードした後のコンバージョン計測に加え、広告をタップしてアプリを開いた後のコンバージョン計測も可能になります。

バージョン5は、今年後半にリリースされるiOS向けリリースで利用可能になる予定です。

Xcode 15

コードの状況をみて、最も関連性の高い補完から始めることができます。
image.png
image.png

アセットカタログリソースのシンボルを自動的に生成するので、コード補完で表示され、コードで使用しやすくなります。これにより、タイプの安全性と、実行時に資産が利用できるという安心感が得られます。
image.png

プレビューは、swift macrosを使ってより使いやすくなりました。

before after
image.png image.png

異なるプラットフォームやデバイスでの作業がより簡単になりました。キャンバス上でそれらを選択できるので、あなたのビューがどこでも美しく見えることを確認できます。
image.png

すべてのUIフレームワークでプレビューを使用できるようになりました。SwiftUI、UIKIt、AppKitのいずれを使用している場合でも、コードのどこからでも一貫した体験でUIを反復することができます。
image.png

Xcodeにgitの機能が統合されました。diffを見たり、
image.png

diffのファイル一覧をみながら直接コミットなどをすることができます。
image.png

テストレポートの完全な再設計が含まれており、結果をよりよく理解し、行動を起こすための新しいツールを提供します。
image.png

同じアサーションメッセージを持つものなど、共通の失敗パターンを含むトップインサイトも表示できます。
image.png

UITestでは結果のスクリーンショットなども確認できます。テストが失敗するまでに何が起こったか確認することができます。
image.png

Xcode cloudのCI状況も確認できます。
image.png

Xcode Cloud

TestFlightに配布する際、テスターノートを作成して共有できるようになり、最新の改善点をすべてのユーザーに知らせることができるようになりました。
Xcode Cloudは、DeveloperIDで配布する際にmacOSの公証をサポートするので、ユーザーと共有する前に、アプリに悪意のあるコンポーネントがないか自動的にチェックすることができます。

Mac App Store

Mac App Storeでは、Xcodeのサイズが50%小さくなり、すべてのシミュレータがオンデマンドでダウンロードできるようになりました。

vision OS

Apple Vision Proに搭載されるOSでの開発についての紹介です。

Shared Space

image.png
デフォルトでは、アプリは共有スペースに起動します。
共有スペースは、Macのデスクトップ上の複数のアプリケーションと同じように、アプリケーションが並んで存在する場所です。ユーザーは、アプリを好きな場所に配置し直すことができます。

Window / Volume / Space

空間コンピューティングの基本的な要素であるWindowVolumeSpaceという空間コンピューティングの基本要素によって、没入感の連続に対応するアプリケーションを構築するための柔軟なツールセットが提供されます。

Window

image.png

visionOSでは、アプリは1つ以上のウィンドウを開くことができ、それはSwiftUIのシーンで、空間内の飛行機として動作します。
これらは従来のビューとコントロールを含むことができ、さらに、3DオブジェクトとRealityViewsをサポートし、3Dコンテンツが2Dコンテンツと一緒に座ることができます。

Volume

image.png
アプリはSwiftUIシーンでもある3次元ボリュームを作成し、ゲームボードや地球儀のような3Dオブジェクトを表示することができます。
ボリュームは、この空間の中を移動し、あらゆる角度から見ることができます。

Full Space

image.png

場合によっては、ユーザーがビデオを見たり、ゲームをしたり、プレゼンテーションのリハーサルをしたりするために、アプリの没入のレベルをよりコントロールしたいかもしれません。この場合は、専用のフルスペースを開き、アプリ、ウィンドウ、ボリューム、3Dオブジェクトだけをユーザーの視界に表示させることができます。

UIを構築するSDK

SwiftUI、RealityKit、ARKitは、visionOSのために拡張されました。
image.png

  • SwiftUIとUIKit: ユーザーインターフェイスを構築
  • RealityKit: 3Dコンテンツ、アニメーション、視覚効果を提示
  • ARKit: ユーザーの周りの空間を理解する

導入方法

Xcodeで、プロジェクトにvisionOSのデスティネーションを追加します。
image.png

後はビルドするだけ
image.png

目や手の入力用に調整された間隔を持つフルリサイズ可能なウィンドウ
image.png

カスタムコントロールのハイライト調整へのアクセスを持ってます。
image.png

visionOS固有のコードを追加して、アプリをウィンドウ、ボリューム、またはスペースのコレクションに拡張することができます。

拡張内容

SwiftUIでは、深度を追加したり、ウィンドウの中に3Dオブジェクトを追加したりできるようになりました。
iOSやMacOSでは、ビューを重ねるためにZStackを使うのが一般的ですが、visionOSではさらに進んで、奥行きで分離することができます。これにより、2次元のアプリに3次元の感覚を与えることができます。
image.png

新しいz-offsetビューモディファイアを使えば、UI要素に微妙な奥行きの変化を加えることができます。
image.png

オフセット値を高くすると、低い値を持つビューの前にビューが表示されます。
image.png

また、選択項目の詳細を表示する場合など、強調表示やモダリティの変更を示すために使用することができます。
image.png

さらにビューモディファイアを追加することで、幅、高さ、奥行きをより自由にコントロールすることができます。

Vision Proでは、ジェスチャーでさえも、追加されたスペースを意識しています。私たちは皆、画面上でオブジェクトをドラッグすることに慣れています。物理的な空間のどこでもオブジェクトを動かしたり回転させたりできるようになるでしょう。
CleanShot 2023-06-07 at 09.46.56.gif

SwiftUIでボリュームを作成することもできます。アプリのウィンドウと一緒に存在することができ、共有スペースで実行されているとき、他のアプリと並んで座っています。
そして、SwiftUIのウィンドウとボリュームは、ユーザーの部屋のどこにでも3DオブジェクトとSwiftUIエレメントを配置できるFull Spaceの中にも入れることができます。

UI拡張

SwiftUIはRealityKitを通してレンダリングするようになったので、SwiftUIとRealityKitのAPIを簡単に混ぜることができるようになりました。オーナメント、マテリアル、ホバーエフェクトなどのUI拡張を利用することができます。

オーナメント

オーナメントを使えば、ウィンドウやボリュームのエッジにUIコンポーネントを貼り付けることができます。ツールバーやメニューのようなものに最適です。
image.png

ホバーエフェクト

ホバーエフェクトは、ユーザーの視線に反応してUI要素を強調表示します。システムコントロールは自動的にこれらの効果を得ますが、カスタムコントロールにハイライトやグローを表示するかどうかは、オプションで決めることができます。
image.png

マテリアル

マテリアルは、ユーザーを取り巻く世界に適応します。ダイナミックなぼかしと鮮やかさで、どんな状況でもアプリを読みやすくします。
image.png

UIKit on visionOS

UIKitで構築された既存のアプリもvisionOS用に再コンパイルすることができ、オーナメント、ホバーエフェクト、マテリアル、ネイティブのルック&フィールにアクセスすることができます。

RealityKit on visionOS

恐竜のような3Dシーンへのポータルを作成する機能や、驚くほどシャープなテキストをレンダリングして快適に読めるようにする機能、魅力的な視覚効果を生み出すカスタマイズ可能なマテリアルシステムなど、大きな新機能もあります。

Dynamic foveation

Apple Vision Proでは、Dynamic foveationと呼ばれる技術を使うことで、レンダリングがさらに効率化されています。
RealityKitはアイトラッキングを活用して、ユーザーが注目している領域を選択的に非常に高い忠実度でレンダリングするため、周辺部のコンテンツのレンダリングコストを削減し、アプリケーションがデバイスの処理能力を最大限に発揮できるようにします。
CleanShot 2023-06-07 at 09.54.19.gif

RealityKitは、反射率や金属性などの物理特性を指定することで、3Dモデルを驚くほどフォトリアリスティックにレンダリングします。デフォルトでは、RealityKitは、その照明が物理的な部屋の照明条件に接続されるように仮想コンテンツをレンダリングします。

before after
image.png image.png

創造的な意図に基づいてリアルさをカスタマイズしたり、さらに拡張したい場合は、画像ベースの照明アセット(IBL)を提供して見た目を個性的にすることができます。

Material X

RealityKitは、マテリアルのオーサリングに、映画、視覚効果、エンターテインメント、ゲームの大手企業が使用するサーフェスおよびジオメトリシェーダーを指定するためのオープンスタンダードであるMaterialXを採用しました。
image.png

シェーダーを書くのが非常に簡単になりました。MaterialXでは、シェーディングプロパティを定義することで、個々のマテリアルの外観をデザインし、迅速に反復することができます。
マテリアルのリポジトリがあり、そこから選ぶことができます。
image.png

また、HoudiniやMayaのような便利なツールを使って、独自のカスタムシェーダーを作成することができます。

RealityView

RealityKitはRealityViewと呼ばれる新しいSwiftUIビューを提供します。
RealityViewは、ウィンドウ、ボリューム、スペース内で使用することができ、あなたがコントロールするシーン内の好きな場所に3Dコンテンツを配置することができます。
image.png

また、3Dコンテンツに2DのSwiftUIビューを埋め込むことができるAttachmentsもサポートしています。
image.png

ARKit on visionOS

visionOS上のリアルタイム・アルゴリズムをホストし、コア・システム機能のホストをパワーアップさせます。これらのアルゴリズムは常に実行されているため、アプリがどのように構築されても、共有スペースでARKitの恩恵を自動的に受けることができます。

パーシステンスとワールドマッピングは、システムによって処理されます。

セグメンテーション、マット、環境ライティングは、空間全体に自動的に適用されます。

ユーザーの許可があれば、ARKitの機能をあなたのFull Spaceアプリで直接利用できるようになります。
Full Space内では、iOSのARKitと同じAnchorの概念を用いたARKitの平面推定、シーン再構成、画像アンカリング、ワールドトラッキングを活用し、アプリ内の部屋でリアルに対話できます。これにより、既存のARKitアプリをvisionOSに簡単に移行することができます。
さらに、visionOSでは、平面推定、シーン再構成、画像アンカリング、ワールドトラッキングに加えて、Skeletal Hand Trackingにもアクセスできるようになりました。ハンドトラッキングを使用して、アプリ体験のためのカスタムジェスチャーを作成したり、ユーザーの手をデジタル情報で補強したりすることもできます。
CleanShot 2023-06-07 at 10.04.57.gif

ARKitは、iOSで導入されたのと同じスケルタルモデルで、関節の位置と向きを提供します。

アクセシビリティ on visionOS

Apple Vision Proでは、身体や運動に障害のあるユーザーは、目、声、またはその両方を組み合わせて、デバイスと完全に対話することができます。また、Vision Proを操作するための代替ポインターとして、人差し指、手首、または頭で選択することもできます。
visionOSでは、当社の他のプラットフォームで長年使用してきたのと同じ手法で、アプリケーションをアクセシブルにすることができます。

アクセシビリティ・インスペクターは、visionOSアプリケーションのアクセシビリティ問題を分析・報告し、よりアクセシブルにする方法を提案します。
image.png

オブジェクトの物理的な外観などの情報を伝えるラベルや説明を追加することで、目の見えないユーザーや弱視のユーザーに対して、VoiceOverがアプリケーション内のオブジェクトを説明できるようにすることができます。
image.png

Xcodeでの開発

Xcode Previewsを使えば、エディタを離れることなく、外観を素早く反復することができます。
image.png

アプリ全体のテストを開始する段階になったら、シミュレータに移動して、アプリを実行し、デバッグするための強力な環境を提供します。
シミュレーターでは、キーボード、トラックパッド、互換性のあるゲームコントローラーを使って、シーンを移動したり、見回したりすることができます。また、システムのジェスチャーをシミュレートすることで、アプリと対話することができます。
CleanShot 2023-06-07 at 11 02 37

また、シミュレーターには、昼と夜の照明条件を備えた3種類のシミュレーションシーンが用意されており、アプリを視覚化するのに役立ちます。
image.png
image.png

Vision Proを使った開発では、デバイス上でアプリをビルドして実行し、動作を確認することになります。

Mac Virtual Display

Macの高忠実度の4Kバーチャルモニターを、見るだけでVision Proに取り込むことができます。
image.png

デバイスの中からMacの全機能を使うことができ、その中にはXcodeも含まれています。コーディング、テスト、デバッグをVision Pro上で行いながら、中断や文脈の喪失が一切ない、エンドツーエンドの素晴らしい開発体験ができます。
image.png

Xcodeは、あなたの3Dコンテンツに関連する衝突、オクルージョン、およびシーンの理解を調べるのに役立つ実用的なデバッグの視覚化を備えています。これらのビジュアライゼーションは、シミュレータとVision Proの両方で機能します。
image

Reality Composer Pro

Reality Composer Proは、visionOSアプリ用の3Dコンテンツをプレビューして準備するためのアプリケーションです。
image
3Dモデル、アニメーション、画像、サウンドなどのアセットをインポートして整理することができます。
image
Xcode のビルドプロセスと緊密に統合され、Vision Pro で使用するためにアセットを最適化します。
コンテンツをVision Proに送信して、プレビュー、サイズ調整、回転を簡単に行うことができます。いつでも新しい変更を加えることができ、コードを入力する前にコンテンツの外観を確認することができます。

Reality Composer Proを使った3Dコンテンツの更新デモ

3Dモデリングアプリケーションで作成した衛星モデルと画像をインポートします。
image

このモデルは、細部まで作りこまれていますが、マテリアルはありません。Reality Composer Proでカスタムマテリアルを作成し、
image

それをカスタマイズできるShader Graphにて、簡単な画像や関数ノードを追加して、ノーコードでオブジェクトの見た目を変えられます。
image

また、シェーダーを手打ちすることによるコンパイラーエラーも発生しないので、いろいろ試してすぐに結果を見ることができます。他のノードについても、これを繰り返していきます。
image

いつでも、Vision Pro上で自分の作品をプレビューすることができます。スケールを変えたり、動かしたり、回転させたりして、思い通りに見えるか、感じられるかを確認することができるのです。
CleanShot 2023-06-07 at 10 25 16

Xcodeに戻り、変更がプロジェクトに反映され、Xcode PreviewsやSimulatorで使用する準備が整ったところで、このように、コードを読み込んでアプリで使用することができます。
image

Reality Composer Proを使えば、VisionOSの開発プロセスに、Xcodeと並んで動作する強力な新しいツールが加わり、3Dコンテンツのプレビューと準備が、コードの構築と実行と同じくらい簡単にできるようになりました。

VisionProアプリの配信

アプリのベータテストの準備ができたら、TestFlightは最初からVision Proで使用できるようになります。
image

App Store Connect、Xcode、またはXcode Cloudを通じて配信するのと同じように、新しいビルドをTestFlightに提出すると、テスターはそれをインストールして、ネイティブのTestFlightアプリケーションから直接貴重なフィードバックを提供することができます。
image

テスターは、Vision Pro上で互換性のあるiPadおよびiPhoneアプリケーションのベータ版ビルドにアクセスすることができます。

Unity対応

アプリをVision Proで簡単に使えるようにするために、AppleとUnityは深く協力し、UnityのリアルタイムエンジンをRealityKitの上に重ね、開発ツールがvisionOSをターゲットにできるようにしました。
つまり、Unityで作成されたアプリは、Shared Spaceで他のvisionOSアプリと共存し、Apple Vision Proのユニークな利点を最大限に活用することができます。
image

知っておくべきvisionOSの基本的な機能

Vision Pro用のアプリケーションを作成するために使用するフレームワークは、2つの目標を念頭に置いて設計されています。それは、最小限の労力でプラットフォームの強力なハードウェアとソフトウェアを活用できるようにすること、そしてユーザーのプライバシーを保護することです。

周辺環境

visionOSは、ユーザーの周囲の3Dモデルを構築し、リアルな照明と影を実現します。その結果、アプリはカメラデータにアクセスすることなく、周囲の世界に自然に溶け込むことができます。
image

空間オーディオ

visionOSは同じ3Dモデルを使って、アプリのための次世代の空間オーディオを実現します。現実の世界では、音は壁や家具にぶつかって跳ね返り、人の耳に届くまで、空間内や周囲で反響します。アプリのバーチャルサウンドも、これと同じように振る舞う必要があります。
そのためには、ユーザーの周囲を高度に理解する必要があります。visionOSのPHASE空間オーディオエンジンは、音響センシングと3Dシーン理解を融合させ、空間の音波特性の詳細なモデルを作成します。音源とユーザーが環境を移動すると、PHASEはリアルタイムでオーディオレイトレースシミュレーションを更新します。
image

このモデルは、Appleのパーソナライズド・スペーシャル・オーディオ・テクノロジーと組み合わされ、一人ひとりとその周囲の環境に合わせた体験を自動的に提供します。
RealityKitを使えば、どこから音を出すかを決めるだけで、visionOSがそれを自然に現実の世界に混ぜ込んでくれます。

ユーザ入力

visionOSのユーザー入力は自動的に機能し、デザインによってプライベートなものとなっています。
SwiftUIやRealityKitを使って作られたUI要素には、ホバーエフェクトが自動的にレンダリングされます。ユーザーがボタンを見た場合、タップする前にハイライトされます。
マウスのクリックやiPhoneのタップのように、ユーザーが指をタップすると、あなたのアプリに選択したことが通知されます。ユーザーがタップする前にどこを見ているかを知る必要がなく、ユーザーは必要な視覚的フィードバックを得、あなたは期待通りのインタラクションを受け取ることができます。
CleanShot 2023-06-07 at 10 32 36

Sharing and collaboration

SharePlayを使えば、次世代の共有体験が可能になります。
あなたのアプリケーションがGroupActivities APIでSharePlayを採用すると、各ウィンドウの共有コントロールに、通話中の全員にあなたのアプリケーションを起動させるオプションが追加されます。これにより、真の意味での共有体験に、リアルタイムで一緒に参加することができます。
image

FaceTime通話中のVision Proユーザーは、高度な機械学習技術によって作成された自然な表現であるペルソナとして他の参加者に表示され、顔や手の動きとダイナミックにマッチします。
image

AppleはVision ProでFaceTimeを次のレベルに引き上げ、どこにいるユーザーでも、実際に部屋にいるような対話ができるようにしたいと考えています。
空間ペルソナによって、Vision Proのユーザーは、慣れ親しんだFaceTimeのタイルから抜け出して、同じ物理的な空間に集まっているような臨場感を味わうことができます。

Getting start visonOS

visionOS SDK、アップデートされたXcodeとSimulator、Reality Composer Proは、今月末に利用可能になる予定です。
また、豊富な技術資料、新しいデザインキットやツール、visionOSのための最新のヒューマンインターフェースガイドラインにもアクセスすることができます。

この夏、Apple Vision Pro Developer Labsを開設し、Vision Proのハードウェアでアプリをテストできるようにします。Vision Proがお客様にリリースされる前に、ハンズオンのサポートと体験のプレビューを行うことができます。このラボは、ここクパチーノにあるデベロッパーセンターを含む、世界中のいくつかの場所(London, Munich, Shanghai, Singapore, Tokyo, Cupatino)に設置される予定です。

そして、どこにいても、あなたのアプリとVision Proの互換性を評価するリクエストを提出することができます。

まとめ

ざっくりまとめると、

  • xcodeがより使いやすくなった
  • WidgetKitでアプリを表示する場所を増やした
  • 各種アクセシビリティの改善
  • Continuity Cameraを拡張
  • watchOSの新しいデザインを作れるようになった
  • SwiftではMacrosとSwift Dataが大きく強化
  • Xcode Previewsが大きくアップグレード
  • visionOSの追加と、それに伴う各種フレームワークの強化

今年は新デバイスのVision Proがリリースされたことによって焦点はおもにvisionOSに当たっていたと思います。
しかし、細かいところにも改善が加わってより開発体験もユーザ体験も向上していることがわかる年でした。

個人的にはStoreKitがかなり使いやすくなって課金実装しやすくなったのが好印象でした。

最後に、スノボの楽しく滑るコツを掴める cotsume というアプリを作ってます!よかったらDLしてみてね!

また、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!

他にもCameconOffcha、問い合わせ対応が簡単にできるCSmart、フリーランスのコミュニティのNextFreelanceといったサービスも作ってるのでよかったら使ってね!

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!

47
31
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?