[WWDC24][概要] Platforms State of Union


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

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

https://www.youtube.com/watch?v=YJZ5YcMsgD4

# Apple Intelligence
- Apple Intelligenceは、Appleのプラットフォームに強力な生成モデルをもたらすパーソナル人工知能システム
- iOS、iPadOS、macOSに統合され、言語と画像の理解と生成、ユーザー操作の支援を行う強力な新機能を提供
- すべてはユーザーのパーソナルコンテキストの認識に基づいており、プライバシーを考慮して一から構築

![Apple Intelligence](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/bf39ce49-7a27-c915-6262-9504b77aed2a.png)

## Apple Intelligenceの主な特徴
- オンデバイス処理: Appleシリコンを活用したオンデバイスの機械学習タスクにより、低遅延、優れたユーザー体験、プライバシー保護を実現
- 基盤モデル: 高性能な大規模言語モデルをベースに、テキスト要約、校正、返信メール作成などのタスクに特化したモデルにファインチューニング
- アダプタ: コモンベースの基盤モデルに重ねられたモデル重みの小さなコレクションにより最適化
- モデル圧縮: 最先端の量子化技術により、モデルサイズを縮小しながら品質を維持
- 推論の最適化: プロンプトの処理と反応の生成を最短にするために最適化
- 画像生成: 様々なスタイルとGenmojiのアダプタを使用した拡散モデルにより、画像生成が可能
- Private Cloud Compute: より大きな基盤モデルを利用でき、プライバシーを保護するために再設計されたApple専用サーバ
## XcodeにおけるApple Intelligence
- Swift Assist: Appleの基盤モデルと専門的なコーディングモデルを活用し、コード補完などの機能を強化
- Code Completion: AppleシリコンとmacOS Sequoiaの機械学習の強化により、プロジェクトシンボルに基づいたコード補完
- プライバシーとセキュリティ: ユーザーのコードはサーバーに保存されず、リクエスト処理のみ使用。モデルのトレーニングにユーザーのコードは使用しない
## ユーザーメリット
- アプリに強力な生成AI機能を統合
- ユーザーエクスペリエンスをパーソナライズ
- ユーザーのプライバシーを保護

# Generative Tools
## Writing Tools
- 標準のUIフレームワークを使っていれば、自動でWriting Toolsを使えるようになる
- TextViewデリゲートAPIを使うとWriting Toolsをカスタマイズできる
![Writing T](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/06bcea54-08fe-54c7-36d4-69b5f069fa0d.png)

## GenMoji
- 生成AIで絵文字を作成できる
- プロパティを一つ設定するだけでテキストビューがキーボードからGenmojiを受け取れるようになる
- GenmojiはAttributedStringを使ってる
![GenMoji](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/66889881-25ae-5367-3400-40a51db7f1c5.png)

## Image Playground API
- Image Playground APIを使うと、よくあるアバター画像生成ポップアップからアバター画像を生成できる
![Image Playground](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/1f9e04a1-b501-62b5-b4ae-5c164ff19f9c.png)

## App Intent
- Siriやショートカットやほかのシステム体験における一連のアクションを定義するフレームワークだったが、
- App Intentは Apple Intelligenceをアプリで活用するパワフルな方法になりました
## Siriの新機能
- Siriがアプリのメニューからどんなアイテムも呼び出せる
- 標準のテキストシステムを使ったアプリなら表示されたテキストにSiriがアクセスできるようになる

パーソナルコンテクストをSiriに学ばせる方法
- Apple Intelligenceは写真やメッセージやファイルやカレンダーの予定などのセマンティックインデックスにアクセス可能になるので、
- これまでは不可能だった物事を見つけて理解できるようになる
- 新しいSpotlight APIによって App Entitiesがインデックスに含まれるようになるので、Siriはアプリからデータを探せるようになる
- App Intentと App Entitiesが合わさるとシステム全体をアプリでサポートされた動作につなげる新しい方法がユーザーに提供される

