概要
- SwiftUI は2019年の発表から7年経っても 成熟したUIフレームワーク になっていない現状
- パフォーマンス や レイアウト予測性 の問題が解決されず、開発者の フラストレーション が増大
- データフロー や APIの非互換性 によるワークアラウンド地獄
- Apple公式チュートリアルや現場アプリでの 具体的な問題事例
- Appleの開発姿勢の変化に対する 業界全体の懸念
SwiftUIの現状と開発者の失望
- 2019年発表 時の期待と現実のギャップ
- 宣伝された利点 (宣言的構文・単一ソース・アニメーション・クロスプラットフォーム)の未達成
- Auto Layout からの解放という約束は実現せず
- 7年経過 しても「若いフレームワーク」という言い訳は通用しない現状
- バグやレイアウト崩壊 が頻発するため、現場では言い訳や回避策に追われる日々
SwiftUI登場の背景
- React・Flutter など競合の台頭によるAppleの危機感
- ネイティブ開発離れ や Mac App Store の低迷への対応策
- 開発者囲い込み と 移植性向上 がSwiftUIの狙い
- リアクティブなデータフロー と 宣言的UI がセールスポイント
SwiftUIのデータフロー問題
- @State, @Binding, ObservedObject から Observationフレームワーク と @Observableマクロ への変遷
- パフォーマンス問題 や 再描画の予測不能性 が解決しない現実
- ブラックボックス化 したリアクティブ性
- ドキュメント非公開API を使っても全容把握困難
- 意図しない再描画 や 無視される変更 による予測不能な挙動
SwiftUIのレイアウトシステムの課題
- サイズ交渉 ベースのレイアウトエンジンによる 不安定なUI配置
- GeometryReader 多用による宣言的記述の放棄
- バージョンアップごとの座標計算やり直し の苦行
- Apple公式チュートリアル ですらバグが残る現状
- 生産アプリ (例:UTM)でもSwiftUI依存部分が脆弱
APIの安定性と機能パリティの欠如
- if #available の乱用によるコードの複雑化
- 基本機能の遅すぎる実装 (例:AsyncImageやツールバーカスタマイズ)
- NavigationView のバグ放置と NavigationStack への置き換えによる混乱
- APIの頻繁な変更 で複数バージョン対応が必須
- Jetpack Compose のようなAndroid的後方互換性の欠如
- AppleのQA作業を開発者が肩代わり する現状
SwiftUIのパフォーマンス問題
- 最新ハードウェア 前提のデモと現実の乖離
- UIKitとの比較 でSwiftUIが一貫して劣る事例
- 古いiPhone での画像ギャラリー表示で顕著なパフォーマンス低下
- パフォーマンスチューニング必須 で初期の「手軽さ」が消失
- 高性能チップ依存 の設計は本質的な品質問題
クロスプラットフォーム対応の神話
- 宣伝されたクロスプラットフォーム性 の実態と限界
- iOS・macOS間の移植の難しさ や細かな差異
- 本質的な一貫性の欠如
Appleの開発文化の変化
- CocoaやAqua時代 の職人精神から 「十分良い」プロダクト 志向への転換
- 品質よりもスピードや話題性重視 の現状
- 開発者がAppleの未完成品を補完 する構図
- 現場エンジニアのモチベーション低下
まとめ
- SwiftUI は依然として 本番運用レベルに達していない 現実
- パフォーマンス・レイアウト・API安定性 の課題が山積
- Appleの開発姿勢 に対する業界の不信感
- 現場の開発者 が被るコストと負担の増加
- 根本的な改善や方向転換 が求められる状況