All Projects → intelygenz → Archit Ios

intelygenz / Archit Ios

Licence: mit
Intelygenz iOS Architecture

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Archit Ios

Service Pattern Go
Simple clean Go REST API architecture with dependency injection and mocking example, following SOLID principles.
Stars: ✭ 449 (+121.18%)
Mutual labels:  clean-architecture, design-patterns, unit-testing
Domain Driven Hexagon
Guide on Domain-Driven Design, software architecture, design patterns, best practices etc.
Stars: ✭ 4,417 (+2075.86%)
Mutual labels:  architecture, clean-architecture, design-patterns
Modular Monolith With Ddd
Full Modular Monolith application with Domain-Driven Design approach.
Stars: ✭ 6,210 (+2959.11%)
Mutual labels:  architecture, clean-architecture, design-patterns
Swift Design Patterns
🚀 The ultimate collection of various Software Design Patterns implemented in Swift [Swift 5.0, 28 Patterns].
Stars: ✭ 85 (-58.13%)
Mutual labels:  architecture, clean-architecture, design-patterns
Swift Cleanarchitecture
Simple Swift project applying concepts inspired on the Clean Architecture
Stars: ✭ 133 (-34.48%)
Mutual labels:  architecture, clean-architecture
Propertyfindar
🏘 🎃 Real Estate Sample App with RxJava3+Coroutines Flow, Dynamic Feature Modules, Dagger Hilt, Offline First, ConcatAdapter, Animations and tests for Room, Retrofit, useCase and ViewModels with TDD.
Stars: ✭ 133 (-34.48%)
Mutual labels:  clean-architecture, unit-testing
Android Modular Architecture
📚 Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.
Stars: ✭ 2,048 (+908.87%)
Mutual labels:  architecture, clean-architecture
Cleanarchitecture.workerservice
A solution template using Clean Architecture for building a .NET Core Worker Service.
Stars: ✭ 142 (-30.05%)
Mutual labels:  architecture, clean-architecture
Android Clean Architecture Boilerplate
Apply clean architecture on Android
Stars: ✭ 141 (-30.54%)
Mutual labels:  architecture, clean-architecture
Kotlinmvparchitecture
Clean MVP Architecture with Dagger2 + Retrofit2 + Mockito + Fresco + EasiestGenericRecyclerAdapter using Kotlin. Added Unit Tests(Kotlin Tests)!
Stars: ✭ 143 (-29.56%)
Mutual labels:  clean-architecture, unit-testing
Onion Architecture Asp.net Core
WhiteApp API solution template which is built on Onion Architecture with all essential feature using .NET 5!
Stars: ✭ 196 (-3.45%)
Mutual labels:  clean-architecture, unit-testing
Go Bank Transfer
Simple API for banking routines using a Clean Architecture in Golang. 💳 💰 💸
Stars: ✭ 123 (-39.41%)
Mutual labels:  architecture, clean-architecture
Ios Design Patterns
Learning ground for iOS Design Pattern included with sample projects for MVC, MVP, MVVM, and VIPER
Stars: ✭ 120 (-40.89%)
Mutual labels:  architecture, design-patterns
Go Clean Architecture
👨‍💻 REST API example, built by following Uncle Bob’s clean architecture principles
Stars: ✭ 133 (-34.48%)
Mutual labels:  architecture, clean-architecture
Android Readthefuckingsourcecode
😜 记录日常的开发技巧,开发中遇到的技术重点、难点,各个知识点的总结,优质面试题等等。持续更新...
Stars: ✭ 1,665 (+720.2%)
Mutual labels:  architecture, design-patterns
Rxviper
Android micro framework for developing apps based on clean VIPER architecture.
Stars: ✭ 112 (-44.83%)
Mutual labels:  architecture, clean-architecture
Clean Flutter App
Aplicativo feito em Flutter usando TDD, Clean Architecture, Design Patterns e SOLID principles
Stars: ✭ 163 (-19.7%)
Mutual labels:  clean-architecture, design-patterns
Clean Architecture Swiftui
SwiftUI sample app using Clean Architecture. Examples of working with CoreData persistence, networking, dependency injection, unit testing, and more.
Stars: ✭ 2,925 (+1340.89%)
Mutual labels:  architecture, clean-architecture
Awesome Design Patterns
A curated list of software and architecture related design patterns.
Stars: ✭ 15,579 (+7574.38%)
Mutual labels:  architecture, design-patterns
Index
Metarhia educational program index 📖
Stars: ✭ 2,045 (+907.39%)
Mutual labels:  asynchronous, architecture

