An iOS app that shows Chuck Norris facts and let you share the facts with your friends. This app uses the ChuckNorris API to request the facts and facts suggestions.
All screens can be found in the design file and any changes in the UI needs to update the design file first.
This app was built and test using this tools/environments. No guarantee that this app runs on previous versions of these tools.
- Xcode 11.4.1
- Swift 5
- Cocoapods version
1.9.3
- Clone this repository
- Run
pod install
- Run project 🎉
This app conforms to MVVM (Model-View-ViewModel) pattern to help us with unit tests and Coordinators which is responsible for the application's navigation flow.
In this project we adopt the reactive programing style and we use RxSwift for it. We use reactive programing to bind view models properties to the view controlers, call for API requests and/or listen for database changes and also to get rid of delegate methods to link Coordinators, View Models and View Controllers.
All of dependencies and third libraries used in this project as well as its versions can be found in Podfile.
- SwiftLint to maintain a good code quality
- SwiftGen to generate a type-safe reference for resources (Localizable.strings and Assets).
- RealmSwift to save facts offline
- RxSwift/RxCocoa to bind views and reactive code
- RxDataSources to bind viewModels on tableView
- RxRealm to observe database changes
- Lottie to show loading animation
This project use the Fastlane to automate the development and release process. To use it we need to install the dependencies in Gemfile first. This will install Cocoapods
, Fastlane
and its plugins used in fastlane scripts.
$ bundle install
-
Run tests and UI tests (this runs on all pull requests)
$ bundle exec fastlane ios tests
-
Run release process (this runs on all push to master branch)
$ bundle exec fastlane ios release
- Add more tests and increase code coverage percentage
- Add tool to track code coverage. Ex: CodeCov
- Add fastlane scripts to auto generate GitHub release tags
- Add support for more languages (translate the
Localizable.strings
) - Notifications with random facts
- Widget with random facts
- Add support for iPad
- Add support for Mac
- Add app for AppleWatch
- Add A11n for accessibility
Special thanks for flaticon for the free assets.