SwiftJsonUI 7.0.0 beta Changes - Tai-Kimura/SwiftJsonUI GitHub Wiki
SwiftJsonUI 7.0.0 変更内容
リリース日
2025年8月21日(正式版) 2025年8月17日(ベータ版)
最新アップデート (2025年8月22日)
パフォーマンス最適化
Dynamic コンポーネントの最適化
- DEBUG ガードの追加: すべての Dynamic コンポーネントに DEBUG 条件コンパイルフラグを追加し、リリースビルドでのパフォーマンスを大幅に向上
- Static コンポーネントの再利用: Dynamic の依存関係を既存の Static コンポーネントを使用するようにリファクタリング
- StateAwareContainer の改善: Dynamic 依存を削除し、より汎用的な実装に変更
- where 句の追加: StateAwareContainer 拡張に where 句を追加し、型安全性を向上
ビルド設定の最適化
- リリースビルドの高速化: Dynamic コンポーネントのコンパイル時除外により、リリースビルドが大幅に高速化
必要環境
- iOS 16.0+ (iOS 13.0+ から変更)
- Swift 5.8+
- Xcode 14.0+
- Node.js(開発ツール用)
重大な変更点
1. SwiftUI サポートの追加 🎉
- SwiftJsonUI が SwiftUI に対応しました
- 従来の UIKit ベースの実装に加えて、SwiftUI でも同じ JSON 定義を使用してUIを構築できるようになりました
- 一つの JSON ファイルから UIKit と SwiftUI の両方のビューを生成可能
2. フォルダ構造の大幅な変更
- binding フォルダが uikit フォルダに名称変更
- 従来:
binding_builder/lib/binding/ - 新規:
sjui_tools/lib/uikit/
- 従来:
- 新しく swiftui フォルダが追加
- パス:
sjui_tools/lib/swiftui/
- パス:
- UIKit と SwiftUI の実装が明確に分離され、管理しやすくなりました
3. Include 機能の処理改善(UIKit)
- UIKit(旧binding)機能の include 処理に変更が加わりました
- より効率的で柔軟な include コンポーネントの処理が可能に
- Dynamic Include ビューのレンダリングが強化されました
新機能
1. SafeAreaView コンポーネントの追加
- 新しい SafeAreaView タイプ: システムUIに遮られない安全な領域内にコンテンツを配置
- UIKit:
safeAreaLayoutGuideを使用して自動的にセーフエリアを考慮 - SwiftUI: ネイティブのセーフエリア処理にマップ、カスタマイズ可能なエッジ設定
- View との違い: SafeAreaView はセーフエリアを尊重、View は無視してシステムUI下まで拡張
- safeAreaInsetPositions: SwiftUI で特定のエッジのみセーフエリアを適用可能
2. ViewSwitcher の実装(SwiftUI)
- SwiftUI で Dynamic モードと生成済みモードの切り替えが可能な ViewSwitcher を追加
- DEBUG ビルドではデフォルトで Dynamic モード(JSON から直接レンダリング)
- RELEASE ビルドではデフォルトで静的モード(生成済みコード使用)
isDynamicModeがリードオンリーに変更- パフォーマンスと開発効率の最適なバランスを実現
2. SwiftUI プロパティの大幅拡張
以下のプロパティが SwiftUI でサポートされました:
- マージン (margins)
- 可視性状態 (visibility states)
- 不透明度 (opacity)
- セキュアフィールド (secure fields)
- テキスト装飾 (text decorations)
- アライメントプロパティ (alignment properties)
- グラデーションスタイル (gradient styles)
- ページングサポート (paging support)
- その他多数のUI関連プロパティ
3. Button コンポーネントの機能強化
- frame サポートの追加: Button に直接 frame を設定可能
- enabled プロパティの追加: データバインディング対応の有効/無効状態制御
- 背景色の適用改善: ボタン全体のエリアに背景色が正しく適用されるよう修正
- wrapContent 幅の処理改善: Dynamic モードでの幅展開動作を Static モードと統一
{ "type": "Button", "frame": {"width": 200, "height": 50}, "enabled": "@{isButtonEnabled}", "background": "#007AFF" }
4. 変数置換のサポート
- DynamicView で "@{} 構文" を使用した変数置換が可能に
- より動的で柔軟なビュー生成が実現
5. アクションハンドラーの改善
- パラメータ付きアクションハンドラーのサポート
- viewModel プレフィックス付きのアクション呼び出しを実装
- ":" サフィックス付きアクションのメソッド処理を強化
6. ViewModel 管理の改善
- ViewModel 専用ディレクトリの作成
- 個別の ViewModel ファイル生成
- destroy コマンドが ViewModel ファイルも処理するように更新
7. プロジェクト構造と設定の改善
- ワークスペース構造での設定ファイル検出を改善
- ビュー生成時の --root オプションのサポート
- 新しいルートビューで App.swift を自動更新
8. ビュー生成とフォルダ構造の改善
- SwiftUI ビュー用の新しいフォルダ構造を実装
- 手動編集可能なビューと自動生成ビューの分離
- build と destroy コマンドの改善
9. Modifier システムのリファクタリング
- CommonModifiers に柔軟な modifier システムを追加
- modifier 適用順序の改善(padding が frame より前に適用)
- padding/margin 処理の統合
10. Dynamic モードの改善
- ViewModel データ変更時のビュー更新修正
- Include コンポーネントの処理改善
- 各コンポーネントでの frame と padding の処理改善
- スタイルファイルのキャッシュと監視機能の強化
- 複数の検索戦略によるスタイルファイル読み込みの改善
- ScrollView の SafeArea 処理を contentInsetAdjustmentBehavior で制御
バグ修正と改善
Dynamic モードと Static モードの一貫性
- SafeArea 処理を両モード間で統一
- デフォルトのスタックアライメントを統一
- ボタンの幅展開動作を両モードで一致
- 子ビューのアライメント処理を改善
テキスト処理の修正
- クォートのエスケープ処理を修正
- テキスト補間の改善
- RGBA カラーサポートの追加
レイアウト関連の修正
- ScrollView 内の子ビューへのパディング適用修正
- 親ビューが orientation を持つ場合の子アライメント修正
- SelectBox の frame とパディング処理を改善
- Include されたコンポーネントの表示問題を修正
ビルドシステムの改善
sjui build --cleanオプションの追加- キャッシュクリア機能の実装
技術的な改善
- Dynamic モードのレンダリングシステムの大幅な見直し
- 一貫性、柔軟性、コンポーネント処理の改善
- より効率的なビューの更新メカニズム
- UIKit と SwiftUI の両方をサポートする統一されたアーキテクチャ
- DEBUG/RELEASE ビルドでの自動的な最適化切り替え
- Static コンポーネントを基盤とした Dynamic 実装によるコードの重複削除
SwiftUI モードの詳細
プロジェクト構造
SwiftUI モードでは、以下のディレクトリ構造が作成されます:
YourProject/
├── Layouts/ # JSON レイアウトファイル
├── Styles/ # スタイル定義ファイル
├── View/ # SwiftUI ビュー
│ └── [ViewName]/ # 各ビューごとのフォルダ
│ ├── [ViewName]View.swift # メインビュー(手動編集可)
│ └── [ViewName]GeneratedView.swift # 生成されたビュー(自動生成)
├── ViewModel/ # ViewModel ファイル
│ └── [ViewName]ViewModel.swift
└── Data/ # データモデル
└── [ViewName]Data.swift
sjui コマンドの使い方
1. 初期化
# SwiftUI モードで初期化
sjui_tools/bin/sjui init --mode swiftui
# UIKit と SwiftUI 両方をサポート
sjui_tools/bin/sjui init --mode all
初期化時に mode を指定すると、sjui.config.json に mode が保存されます。以降のコマンドは config ファイルの mode 設定を自動的に使用します。
2. ビューの生成
# 基本的なビュー生成(config の mode を使用)
sjui_tools/bin/sjui g view HomeView
# ルートビューとして生成(App.swift を自動更新)
sjui_tools/bin/sjui g view HomeView --root
# サブディレクトリに生成
sjui_tools/bin/sjui g view Settings/ProfileView
3. ビルド(JSON から Swift コード生成)
# config の mode に従ってビルド
sjui_tools/bin/sjui build
# 一時的に別のモードでビルド(config の設定を上書き)
sjui_tools/bin/sjui build --mode swiftui
sjui_tools/bin/sjui build --mode uikit
sjui_tools/bin/sjui build --mode all
注意: --mode オプションは config ファイルの設定を一時的に上書きします。通常は config ファイルで mode を設定しておけば、コマンドごとに指定する必要はありません。
生成されるファイルの詳細
1. JSON ファイル (Layouts/home_view.json)
{
"type": "View",
"width": "matchParent",
"height": "matchParent",
"background": "#FFFFFF",
"orientation": "vertical",
"child": [
{
"data": [
{
"name": "title",
"class": "String",
"defaultValue": "HomeView"
}
]
},
{
"type": "Label",
"id": "title_label",
"text": "@{title}",
"fontSize": 24
}
]
}
2. メインビュー (View/HomeView/HomeViewView.swift)
- 手動で編集可能
- Include サポート用の data パラメータ付き初期化子
- Navigation や Sheet などのビューレベルモディファイアを追加可能
3. 生成ビュー (View/HomeView/HomeViewGeneratedView.swift)
- JSON から自動生成される
sjui buildコマンドで更新される- ViewSwitcher により Dynamic/Static モードを切り替え可能
4. ViewModel (ViewModel/HomeViewViewModel.swift)
- ObservableObject として実装
- データバインディングのロジックを含む
- アクションハンドラーを定義
5. Data モデル (Data/HomeViewData.swift)
- JSON の data セクションから自動生成
- @Published プロパティを持つ
Config ファイル (sjui.config.json)
{
"mode": "swiftui",
"project_name": "YourProject",
"source_directory": "YourProject",
"layouts_directory": "Layouts",
"styles_directory": "Styles",
"view_directory": "View",
"data_directory": "Data",
"viewmodel_directory": "ViewModel",
"swiftui": {
"output_directory": "Generated"
},
"hotloader": {
"ip": "127.0.0.1",
"port": 8081,
"watch_directories": ["Layouts", "Styles"]
}
}
アップグレードガイド
6.3.0 から 7.0.0 へのアップグレード
-
Package.swift の更新
dependencies: [ .package(url: "https://github.com/Tai-Kimura/SwiftJsonUI.git", from: "7.0.0") ] -
フォルダ構造の移行
bindingフォルダへの参照をuikitに更新- SwiftUI を使用する場合は、新しい
swiftuiフォルダ構造を確認
-
CLI ツールの更新
# 最新の sjui ツールをインストール curl -fsSL https://raw.githubusercontent.com/Tai-Kimura/SwiftJsonUI/master/installer/bootstrap.sh | bash -s -- -v 7.0.0 -
SwiftUI プロジェクトの初期化
# 既存プロジェクトを SwiftUI モードに移行 sjui_tools/bin/sjui init --mode swiftui sjui_tools/bin/sjui setup -
ViewSwitcher の活用
- DEBUG/RELEASE ビルドで自動的にモードが切り替わります
- 必要に応じて手動でモードを設定することも可能
-
Button コンポーネントの確認
- frame と enabled プロパティを活用した改善が可能
-
Dynamic モードを使用している場合
- ViewModel のデータ変更がより確実に反映されます
- Include 処理が改善されているため、動作確認を推奨
注意事項
- 7.0.0 正式版がリリースされました。本番環境での使用が可能です
- UIKit から SwiftUI への移行は段階的に行うことを推奨します
- バグや不具合を発見した場合は、GitHub の issue で報告してください
- 正式版リリースまでに API の変更がある可能性があります
今後の予定
- SwiftUI サポートの更なる拡充
- パフォーマンスの最適化
- ドキュメントの充実
- より多くのコンポーネントの SwiftUI 対応