GitHub 上に存在するレポジトリを検索する iOS アプリです。
- Xcode 13.2.1
- Swift 5.5
基本的には上記の環境で開発していましたが、 Xcode 13.3 でビルドしても正しく動作することは確認しています。
前提として、Xcode と homebrew はインストールされているものとします。
CLI は mint で管理しています。
https://github.com/yonaskolb/Mint
brew install mint
Mintfile に書かれている CLI がインストールされます。インストールした CLI は mint run <command名>
で実行できます。
mint bootstrap
各画面のロジックを ViewModel が持つ MVVM アーキテクチャを採用しています。画面遷移は UIKit で、画面内のレイアウトは SwiftUI で書いています。 各コンポーネントの役割は以下です。
- SwiftUI.View: 画面のレイアウトを行う。画面全体を担当する View は
*Screen
、画面の中の1セクションを担当する View は*Section
、それ以外の View は*View
という命名規則になっている。 - ViewController: View と ViewModel の仲介をしつつ画面表示の細かい処理を行う。View を表示しつつ、ライフサイクルイベントやユーザインタラクションを ViewModel に伝える
- ViewModel: 画面の主なロジックを受け持つ。Model を操作して、AsyncStream を通じて ViewController にイベント伝えたり
@Published
プロパティで View に表示する情報を伝えたりする - Routing: 画面遷移処理を行う protocol。デフォルト実装をしておき、遷移元の ViewController に準拠させることによって容易に画面遷移の追加をできるようにする
SwiftGen でビルド時にリソースをコード生成しています。リソースが生成されないなどの問題があれば SwiftGen を実行している Build Phase がうまく動いているか確認してみてください。また、以下のコマンドを打てば手動でリソースを生成し直すこともできます。
mint run swiftgen
Mockolo でビルド時にテスト用の Mock をコード生成しています。リソースが生成されないなどの問題があれば Mockolo を実行している Build Phase がうまく動いているか確認してみてください。また、以下のコマンドを打てば手動で Mock を生成することもできます。
mint run mockolo --sourcedirs GitHub --destination GitHub/Generated/GeneratedMocks.swift --enable-args-history
ビルド時に swift-format で format と lint をかけています。