Project Modularization
Configuring Apollo iOS with single target vs multi-module projects
When determining how to configure your project to use Apollo iOS, the first question you'll need to answer is:
Will your project interact with Apollo in a single target or through multiple modules?
Depending on the size and complexity of your project, it might be built as a single monolithic application target or be composed of multiple modules that interact with Apollo.
Interactions with Apollo include setting up your ApolloClient
; executing operations; using the generated models; interacting with the normalized cache; and any other functionality that uses the Apollo
or ApolloAPI
libraries.
Single target
A single target project configuration means that all of your interaction with Apollo will be done from a single target in your project. This is usually the case if your project consists of a single monolithic application target.
Alternatively you may use a single target configuration with a multi-module project when encapsulating your dependency on Apollo iOS behind a custom wrapper module. While it is common practice to encapsulate the setup of your ApolloClient
and/or execution of operations, if you would like to use the generated operation response models in your other modules, you will need to use a multi-module project configuration.
For a single target project configuration, you can link your target to the Apollo
library. You can also optionally link to ApolloSQLite
and/or ApolloWebSocket
to enable their functionality.
For more information about the libraries that make up the Apollo iOS SDK, see the Apollo iOS SDK.
Multi-module
A multi-module project can interact with Apollo in a variety of ways from different modules.
You may have some infrastructure modules that setup and manage the ApolloClient
and NormalizedCache
, others that need to execute operations, and others that consume response models without ever interacting with the ApolloClient
directly.
To include the Apollo iOS SDK in a project with multiple modules:
Link
Apollo
to the modules configuring or using the networking and caching APIs.Optionally, link
ApolloSQLite
and/orApolloWebSocket
to the module that sets up yourApolloClient
to enable them.
Link
ApolloAPI
to the modules that only include or consume the generated models.If you are using test mocks, link
ApolloTestSupport
to any unit test targets that need to create mocks of your generated models.