今後について
- App Intentを使ってアプリの機能を公開することが重要です
- 対応するドメインに該当する App Intentを呼び出す機能が今後Siriに搭載されます
- 現在は2つのドメイン向けの App Intentスキーマが使用可能で、年内にはさらに増えます
## Create ML
- WhisperやStable DiffusionやMistralやPyTorchなど幅広いモデルを簡単に使えるようになる
- Create MLアプリを使えば、ほんの数ステップで既存モデルをアプリで実行する準備ができます
![Create ML](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/7050a6bc-00d6-4a2f-620b-6130dbe6dba6.png)

## Core MLツール
- Core MLツールを使って Core MLフォーマットに変換
- Core MLフレームワークを使いアプリ内でモデルを実行
- Core MLはCPUとGPUとNeural Engineのすべてで最適化して、モデルのパフォーマンスをさらに最適化する

デモ
- 前提
    - Mistral 7Bパラメータモデルを使用
    - macOS Sonomaでは16ビットモデルを使用
    - macOS Sequoia用には最新の4ビット量子化とステートフルKVキャッシュ技術をCore MLに適用
- 結果
    - この最適化があれば5倍以上速くほぼ9倍のピーク時の省メモリでモデルは回答を生成できます
![demo](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/4126f655-07ac-27ef-4033-aea76e95e736.png)

# Xcode
## Code Completion
![Code Completion](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/5bbe3a16-5c25-b702-4e33-768bc2f2e411.png)
- SwiftとApple SDK用に学習させた専用モデルを使用して、コード補完ができるようになる
- Optionキーを長押しすると予測された複数行のコードが表示されtabキーですべてを承認できます
- Xcodeの補完モデルはAppleシリコンとmacOS Sequoiaの機械学習を使用

## Swift Assist
![Swift Assist](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/db57b9e5-838b-edd3-db20-d9ec3fb94a31.png)
- 専用の入力画面から自然言語でコード補完の指示ができる
- コード補完と同様 Swift Assistはプロジェクトとの関連性を利用しパーソナライズされたコードを作成
- コードは決してサーバに保管されず、リクエストの処理のためだけに使用
- Appleが機械学習モデルのトレーニングにコードを使わない
- Swift Assistは年内から提供開始

その他のXcodeの新機能
- デバッグ時に一つのビューでバックトレースの表示やすべてのスタックフレームからの関連するコードの一括表示
- Instrumentsでのプロファイリングデータのフレームグラフ
- ローカライゼーションカタログの強化など

# Swift6
![swift](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/5ba200f9-9372-2fc1-0e73-a7a423e14331.png)
## 振り返り
- Swiftが10周年
- Visual Studio CodeやそのほかのエディタのSwiftへの対応を強化
- DebianとFedoraでも使えるようLinuxへの対応を拡張し、Windowsへの対応も向上
- Swiftに特化した新たな GitHub Organization（github.com/swiftlang）

## Swift6
- データ競合安全の導入（により並行プログラミングを劇的に楽にします）
    - Swift6の言語モードはオプトイン
    - Swift6の言語モードをオンにすると、コンパイラがプロジェクト全体でメモリへの並行のアクセスを診断
    - Swift6へは1モジュールずつ段階的に移行可能
- swift.orgにはコードからデータ競合を排除する最良の方法についての洞察やパターンが盛り込まれた移行ガイドがある

# Swift Testing
![Swift Testing](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/c0755c93-26dd-3276-cdd3-5236dfe81112.png)
- Swiftのために一から作られた新しいテスティングフレームワーク
- 使い方
    - テストの記述を始めるにはTest属性の付いた関数をテストスイートに追加するだけ
    - わかりやすいタイトルを付け、expectなどのマクロを使って、あらゆるSwiftの表現の結果を評価
    - 柔軟なタグ付けシステム
    - タグを使えばテストスイート全体で選択的にテストを実行可能
