[WWDC23][概要] Platforms State of Union

WWDC23で発表される機能の概要を説明したビデオ「Platforms State of the Union」のまとめ記事になります。皆様のご参考になれば幸いです。

https://developer.apple.com/videos/play/wwdc2023/102/

今年は（韓国語はあるのに）日本語字幕がなかったけど、Chaptersが追加されてぱっと見で概要が分かるようになったは良かった。

# Swift, SwiftUI, SwiftData

## Swift

### Swift Macros

1. **Swift Macros**: Swift Macrosは、Swift 言語の一部として新たに導入された機能です。これにより、API の使用が容易になり、その理解が簡単になります。
2. **マクロの機能**: マクロは、コードの構造を使用して、プロジェクトで新しく生成されるコードをアノテーションするものです。
3. **マクロの配置**: マクロはコードに属性として付加することも、ハッシュ記号を付けて独立させることも可能です。
4. **APIとマクロの関係**: マクロを使用すると、API が言語の一部のように感じられ、注釈だけで新しい API の使用を開始する方法が増えます。
5. **Xcodeとマクロ**: マクロは Xcode で有効化され、生成されたコードはプロジェクトの一部のように扱われます。
6. **マクロのコンパイル時の機能**: マクロはコンパイル時に特定のチェックを行い、エラーに対してカスタムフィードバックを提供することが可能です。
7. **"添付マクロ"の特性**: マクロには "添付マクロ"という形式があり、これを使って既存のコードに新しい機能を追加できます。
8. **マクロを用いたSwiftコードの拡張**: マクロは Swift コードを拡張するのに役立ち、独自のマクロを作成して特定の機能を追加することが可能です。
9. **マクロとSwiftのオープンソース性**: Swift はオープンソースであり、開発者はマクロを使用して新たな言語機能を追加できます。
10. **マクロの共有**: マクロは Swift パッケージを通じて他のユーザーと共有することができます。

### 相互運用性を C++ に拡張

1. Swift はその相互運用性を C++ に拡張。
2. Swift-C++ の相互運用性により、中間ブリッジ層なしで同じプロジェクト内で両方の言語を使用できます。

## SwiftUI

1. **新機能**: 今年のリリースでは、SwiftUIの新機能が追加され、円グラフの新しいサポート、選択可能なSwift Chart、新しいインスペクターAPI、オーバーレイ、ルックアラウンドなどが含まれている。
2. **アニメーションの改善**: これらの改善の多くは、アニメーションの改善に焦点を当てている。SwiftUIはジェスチャの速度をアニメーションに自動的に転送し、スムーズな移行を提供する機能を備えている。SwiftUIのアニメーションはデフォルトでスプリングベースであり、durationとbounceの2つのパラメータだけで設定できる。
3. **SFシンボル**: SwiftUIはSFシンボルの新しいアニメーション効果を利用可能。
4. **AnimationPhase**: 数行のコードでマルチパートの洗練されたアニメーションを構築することができる。
5. **キーフレーミングのサポート**: これにより、新しいSwiftUIベースのMapKit APIのプロパティなど、任意の物をアニメートできます。
6. **Observableマクロ**: 新しいObservableマクロがモデルをSwiftUIに公開する際のコードを簡素化します。

## SwiftData

1. **Core Data**: Core DataはObjective-Cの時代の設計であり、Swiftが提供する全ての機能を完全に活用するものではありませんでした。
2. **SwiftData**: Core Dataの持続性レイヤーをベースにしたデータモデリングと管理のためのフレームワークで、Swiftのために完全に再設計されたAPIです。
3. **Model**: SwiftDataはSwiftの新しいマクロシステムを使用して、ストリームライン化されたAPIを提供します。クラスを@Modelマクロで注釈するだけで、持続性、iCloud同期、元に戻す、やり直すなどが自動的に有効になります。
4. **Query**: SwiftDataをSwiftUIと統合することは非常に簡単です。SwiftDataがデータを保持し、@Queryによってビューに配信します。

# WidgetKit, App Intents, TipKit, AirDrop

## WidgetKit

