AdvancediOS demonstrates some advanced concepts for iOS application development using a small example application.
Advanced concepts include:
- A unique application architecture that takes inspiration from MVVM, FRP, Coordinator Pattern, Factory Pattern, Dependency Injection, and Protocol Oriented Programming
- XcodeGen for generating an Xcode project
- Type safe code generation for assets, plists, and localized string references using SwiftGen
- Linting with SwiftLint
- Basic localization
- Continuous Integration with CircleCI and Fastlane
- BDD style unit testing
- Dynamic UI theming
- Programmatic UI
- A custom logging framework that leverages XCGLogger
- Using internal frameworks for more modular code
- Carthage for iOS dependency management with caching support using Rome
- Version pinning of as many tooling dependencies as possible using Mint and Bundler.
This project is mostly intended to be used as a playground to experiment with new tools, libraries, and design patterns for iOS development.
- Ruby installation matching the version found in .ruby-version (use rbenv to switch versions)
- Homebrew
- Bundler
- Xcode installation matching version found in .xcode-version (use xcode-install to switch versions)
- Setup the project:
$ brew bundle && bundle install
$ bundle exec fastlane bootstrap
- Open
Application.xcodeproj
- Run
$ bundle exec fastlane
for a list of Fastlane lanes that can be run on the repository. Application.xcodeproj
should be used for general development for building a release build.Application_Dev.xcworkspace
is only useful when debugging issues in Carthage dependencies since the Carthage dependency's project is added instead of using the pre-built framework.