- Visual Studio CodeでもSwift Testingがサポートされる

# SwiftUI
今年重点を置いたもの
- Previews
- Customizations
- Interoperability（相互運用性）
## Previews
- 新しい動的リンキングアーキテクチャ
    - プレビューとビルドを切り替える時に、プロジェクトをリビルドしなくて済む
- Previewable
    - `@State`などの動的プロパティをXcodeプレビューで直接使うことができるようになる
## Customizations
- UIやアニメーションをカスタマイズする新しいAPIを追加
## Interoperability（相互運用性）
- UIKitからジェスチャー認識が独立し、SwiftUIビューで使えるようになる
- SwiftUIからアニメーションが独立したので、UIKitかAppKitのビューで設定したアニメーションをSwiftUIで動かせるようになった

# SwiftData
- `#Index`と`#Unique`が追加
- 新しい`@Previewable`もSwiftDataと相性抜群
- カスタムデータストア
    - SwiftDataはデフォルトで Core Dataに情報を保存しますが、
    - カスタムデータストアでは任意の別のバックエンドでデータを保存できるようになります
    - SwiftDataをSQLiteやリモートウェブサービスやJSONファイルなどで使えるようになります
- データストアの変更履歴
    - データの変更がすべてデータストアの履歴に記録される

# RealityKit4
- Reality Composer Pro
    - これまでvisionOSのみの対応だったが、RealityKit4でmacOSとiOSとiPadOSにも対応
- その他色々機能追加

# iOS18
## Controls
- 新しいControls APIを使いタイプとシンボル、App Intentを指定してコントロールを作成可能
- コントロールを iPhone 15 Proのアクションボタンに割り当てたり、ロック画面に表示させることもできます
## Home Screen
![Home Screen](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/cfe63120-153e-11c4-87f8-16b7b37e645d.png)
- アプリのアイコンやウィジェットはライト、ダークまたはTintで表示されるようになります
- ユーザーがiOS 18にアップグレードすると自動的に利用可能になります
- ヒューマンインターフェイスガイドラインのアイコンテンプレートと事例が更新
- XcodeでダークとTintのアイコンバリエーションをアセットカタログに追加可能
![icon](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/15c1b6db-a803-75ac-a22d-5b7c9127f323.png)

## 新しい登録API
- ユーザーをパスキーに移行させるシームレスな方法
- 対象となるユーザーが次回アプリにサインインした時に自動的にパスキーを作成
- パスキーが作成されたらユーザーに通知されます

# iPadOS18
## フローティングタブバー
- アプリ上部のフローティングタブバーはお気に入りのタブへの移動を簡単にします
## 割り込み可能なアニメーション
- タブバーがサイドバーにエレガントにアニメーション表示される
- iOSとiPadOSのアプリでも活用できます
![iPadOS18](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/16baaeda-8d75-5d16-f271-bb26c4045855.png)

# watchOS11
色々機能追加

# macOS Sequoia
## Gmae Porting Toolkit 2
- AVX2などの技術やレイトレーシングなどの先進的ゲーム機能の互換性向上

# visionOS2
色々機能追加

# おわりに
- AdAttributionKit のことがここでは紹介されていなかったが、広告周りを使っているアプリでは結構重要な話だと思う
- アプリ側で Apple Intelligence 対応するには（今までほぼノーマークだった）AppIntent も重要だと分かったので、ちゃんと調べなくては…
- アプリアイコンのダーク対応もちゃんと調べて、デザイナーさんに展開しないとな
- Code Completion はもちろん良いけど、先に Copilot を Xcode で標準対応して欲しかったな
- もしかして、今年は全部のセッションビデオがYouTubeで公開されるのかな（自動翻訳使えるから助かる！）
- 「表示されたテキストにSiriがアクセスできるようになる」前提で自分のアプリを