I am following this tutorial: iOS GraphQL Simplified: macOS Command Line Techniques for Sustainable Schema Operations | by Alkin Cakiralar | Medium and I am getting an error when using the generate
command. It seems to be an issue with my schema, but it is the one I get when I run ./apollo-ios-cli fetch-schema
. Has anyone else had the same problem? How can I resolve it?
This is my structure in the Xcode project:
graphql_schema_Rick.graphql:
""""""
directive @cacheControl(
""""""
maxAge: Int
""""""
scope: CacheControlScope
) on FIELD_DEFINITION | OBJECT | INTERFACE
"""
A directive used by the Apollo iOS client to annotate operations or fragments that should be used exclusively for generating local cache mutations instead of as standard operations.
"""
directive @apollo_client_ios_localCacheMutation on QUERY | MUTATION | SUBSCRIPTION | FRAGMENT_DEFINITION
"""
A directive used by the Apollo iOS code generation engine to generate custom import statements in operation or fragment definition files. An import statement to import a module with the name provided in the `module` argument will be added to the generated definition file.
"""
directive @import(
"""The name of the module to import."""
module: String!
) repeatable on QUERY | MUTATION | SUBSCRIPTION | FRAGMENT_DEFINITION
""""""
type Query {
"""Get a specific character by ID"""
character(
""""""
id: ID!
): Character
"""Get the list of all characters"""
characters(
""""""
page: Int
""""""
filter: FilterCharacter
): Characters
"""Get a list of characters selected by ids"""
charactersByIds(
""""""
ids: [ID!]!
): [Character]
"""Get a specific locations by ID"""
location(
""""""
id: ID!
): Location
"""Get the list of all locations"""
locations(
""""""
page: Int
""""""
filter: FilterLocation
): Locations
"""Get a list of locations selected by ids"""
locationsByIds(
""""""
ids: [ID!]!
): [Location]
"""Get a specific episode by ID"""
episode(
""""""
id: ID!
): Episode
"""Get the list of all episodes"""
episodes(
""""""
page: Int
""""""
filter: FilterEpisode
): Episodes
"""Get a list of episodes selected by ids"""
episodesByIds(
""""""
ids: [ID!]!
): [Episode]
}
""""""
type Character {
"""The id of the character."""
id: ID
"""The name of the character."""
name: String
"""The status of the character ('Alive', 'Dead' or 'unknown')."""
status: String
"""The species of the character."""
species: String
"""The type or subspecies of the character."""
type: String
"""
The gender of the character ('Female', 'Male', 'Genderless' or 'unknown').
"""
gender: String
"""The character's origin location"""
origin: Location
"""The character's last known location"""
location: Location
"""
Link to the character's image.
All images are 300x300px and most are medium shots or portraits since they are intended to be used as avatars.
"""
image: String
"""Episodes in which this character appeared."""
episode: [Episode]!
"""Time at which the character was created in the database."""
created: String
}
""""""
type Location {
"""The id of the location."""
id: ID
"""The name of the location."""
name: String
"""The type of the location."""
type: String
"""The dimension in which the location is located."""
dimension: String
"""List of characters who have been last seen in the location."""
residents: [Character]!
"""Time at which the location was created in the database."""
created: String
}
""""""
type Episode {
"""The id of the episode."""
id: ID
"""The name of the episode."""
name: String
"""The air date of the episode."""
air_date: String
"""The code of the episode."""
episode: String
"""List of characters who have been seen in the episode."""
characters: [Character]!
"""Time at which the episode was created in the database."""
created: String
}
""""""
input FilterCharacter {
""""""
name: String
""""""
status: String
""""""
species: String
""""""
type: String
""""""
gender: String
}
""""""
type Characters {
""""""
info: Info
""""""
results: [Character]
}
""""""
type Info {
"""The length of the response."""
count: Int
"""The amount of pages."""
pages: Int
"""Number of the next page (if it exists)"""
next: Int
"""Number of the previous page (if it exists)"""
prev: Int
}
""""""
input FilterLocation {
""""""
name: String
""""""
type: String
""""""
dimension: String
}
""""""
type Locations {
""""""
info: Info
""""""
results: [Location]
}
""""""
input FilterEpisode {
""""""
name: String
""""""
episode: String
}
""""""
type Episodes {
""""""
info: Info
""""""
results: [Episode]
}
""""""
enum CacheControlScope {
""""""
PUBLIC
""""""
PRIVATE
}
"""The `Upload` scalar type represents a file upload."""
scalar Upload
characters.graphql:
query characters {
characters {
results {
id
image
}
}
}
apollo-codegen-config.json:
{
"schemaNamespace": "GraphqlAPI",
"input": {
"operationSearchPaths": [
"**/*.graphql",
"**/*.graphqls",
],
"schemaSearchPaths": ["graphql_schema_Rick.graphql"]
},
"output": {
"testMocks": {
"none": {}
},
"schemaTypes": {
"path": ".././GraphqlAPI",
"moduleType": {
"swiftPackageManager": {}
}
},
"operations": {
"inSchemaModule": {}
}
},
"schemaDownloadConfiguration": {
"downloadMethod": {
"introspection": {
"endpointURL": "https://rickandmortyapi.com/graphql",
"httpMethod": {
"POST": {}
},
"includeDeprecatedInputValues": false,
"outputFormat": "SDL"
}
},
"downloadTimeout": 60,
"headers": [],
"outputPath": "./graphql_schema_Rick.graphql"
}
}