1. **iOS 17対応**: iOS 17へのアップデートにより、既存のウィジェットがStandByモードのiPhone上で美しく見えるように改良されました。また、iPadのロック画面やmacOS Sonomaのデスクトップ上でも利用可能になりました。
2. **ウィジェットのインタラクティビティ**: ユーザーが一回のタップで簡単な操作（リマインダーの確認など）をウィジェットから直接行えるようになりました。
3. **SwiftUIベースのアーキテクチャ**: これによりウィジェットのコードが非同期に実行され、生成されたコンテンツがアーカイブに保存されます。また、ユーザーがボタンをタップすると、その拡張機能が再度実行されてUIを更新します。
4. **既存ウィジェットのアップデート**: ウィジェットの背景を特定し、WidgetKitが提供するデフォルトのパディングを使用するように更新するだけで簡単に準備ができます。
5. **ウィジェットのカスタマイズ**: SwiftUIの遷移APIを利用して、ウィジェットの遷移アニメーションをカスタマイズできます。
6. **ウィジェットへのボタン追加**: ウィジェットにボタンを追加し、App Intentを関連付けることでウィジェットから直接アプリを操作できるようになりました。

## App Intents

1. App Intents を使用すると、アプリの機能がさらにシームレスにシステムに統合されます。
2. 今後は、インテントをアプリ ショートカットでラップすると、Spotlight の結果でアプリ アイコンのすぐ隣に表示され、よりリッチでインタラクティブなプレゼンテーションが表示されます。
3. WidgetKit と App Intents を使用すると、ユーザーはまったく新しい方法でアプリの機能にアクセスできます。

## TipKit

1. TipKit を使用すると、アプリ内で美しいヒントを直接表示できます。
2. テンプレートをカスタマイズし、ターゲティングを追加するだけで、現在のコンテキストに関連する機能についてユーザーを教育できます。
3. また、全体的な頻度を管理して、ユーザーが別のデバイスで見た場合でも、すでに見たヒントが表示されないようにすることもできます。

## AirDrop

1. AirDrop を使用すると、ユーザーが近くにいるユーザーとコンテンツを共有するのがさらに便利になります。
2. iOS 17 では、ユーザーは共有シートをスキップして、近くにある別のデバイスにコンテンツをすぐに送信できます。

# Gaming, Camera, Video conferencing, watchOS

## **Game ModeとGame Porting Toolkit**

1. macOS SonomaのGame ModeとGame Porting Toolkitを使用すると、Windowsやゲームコンソール向けのゲームをMacに簡単に移植できます。

## Camera

1. **Cameraの改善**：AVCaptureはパフォーマンスが大幅に向上します。
2. **HDRの標準化**：新しいAPIを通じてHDR写真を簡単に表示できるようになりました。

## Video conferenceing

1. **Videoの改善**：新しい反応、ジェスチャー、プレゼンターオーバーレイエフェクトなど、ビデオ照明とエフェクトが改善されました。
2. **ScreenCaptureKitの改善**：ScreenCaptureKitにより、より簡単にスクリーンシェアを開始したり、複数のウィンドウやアプリを一度にキャプチャしたりすることが可能になりました。
3. **外部カメラのサポート**：iPadはUSBカメラを使用できるようになりました。
4. **tvOSへのカメラとマイク機能の追加**：tvOSに新たにカメラとマイクの機能が追加され、Continuity Cameraを利用してiPhoneやiPadからビデオやオーディオをtvOSアプリに統合できるようになりました。
5. **Center Stageの活用**：ビデオ通話アプリでは、Center Stageを使って大画面のテレビでよりダイナミックなグループビデオ通話を可能にし、リビングルームをステージにすることができます。
6. **ゲームの改善**：ゲームはカメラとオーディオフィードを直接アクションに組み込むことができ、ポートレートモードや他のエフェクトを適用しながらビデオをストリームしたり録画したりすることができます。

## watchOS 10

1. watchOS 10が大幅にデザインをリフレッシュ。
2. watchOS 10ではページネーションに焦点が当てられており、Vertical TabViewsは可変のページサイズを許容し、アプリ内のスクロールに対してクラウンをより有効に使用することを可能にします。
3. **containerBackground修飾子**: 新しいcontainerBackground修飾子を使用して色を使用し、グラデーションを用いて読みやすさを向上させることで、ユーザーがあなたのアプリ内でどこにいるのかを理解するのを助けるか、データをよりひと目でわかるようにすることができます。
4. **ToolbarItem**: 新しいToolbarItemは、コーナーをより有効に使用し、必要に応じて時間を自動的に中央にシフトすることができます。
5. **Custom Workout APIとCoreMotion API**: フィットネストラッキングの能力をユーザーが活用できるようになります。これにより、アプリからフィットネスプランを共有したり、ゴルフやテニスのようなスポーツのスイング分析を改善するためのより高精度なモーションと加速度計データのキャプチャを可能にします。

