Rork Max が生成する SwiftUI コードに、iOS 26 から導入された Liquid Glass を取り入れて、3 本のアプリを App Store に公開してみました。事前に思っていたより Rork Max は Liquid Glass の流儀に近い API を素直に出してくれる一方で、慣れていないと「気持ち良いはずの新エフェクトが、なぜか目立ちすぎて UI が散らかる」場面にも遭遇します。本記事はその実機検証で見えた、使いどころと落とし穴の記録です。
Liquid Glass を「いつ使うか」をまず決める
Liquid Glass は背景を歪ませながら半透明に見せる視覚効果で、iOS 26 のシステム UI(コントロールセンター・通知・タブバーなど)で全面的に採用されました。アプリ側で同じ質感を出すには、SwiftUI の .glassEffect() モディファイアと、複数要素をまとめてマテリアルを共有する GlassEffectContainer を組み合わせます。
私の感覚としては、まず「Liquid Glass を使う面」と「使わない面」を最初に決めておくのが一番効果的でした。全画面で多用するとアプリ全体がギラギラして読みづらくなり、逆にどこにも使わないと iOS 26 の世界観から浮いた古いアプリに見えます。3 本作って落ち着いた基準は次の通りです。
- 使う: ボトムタブ、フローティングアクションボタン、再生コントロール、共有シートのように「常時表示される操作 UI」
- 使わない: 記事本文、リスト、設定画面のように「読むことが目的のコンテンツ領域」
- 慎重に使う: モーダル上のボタン群(背景色が変わる場面ではコントラストを必ず再確認)
Rork Max で作る SwiftUI ネイティブ iOS アプリ開発ガイド の流儀に沿って画面を切ってあれば、上記の境界はほぼそのまま当てはめられます。
Rork Max への伝え方 — プロンプトの一行が仕上がりを変える
Rork Max は自然言語のプロンプトから SwiftUI コードを生成するため、Liquid Glass を使うかどうかも文章で指示します。私が落ち着いた書き方は、画面ごとに次の 2 行を添えるパターンです。
「ボトムタブとフローティング再生コントロールには iOS 26 の
glassEffectを適用し、GlassEffectContainerでまとめてください。本文リストは通常の背景のままにしてください。」
こう書いておくと、Rork Max は次のような形のコードを返してくれます。
// MiniPlayer.swift — Rork Max が生成した再生コントロール
struct MiniPlayer: View {
var body: some View {
GlassEffectContainer(spacing: 12) {
HStack(spacing: 16) {
Button(action: togglePlay) {
Image(systemName: "play.fill")
.font(.title3)
}
.glassEffect(.regular.interactive())
Text("Now Playing — Sample Track")
.lineLimit(1)
.frame(maxWidth: .infinity, alignment: .leading)
Button(action: skipForward) {
Image(systemName: "forward.fill")
}
.glassEffect(.regular)
}
.padding(.horizontal, 16)
.padding(.vertical, 10)
}
.padding(.horizontal, 12)
}
private func togglePlay() {}
private func skipForward() {}
}期待する見え方は、ボタン群が一つの「ガラスの板」として浮かび上がり、スクロール背景の色が透けて伝わる状態です。.regular.interactive() を付けたボタンはタップに合わせて軽く沈む反応が出るので、操作対象であることが直感的に伝わります。
iOS 26 未満をどう扱うか — フォールバックの最小実装
Apple の最新統計でも、リリース直後は iOS 26 のシェアは半分前後にとどまります。私のアプリの実機ログでも、初週は iOS 25 以前が約 40 % 残っていました。Liquid Glass は iOS 26 専用 API なので、未満では別の表現に差し替える必要があります。
最小限のフォールバックは、ビュー拡張で 1 か所にまとめる形が扱いやすいです。
// View+GlassFallback.swift — iOS 25 以下では .ultraThinMaterial に降格
extension View {
@ViewBuilder
func appGlassEffect() -> some View {
if #available(iOS 26.0, *) {
self.glassEffect(.regular)
} else {
self.background(.ultraThinMaterial, in: Capsule())
}
}
}呼び出し側は .glassEffect(.regular) の代わりに .appGlassEffect() を使うだけです。Rork Max にも「.glassEffect の呼び出しは appGlassEffect 拡張を経由させてください」と一行添えるだけで、生成コード全体がフォールバック対応になります。期待する出力として、Cannot find 'glassEffect' in scope のビルドエラーが iOS 25 SDK でも消えていれば成功です。
実機で気付いた、3 つの典型的な崩れ方
3 本のアプリを TestFlight に出して、外部のテスターから戻ってきたフィードバックで多かったのが次の 3 点でした。Rork Max の生成結果が悪いというより、Liquid Glass そのものの性格に起因する崩れ方です。
1 つ目は、白っぽい背景の上に置いたガラスボタンが「見えなくなる」現象 です。Liquid Glass は背景の輝度を増幅する性質があるため、白の上では境界が消えがちです。対処は単純で、ボタンの後ろに薄い影 .shadow(color: .black.opacity(0.08), radius: 8, y: 2) を入れるか、背景色を .systemGroupedBackground のようにわずかに灰色寄りにすることです。
2 つ目は、スクロール時にちらつく現象 です。原因の多くは GlassEffectContainer の外で別々に .glassEffect() を当ててしまっているケースでした。グループ化されない複数のガラスは、相互に背景を再計算するためフレーム落ちが起きやすくなります。同じ列に並ぶボタンは必ず Container でまとめるとほぼ解消します。
3 つ目は、アクセシビリティ設定で「透明度を下げる」を有効にしているユーザーの画面が真っ白に見える問題 です。これは検証中に自分でも一度ハマりました。UIAccessibility.isReduceTransparencyEnabled を見て、有効時は .appGlassEffect() の中で Color(.systemBackground).opacity(0.95) に置き換えると安全側に倒せます。読者が時間を割いて使ってくれているアプリで、設定が原因で何も読めない状態は避けたいので、ここは必ず入れています。
App Store 審査でリジェクトされたわけではないものの、レビューで「ボタンが見えない」と書かれると一気に評価が下がります。可読性は Liquid Glass よりも優先するべき、というのが実機検証の結論でした。
Rork Max のアップデートで吹き飛ばさないために
Rork Max は再生成のたびにファイルを書き換えるため、手で入れた appGlassEffect 拡張やフォールバック処理が消えてしまうことがあります。私は「Rork Max が触らない場所」をプロジェクト内に明示的に決めて、そこに防衛コードを置く運用に落ち着きました。
具体的には、Sources/AppExtensions/ のような名前のフォルダを切り、そこに拡張・カラー定義・アクセシビリティ判定をまとめます。Rork Max には「Sources/AppExtensions/ 以下のファイルは編集しないでください」と指定しておくと、再生成しても拡張は残ります。Xcode 側でさらに細かく調整したい方は、Rork Max × Xcode のネイティブ最適化ワークフロー で、再生成時のマージ戦略をもう一段深掘りしています。
なお、Apple Intelligence と組み合わせた UI を考えている方は、Rork Max で構築する Apple Intelligence 対応アプリ も合わせて読むと、Writing Tools のシートの上にどうガラスを重ねるか、設計の参考になります。
まずは「ボトムタブだけ Liquid Glass」から始める
3 本作ってみて一番素直だったのは、いきなり全画面に取り入れず、ボトムタブ 1 か所だけ Liquid Glass にする スタートでした。これだけで iOS 26 らしい印象がぐっと出ますし、可読性のリスクもほぼありません。Rork Max にプロンプトで一行追加するだけで実装できるので、まずは普段使っているアプリを 1 本だけ TestFlight に出して、自分の目で iOS 26 の質感を確かめてみてください。そこから「次はフローティング操作系も」と段階的に広げる進め方が、結果として一番事故が少なかったです。