An interface-oriented router for discovering modules and injecting dependencies with protocol in Objective-C and Swift.
ZIKRouter is an interface-oriented router for iOS, macOS, and tvOS that manages module discovery and dependency injection using protocols. It solves the problem of tight coupling between modules by allowing communication through declared interfaces, with compile-time checks to ensure safety.
iOS and macOS developers building modular applications, especially those using VIPER, MVVM, or other component-based architectures who need clean separation between modules.
Developers choose ZIKRouter for its strong compile-time safety, protocol-based design that reduces runtime errors, and flexibility in managing both UI and non-ui modules with a unified routing system.
Interface-oriented router for discovering modules, and injecting dependencies with protocol in Objective-C and Swift.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Declaring routable protocols triggers compiler errors for undeclared usage, preventing runtime crashes and ensuring module interfaces are explicitly defined.
Modules communicate solely through protocols, enabling easy swapping of implementations and improving testability by mocking dependencies.
Consistently handles both UI navigation (view router) and non-UI services (service router) with support for URL patterns, storyboards, and custom transitions.
Offers dynamic and static injection via configuration objects, allowing flexible parameter passing and module preparation without modifying destination code.
Creating router subclasses, declaring routable types, and configuring adapters requires substantial boilerplate code, as shown in the multi-step examples in the README.
Concepts like required/provided protocols, adapters, and AOP hooks demand deep familiarity with design patterns, which can intimidate developers new to modular architectures.
Compared to mainstream routers, ZIKRouter has fewer community contributions, third-party integrations, and online troubleshooting resources, potentially slowing development.
The abstraction layer and runtime checks for protocol matching may introduce slight performance delays, especially in apps with high-frequency navigation or many modules.