- Historical development prior monorepo can be seen in the devstack-ios-app repo
- APIDoc: Postmanerator
- Specification: FIXME
- Graphics: FIXME
- Assets: FIXME
- BundleID: cz.matee.devstack.alpha
- API endpoint: FIXME
FIXME
- BundleID: cz.matee.devstack.beta
- API endpoint: FIXME
FIXME
- BundleID: cz.matee.devstack
- API endpoint: FIXME
FIXME
- All code dependencies and tools are managed via Swift Package Manager
- You can use the
scripts/setup.sh
for quick setup of all required tools - There is also
scripts/rename.sh
for quick renaming from DevStack to YourProject
- Part of the application is based on Kotlin Multiplatform
- You will need JDK 11 to build the project
- There is
scripts/build-kmp.sh
that producesDomainLayer/DevstackKmpShared.xcframework
- Whole application is separated into three layers according to the Clean Architecture principles
- Dependencies between layers:
PresentationLayer -> DomainLayer <- DataLayer
- DomainLayer reflects whole business logic of the application via DomainModels and UseCases
- DataLayer provides required data via Repositories and Providers from database / network / etc.
- Network communication is based on URLSession and native Decodable is used for mapping from JSON
- Database models are represented via Realm object models
- Providers/Repositories/UseCases are registered/resolved via Factory
- PresentationLayer is represented by ViewModels + Views and FlowControllers
- ViewModel has its state and intents which are then used in a relevant SwiftUI View
- Asynchronous work is represented via native async/await
- Swift Style Guide
- Swiftlint is enabled for the whole codebase, you can find its configuration inside the
.swiftlint.yml
- Unfinished or broken code should be marked with
#warning("TODO:")
or#warning("FIXME:")
- Identifiers for assets, colors and localized strings are generated with SwiftGen
- All strings in the application are localized and shared with the Android team via Twine
- Strings are stored in the
twine/strings.txt
file - TwinePlugin then generates appropriate
Localizable.strings
files from the mentionedstrings.txt
file - When modifying
strings.txt
it is required to comply with the specified syntax and to pull/push all the changes frequently
- Push Notifications are sent via Firebase Cloud Messaging
- All received notifications are handled inside the
HandlePushNotificationUseCase
- Notifications can be easily tested with scripts from the ios-push-tester repository
- All important information should be logged using the system
Logger
- All network requests going through the
SystemNetworkProvider
are logged in debug builds - Proxyman for HTTP request/response debugging is enabled for alpha and beta builds
- CI/CD process is based on GitHub Actions and Fastlane
- Configurations for GitHub Actions are in the
.github/workflows
folder - Configuration for Fastlane is in the
FastlaneRunner
package - Version number is taken from the Xcode project (it should respect Semantic Versioning)
- Build number is generated on the CI server, the value set in the Xcode project is ignored
- For every merge to develop branch, a new alpha build is created and uploaded to the TestFlight for internal testers
- Comment with version and build numbers is automatically added to the relevant JIRA issue (branch or commit must contain an issue key)
- Release builds must be triggered manually on the GitHub website
- Release builds for all environments are then produced and uploaded to the TestFlight for both internal and external testers
- After successful release build, a git tag with version and build numbers is created and pushed to the git
- All newly created ViewModels / UseCases / Repositories should have at least a basic set of tests
- Spyable is used for automatic mock generation