📱  A strongly-typed, caching GraphQL client for iOS, written in Swift.
@defer
directive error (#235): When executing codegen against Apollo Router and a schema that supports the @defer
directive it would fail with an error stating the directive is duplicated.swift-tools-version
to 5.9
, therefore Xcode 15 is now the minimum version of Xcode allowed.
InputObject
casing strategy (#137): We've added a new casing strategy option for InputObjects which mimics the behaviour of the enum case conversion strategy. Thank you to @alexifrim for raising this in issue #3257.
GraphQLResult
conversion extension (#139): GraphQLResult
response data can now be easily converted into a JSON dictionary. This is useful for taking server response data and serializing it into a JSON dictionary which can then be used in a test suite.This is the first preview release of @defer
support in Apollo iOS which focuses on providing early access to using the @defer
directive in your operations. During preview releases bugs can occur, if you do experience anything unexpected please report it to us.
Note: Apollo supports a very specific early RFC version of the @defer
directive as documented here. The @defer
directive is still an RFC and is not an official addition to the GraphQL specification yet. This means that Apollo iOS may not work with all servers that currently support @defer
.
How to use it
We have a sample schema/server that supports @defer
and can be launched using the Docker configuration.
Once you have that service launched you can configure your Apollo iOS client to target the apollo-ios
and apollo-ios-codegen
dependency packages using the preview-defer.1
tag. Below is an example query using @defer
against the schema.
query ExampleQuery {
allProducts {
sku
id
... on Product @defer(label: "additional") {
dimensions {
size
}
variation {
id
name
}
}
}
}
Alternatively here is a sample client to demonstrate the code generation and operation execution of the @defer
directive.
Caveats in this preview release
@defer
.SelectionSet
that takes a [String: Any]
JSON object (#102): Thank you to @Cookiezby for the contribution.
ApolloCodegenLib
Now Uses Swift Concurrency
To improve the performance of the code generation, the ApolloCodegenLib
now uses async/await
. Code generation is now parallelized and should complete much faster for users with a large number of GraphQL files.
This means that the entry point function, ApolloCodegen.build(with configuration:)
is now an async
function. For users using the ApolloCodegenLib
directly, you will need to make your call sites into this function use async/await
. In most cases, this requires minimal code changes. Please see the 1.7.0 migration guide for information on how to upgrade.
See PR #57.
AnyHashable
coercion (#68): This is an additional fix for the crashes on iOS 14.4.1
.The Apollo iOS ecosystem is changing in the 1.6.0 release in order to provide a better development experience for users. For most users nothing will change, while some users will see a minor difference. The biggest change is that the ApolloCodegenLib
is now in a separate repo/package that will need to be included as its own dependency from apollo-ios-codegen if you are doing your code generation through Swift. If you are using the codegen CLI then no changes are necessary.
For a detailed breakdown of the changes please see this GitHub Issue.
The purpose of this release is to provide a deprecation message to users of ApolloCodegenLib
who are scripting their code generation in advance of an upcoming change to our libraries and repo structure. Beginning with the upcoming 1.6.0 release the code generation libraries will be their own SPM package in their own repo which will require you to add a new dependency to you project in order for your code generation scripting to compile. More information can be found in our announcement of this change.
If you would like to avoid this deprecation warning in your builds feel free to stay on 1.5.1 or earlier, this warning will be gone in the 1.6.0 release
PR containing deprecation warning for reference: #3243.
OutputOptions
property to codegen for marking generated classes as final
(#3189): Thank you to @Mordil for the contribution.
itemsToGenerate
option for .all
not generating an operation manifest (#3215): Thank you to @TizianoCoroneo for finding and fixing the issue.
RequestContext
to networking APIs (#3198): Thank you to @danieltiger for the contribution.
requestContext
parameter is optional with a default value of nil
. This means there are no breaking changes to the APIs for making networking calls. However, the requestContext
parameter was also added to the ApolloClientProtocol
. For custom implementations of this protocol (usually used for unit testing), you will need to add the requestContext
parameter to your function signatures.SelectionSet
models (apollo-ios-dev/#25):