The iOS client for Madabank, a modern banking application built with Swift and modular architecture.
This project follows a modular architecture using Tuist for project generation.
- App: Main application target
- Features: Standalone feature modules (Auth, Home, Accounts, etc.)
- Shared: Core components used across features (Core, Networking, Domain, Data, CommonUI)
- Xcode 15+
- Ruby 3.x (managed via Bundler)
- Tuist (installed automatically by setup script)
To ensure a consistent environment, always use the setup script. This handles submodules, Ruby gems (Fastlane), and Tuist generation.
./setup.shAfter the script completes, open the workspace:
Madabank/Madabank.xcworkspace
Note: If you switch branches or pull changes, run ./setup.sh again to sync submodules and regenerate the project.
- Tuist: Manages Xcode project generation and Swift Package Manager dependencies.
- Bundler: Manages Ruby dependencies (Fastlane, CocoaPods).
To add a new dependency:
- Update
Tuist/Package.swift - Run
./setup.sh
We use Fastlane Match for code signing. To sync certificates (read-only):
bundle exec fastlane sync_certsContinuous Integration is handled via GitHub Actions and Fastlane. The pipeline is configured for manual triggering.
- Go to the Actions tab on GitHub.
- Select iOS CI.
- Click Run workflow.
fastlane ci: Runs linting, unit tests, and builds the app (used by GitHub Actions).fastlane beta: Deploys to TestFlight (increments build number, builds, uploads).fastlane sync_certs: Fetches distribution certificates and profiles.
Madabank/
├── Madabank/ # App source code
├── Modules/ # Modular components
│ ├── Features/ # Feature modules (UI flows)
│ └── Shared/ # Shared logic & core infrastructure
├── Tuist/ # Project generation configuration
├── fastlane/ # Fastlane configuration
└── Gemfile # Ruby dependencies