昨日に続き、WWDC25 Recap イベントへ @Apple Japan。全国5会場を繋いでのLT10本立てで、多岐にわたるテーマが並び充実した時間だった。各拠点の盛り上がりが映像を通して伝わったのも温もり感じられて良かった。また、Twitter でアイコンは知っているが面識なかった方々とお会いでき、懇親会含めてちゃんとお話できたのが嬉しかった。
Liquid Glass を Metal で再現するテーマで、登壇者の方がガラスルーペなるものを購入され(Apple のデザインチームと同様に)実際に見え方を自分で試されていたのが、非常によかった(筆者もその場で注文した)。
あと Foundation Models について、追加学習はできないものだと思い込んでいたが、Adapter training という手法を用いることで可能なことを参加者の方に教えていただいた。これは試してみよう、、
イベントページ:https://japan-region-swift.connpass.com/event/353002/
Liquid Glass を Metal Shader で描きたいだけの人生だった…
temoki さん
- 実際にガラスルーペ買って再現してみた
- Alan Dyeの言葉 → それってMetalのこと?
- 作ってみた
layerEffect
modifier を使う- 光の屈折を distortion effect で実装
- 他にも、、
- 光の反射のハイライト
- ガラスの種類
- 液体のような近接形状の融合
- 背景ブラー
- 大変なので、Gemini CLI、liquid_glass_render に頼る
- Metal への移植を Gemini にやってもらった
- Metal の Geometry Functions に Liquid Glass 向けっぽい関数(物理ベースのレンダリングが必須)
- アーキテクチャをドキュメント化してもらった
- Demo
動画エフェクトに関する新技術の紹介
ShomaKato さん
- FAANSの動画機能
- WWDC25 動画エフェクトの新技術適用を検討
- Enhance your app with machine learnig basedvideo eefects
- VideoToolbox.framework でフレームレート変換、ブラー、超解像度
- フレームレート変換
- スロー映像が滑らかになる
CGFrameRateConversionConfiguration
,VTFrameProcessor
定義- バッファ割当て:フレームレートを4飼いする際、1フレームごとに+3枚分の補間画像が必要
- 他
- M1 Pro で、10秒動画の処理時間 55秒
- 高解像度化エフェクトなど一部エフェクトは macOS 26+
お手元の動画を APMP にしてお手軽にイマーシヴな体験を作ろう!
tamaki さん
- Learn about the APMP
- 180: 半球、360: 球体、Wide FOV: 屈折した幅広画面
- ISOBMFFの拡張とした、空間ビデオのためのフォーマット
- QTFF(QuickTime) がベース
- APMPに対応することで、自分のアプリからもいまー支部な動画再生が可能に
- 変換方法
- CLIツールやmacOSで変換:avconvert
- 自動変換:Insta360、Go Pro などの動画をMP4出力し AVPで送ると自動変換
- APIを使う:サンプルコード ProjectedMediaConversion を使う
- パッキング:立体視、SideBySide or OverUnder の指定
- 圧縮プロパティ設定で、レンズ距離など指定
- 書き出し:
CMTaggedDynamicBuffer
の設定(右目左目どっち用)
おやつのお供はお決まりですか?
GANGAN さん
- Exlore Swift and Java interoperability
- try! Swift Tokyo 2025
- SwiftJava:双方向で呼べるようにするプロジェクト
- SwiftKit, JavaKit
- SiwftKit: Java向け、JavaKit: Swift向け
- 何が嬉しい?
- Swift開発でJavaライブラリが使える
- SwiftだけでiOS/Androidアプリ開発が可能になる(Android Workgroup も追い風)
- Server-side Swift の可能性が広がる(Vaporとは異なる方向でJVM環境が選択肢に)
- 辛い点
- KMPとの差別化、どうクリアするのか?
- JDKバージョンが高い(JDK 22+)
- この要求に応えられるAndroidプロジェクトどれくらいある?
- Gradle以外のサポート
- Mavenの話がない、将来的サポートを期待
- Kotlinの互換:Kotlin側もSwiftへの互換を検討しているが、どちらが優位になるか
「App Intent」よくわからんけどすごい!
rinngo さん
- App Intent とは:特定機能をShortcutsなどに外だし
- Use Model
- Apple Intellligence (ChatGPT) にデータわあしてレスポンス出力が可能
- Interactive snippet
- App Intent の結果を複雑な View で表示可能(リアルタイム更新/アクション実行)
Foundation Models の可能性
koher さん
- 現状
- そこまで賢くない
- コンテクストウィンドウ 4Kトークンしか使えない(GPT 128K, Gemini 1M)
- うれしい
- プライバシー、オフライン
- 無課金:お金の問題が解決
- OS組み込みでDLなし、使い方簡単
- どう使うか
- チャットするだけではない
- 英会話添削
- テキスト出力に加えて、スコア表示にはデータ整形と構造化が必要
- プロンプト指示が大変、半分以上がフォーマット指示
- 制限の指定が大変
- Foundation Models
@Generable
@Guide
で出力フォーマットを指定可能- 出力フォーマットの指定が簡単で、確実に従わせられる(フォーマットプロンプトに消耗しない)
- 英語で指示した方が賢い
WWDC 現地参加のススメ
こむぎ さん
- 現地行く意味見出しづらい
- 意味大アリ
- Apple エンジニアと直接話せる
- 間違いがない、価値高い
- 世界レベルのエンジニアと繋がれる
- 有名なOSS作者
- 周辺でイベント開催され交流の場に
- 少人数で深い議論、日本にない視点
- エンジニア以外の参加意義ある:iOS開発に携わる全員行くべき
- キーノートで、会場の雰囲気(盛り上がり)で技術需要を見極められる
- デザイン情報が収集できる、UI/UXラボでデザインブラッシュアップしてもらえる
- ビジネスパートナー探し
- 技術トレンドを感じる
- 若手エンジニアを海外カンファレンス参加で釣る to managers
- 英語力
- 翻訳アプリに頼る
- Apple エンジニアへの質問は入念に準備
SwiftUI × RealityKit の進化で変わる!空間体験開発のこれから
TAAT さん
- visionOS 26で、SwiftUI に新しいAPI、RealityKitとの連携が強化された
- SwiftUI で 3D View を表示(おさらい)
frame(depth:alignment)
で空間に配置可能- 2Dと同じように利用可能な領域いっぱいに拡張可能
- 親→子にサイズ提案:Window Volume はリサイズ可能で提案されるサイズが変わる
- depth では Windowは固定値、Volumeは可変
- 空間レイアウト
- 任意の Layout に対して、depth alignment が指定可能
.depthAlignment()
- front center back
DepthAlighmentID
に準拠した custom alignment の定義- Rotatin layout
- 従来はただの effect で見た目だけの反映だったが、回転に合わせて frame 調整される
- Radial layout が定義可能
- 例:空間カルーセル
- 任意の Layout に対して、depth alignment が指定可能
- RrealityKit との連携
RealityView
realityViewLayoutBehavior(.fixledSize)
flexible
,centered
- Object manipulation
- modifier ひとつ追加するだけでモデルをつまんで動かせる
ManipulationEvents
購読で操作時のイベントハンドリングも
ViewAttachComponent
,PresentationComponent
,GestureComponent
- エンティティ生成時に実装できるようになった
- Observable entity で プロパティ変更と同期可能
- update closure も実行されるので無限ループに注意
CoordinateSpace3D
- Window-Volume 間で座標計算が容易に
今こそアシスティブアクセスを知ろう!
Kyome さん
- iOS 17 で導入された認知障害を持つユーザーが自立してiOSを使用可能にするアクセシビリティ機能
- かんたんケータイ的なインターフェイス
- 高齢者や小さな子どもにも嬉しいのでは
- 理解用意声、機能制限による安全性
- 来たる超高齢社会に向けて
- WWDC25: Customize your app for Assistive Access
- モード切り替え方法
- 行かグリッドか選択可能
- アシスティブアクセスへの対応
- iOS 26 から 3rd-party も対応可能に
- UISupportsAssistiveAccess – YES
- AssistiveAccess という Scene を追加:こちらのシーンが使われる
- SwiftUI で実装
- 基本のコンポーネントが専用の見た目に置き換わる:サイズ感に注意
- 有効かを取得する
@Environment
/AccessibilitySettings
のフラグ
- 勘所
- 認知負荷軽減であることを念頭、本質を見極める
- オプションの数を減らすべき(e.g. カラーピッカー)
- 膨大な選択肢でなく、決められた選択肢から選ぶように
- わかりにくいジェスチャー、入れ子午前急を避ける
- 必要に応じタスク順序を入れ替える
- 破壊操作は安全性のために消す(導入する時は確認2回)
- 情報を複数の方法で提示
- タイトルだけでなくアイコンも
- デバッグ方法
#Preview
に traits 指定- シミュレータ非対応なので、実機デバッグが必要
おっと、お飲みごろの時間です!
S_Shimotori さん
- ザッハトルテ・メランジェ
- 紅茶の淹れ方:時間測るのが大事
- 蒸らし時間が多様
- AlarmKit
- 稼働中のアラームリストを作る
- アプリキルでアラーム停止できないため
- アラーム:UUIDで識別、UUID指定して stop
- 状態は3種類
- 必須定義の型、情報の入れ物、
AlarmMetadata
に準拠- 身に覚えのない concurrency のエラーが発生
- SE-0466
- アラームの設定を組み立て:設定が多い
- Live Activity から操作できるのが便利なので対応したい
- Extension 用意、ActivityKit
attributesType
にAlarmAttivutes<XXX>.self
- AlarmKit が自動で activity をリクエストしてくれる(
NSSupportsLiveActivities
不要)
AcrivityConfiguration
から情報取得(state, 残り時間など)- Live Activity 以外の一般の View にアラーム情報表示は無理そう
Q&A
Apple WWDR のお二人への質問
- Liquid Glass のAPIが公開されていないが(ラップしている意味)
- タブバーの上に広告つけるケースを Liquid Glass に置き換えるのは難しそう
- 広告はインタラクティブなレイヤではなく、コンテンツレイヤに入れ得ることを検討してほしい
- App Intent
- 作らないとOSからは機能がないと見えてしまい、Siri, Spotlight から観るとアプリがないことになる、ひとつでも作ってみてほしい
- シンプルに、App Intent のプロトコルに準拠するだけで良いので
- WWDC現地参加:英語知識限られても行く意味ある?
- 質問内容は先に翻訳して用意しておく、エンジニア間はコードでコミュニケーション(デザイナーはデザインを見せながら)できる、日本スタッフが現地で翻訳サポートできる
- Apple のエンジニアはインターナショナルな問い合わせを受ける機会多いので、日本人イントネーションでも汲み取ってくれる
- SceneKit が進化する未来あるか
- 26 で deprecated になりメンテナンスモードに
- 後継は RealityKit に。マイグレーション方法はセッションで案内されている