# Accessibility, Privacy, App Store

## Accessibility

1. **Pause Animated Images**: SwiftUIのTimelineViewを使って一連の画像をアニメーションする場合、新たな環境プロパティを使用して、ユーザーがアニメーション画像を一時停止することを好むかどうかを理解し、もし好むのであれば、アニメーション画像を静止画像に置き換えてユーザーの選択を尊重することができます。
2. **Dim Flashing Lights API**: 薄暗く点滅するライトで、一連の明るいライトの点滅中にビデオの表示を自動的に暗くします。
3. これらの機能は、SwiftUIやAVFoundationなどのフレームワークに組み込まれており、独自のアプリにも簡単に追加できる。
4. また、新しいプラットフォームであるvisionOSも、アクセシビリティを初めから組み込むことで、すべてのユーザーに対応できるように設計されている。

## Privacy

1. **カレンダーの書き込み専用API**: カレンダーの書き込み専用APIが追加。
2. **新しいフォトピッカー**: アプリ内で写真を選択するための新しいフォトピッカーが追加。
3. **プライバシーマニフェスト**: 新しい「プライバシーマニフェスト」は、サードパーティのSDKがユーザーデータをどのように使用しているかを理解し、それをApp Store Connectでのラベル作成に活用できるようにします。
4. **Communication SafetyとSensitive Content Warning**: 2つの新機能を通じて、子どもたちの安全を保護します。

## App Store

### StoreKit

1. StoreKitの新しいビューを使って、ユーザーフレンドリーな購入体験を作成できます。
2. **SubscriptionStoreView**: ユーザーの購入履歴やサブスクリプションの状態に基づいて、適切なオファーを自動的に表示します。

### SKAdNetwork

1. SKAdNetworkは広告キャンペーンがアプリのダウンロードにどれだけ効果的かを計測します。プライバシーを保護しながら、広告があなたのアプリをユーザーにどのように見つけさせるかを理解するのに役立ちます。
2. **SKAdNetwork 5**: SKAdNetwork 5では、ユーザーが広告をタップしてアプリを開いた後のコンバージョンも測定できるようになります。

# Xcode15

1. **コード補完**: 新しいXcode 15にはコード補完があり、コードをより早く、より少ない間違いで書くのに役立ちます。
2. **プレビュー**: SwiftUIのプレビューはさらに使いやすくなりました。
3. **git staging**: Xcode 15にgit stagingが直接統合。
4. **テスト**: Xcode 15ではテスト結果をよりよく理解し、行動を起こすための新しいツールが提供されます。
5. **リンカー**: 新しいリンカーはリンク速度を大幅に向上させ、デバッグバイナリのサイズを最大30%削減します。
6. **バイナリサイズ**: XcodeはMac App Storeで50%小さくなり、すべてのシミュレーターは要求に応じてダウンロード可能になりました。

# visionOS

## Apple Vision Pro

1. Apple Vision Proは、空間コンピューティングの新しい旅を開始し、接続性、生産性、エンターテイメントの限界を押し広げます。
2. 開発者が既に熟知しているテクノロジー（SwiftUI、RealityKit、ARKit）を使用し、これらはvisionOSのために拡張されています。
3. アプリはユーザーの空間と相互作用し、その部屋とシームレスに融合します。
4. アプリは3Dで存在する必要があり、開発者が行う決定に情報を提供します。
5. デフォルトでは、アプリは共有スペースに起動し、そこで並列に存在できます。
6. アプリはウィンドウを開き、これらはSwiftUIのシーンであり、空間内の平面として振る舞います。これらは従来のビューやコントロールを含むことができ、3DオブジェクトとRealityViewsをサポートします。
7. アプリは3Dボリュームを作成し、全角度から見ることができる3Dオブジェクトを展示できます。
8. アプリは、専用のフルスペースを開き、没入型の体験を提供できます。
9. 空間コンピューティングの基礎要素はウィンドウ、ボリューム、スペースです。

## visionOS

1. Vision Proは、既存のiPadおよびiPhoneアプリを単一のスケーラブルな2Dウィンドウとしてサポートします。
2. visionOSはiPadOSとiOSに似ており、SwiftUI、UIKit、RealityKit、ARKitなどの同じ基本的なフレームワークを多く含んでいます。
3. Vision Proにアプリを持ち込むには、XcodeでプロジェクトにvisionOSのデスティネーションを追加します。これにより、アプリは自動的に目と手の入力にチューニングされたリサイズ可能なウィンドウなどの改善を取得します。
4. その後、ウィンドウ、ボリューム、スペースのコレクションにアプリを展開するためのvisionOS固有のコードを追加できます。