Intelygenz iOS Architecture

Twitter Build Status License codebeat badge

This repository contains an iOS architecture documentation with a sample application that uses OMDb API and implements the Archit architecture.

🔨 Xcode Configuration

  • You should enable Xcode Text Editing options:

    1. Line numbers. (Specify a line to a mate or search for a crash)
    2. Code folding ribbon. (Optional)
    3. Page guide at column: 140 (No line should exceed it, so we will all read the same code)
    4. Including whitespace-only lines. (Lighter files)

    Xcode Text Editing

🔧 Project Configuration

  • Create your application core framework:

    Open Xcode and select File -> New -> Target...

    New Target

    Select Cocoa Touch Framework:

    Cocoa Touch Framework

    Configure your application core:

    New Core

    This core framework will include API clients, persistence... everything you need to reuse in the future, for example, in an application extension.

    Remember provide protocols for every service or storage that you create, everything must work syncronous.

    Don't import to the core framework anything related with UIKit or any other forbidden framework or dependency (pod) in an application extension. If you need it in the future, you can make an extension in the application target.

  • Create your application domain framework:

    This domain framework will include domain models.

    Don't import to the domain framework anything related with UIKit or any other forbidden framework or dependency (pod) in an application extension. If you need it in the future, you can make an extension in the application target.

  • Configure the schemes:

    Edit all schemes:

    Edit Scheme

    For each scheme, enable "Gather Coverage Data" option and "Share" the scheme:

    Gather Coverage Data

    In the Breakpoint navigator, create an "Exception Breakpoint...":

    Exception Breakpoint

    And "Share Breakpoint":

    Share Breakpoint

    Also create a "Symbolic Breakpoint..." with "UIViewAlertForUnsatisfiableConstraints" as "Symbol" and "Share Breakpoint":

    Unsatisfiable Constraints Breakpoint

🤓 Usage

AppManager

We delegate all responsibilities of the AppDelegate to an AppManager under our control, testable and that will be in charge of initializing all third-party frameworks that need initialization in the didFinishLaunching for example.

In addition, if we need location services, notifications, etc. We will create independent managers for each of them, and only their implementation will have access to the specific frameworks.

AppManager

VCI (ViewController Controller Interactor)

We will create base view controllers for each of the native view controllers we need, all the application view controllers will inherit from these base view controllers.

Each view controller will be injected with the corresponding controller depending on whether we are developing, testing or in production, so we can mock what we want.

Each controller will have an interactor who will be in charge of calling the asynchronous core framework tasks, generating a Kommand and passing it to the controller for execution and response handling.

VCI (ViewController Controller Interactor)

Core Framework

Only the StorageManager knows the existence of the persistence framework that is used.

There will be intermediate StorageModels to map/parse the application model and store/update/fetch them in the database.

Only the HTTPClient knows the existence of the networking framework that is used.

There will be intermediate NetworkModels to map/parse the application model and get/post/put them to the network.

The service has tasks for each network API call related with the same context (application model, use case, web service).

Core Framework

CocoaPods

Every networking layer must be implemented around Net protocol.

By default, we'll use NetClient for networking.

We can use Core Framework.

To instantiate or reuse Storyboards, ViewControllers, Views, UITableViewCells or UICollectionViewCells, you must use Reusable.

To handle Dates and Timezones, we could use SwiftDate.

We MUST use ATTD with HonestCode, therefore we'll need Cucumberish.

In order to use user location, we will use IGZLocation.

When we need to modify Auto Layout programmatically, we could use SnapKit.

For async image loading we could use Kingfisher.

To use NotificationCenter, SwiftNotificationCenter is recommended.

To display the progress of an ongoing task, you could use SVProgressHUD or SkeletonView.

To securely store data, we use Valet.

As logging library, we love XCGLogger.

❤️ Etc.

  • Contributions are very welcome.
  • Attribution is appreciated (let's spread the word!), but not mandatory.

👨🏻‍💻 Authors

[email protected]

👮🏻 License

Archit is available under the MIT license. See the LICENSE file for more info.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].