## SwiftUI

1. visionOSでは、ZStackを使用してビューをレイヤリングでき、深度でそれらを分離することで2次元アプリに3次元感を与えます。
2. 新しいz-offsetビューモディファイアを使用して、UI要素に深度の変更を加えることができます。
3. 物理的な空間の任意の場所にオブジェクトを移動または回転させることができます。
4. SwiftUIを使用してボリュームを作成し、ユーザーの部屋の任意の場所に3DオブジェクトとSwiftUI要素を配置できます。
5. SwiftUIとRealityKitのAPIを混在させることが容易になります。
6. ornaments、materials、hover effectsなどを利用できます。
7. UIKitで作成された既存のアプリもvisionOSに再コンパイルでき、ornaments、hover effects、materials、およびネイティブのルック＆フィールにアクセスできます。

## RealityKit

1. RealityKitとSwiftUIは深く統合されています。
2. 3DコンテンツはSwiftUIのビューと状態にバインドでき、2Dと3Dの視覚要素をシームレスに結びつけます。
3. RealityKitは自動的に物理的な照明条件に適応し、床やテーブルに影を落とすことで、アプリが部屋に存在するように見せます。

## ARKit

1. ARKitはユーザーの周囲の空間を理解し、アプリコンテンツが部屋と相互作用できるようにします。
2. ARKitは、visionOS上のリアルタイムアルゴリズムをホストしています。これらのアルゴリズムは常に動作しているため、あなたのアプリはどのように構築されているかに関わらず、Shared Space内で自動的にARKitの利点を享受できます。
3. Persistence（永続性）とworld mapping（ワールドマッピング）はシステムによって処理されます。分割、マット処理、環境照明は全体のスペースに自動的に適用されます。ユーザーの許可を得ることで、ARKitの機能を直接あなたのFull Spaceアプリに提供することが可能です。
4. Full Space内では、あなたのアプリはARKitのPlane Estimation（平面推定）、Scene Reconstruction（シーン再構成）、Image Anchoring（画像アンカリング）、World Tracking（ワールドトラッキング）を活用して部屋とリアルに相互作用することができます。これらはiOS上のARKitのAnchor概念と同様です。これにより、既存のARKitアプリをvisionOSに移行することが容易になります。
5. visionOSでは、さらにSkeletal Hand Tracking（骨格手追跡）にもアクセスできます。これを使用して、あなたのアプリ体験のためのカスタムジェスチャを作成したり、ユーザーの手にデジタル情報を追加したりすることができます。ARKitはiOSで導入された骨格モデルと同じ方法で関節の位置と方向を提供します。

## Xcode

1. XcodeはVision Proの開発体験の中心で、既存のプロジェクトにvisionOSのデスティネーションを追加することができます。
2. Xcode Previewsで2Dと3Dのコンテンツの外観を確認できます。
3. Mac Virtual Displayは、Macの4KバーチャルモニターをVision Proに取り込む機能で、Macの全機能をVision Pro内から使用できます。
4. Xcodeは3Dコンテンツと実際の世界との関係の詳細を調査するためのデバッグ視覚化を提供します。
5. Reality Composer Proは、visionOSアプリの3Dコンテンツをプレビューし、準備するためのアプリケーションです。

## visionOS の基本的な機能

1. visionOSの基本的な機能として、強力なハードウェアとソフトウェアを最小限の労力で活用できるようにし、ユーザーのプライバシーを保護するために設計されたフレームワークを使用してVision Proのアプリを作成できます。
2. visionOSはユーザーの周围の3Dモデルを作成し、現実的な照明と影を可能にします。その結果、アプリはカメラデータにアクセスすることなく、自然に周围の世界に溶け込むことができます。
3. visionOSを使用すると、次世代の空間オーディオも利用可能になります。
4. ユーザーとの共有や協力作業はVision Pro体験の中心的な部分です。macOSと同じように、Vision ProのユーザーはFaceTime通話中に他のユーザーと任意のアプリウィンドウを共有できます。

# Conclusion

1. **今月後半に利用可能**: visionOS SDK、更新版のXcodeとシミュレータ、Reality Composer Proが今月後半に利用可能。
2. **Apple Vision Pro Developer Labs**: 夏には、Apple Vision Pro Developer Labsを立ち上げる予定。これらのラボは世界のいくつかの場所、特にクパチーノの開発センターに設置されます。