👏
Apollo iOSをXCode / Swiftに設定する方法
Apollo iOSでGraphQLのデータをフェッチするまでに1日弱かかったので、備忘録として記録します。
(別途、時間ができた時に写真等も整理する予定です。)
以下2つの記事を参考に進めました。
1. packagesからapollo-iosをインストールする
- XCodeのプロジェクト名で右クリック > Add Package Dependencies...
- 右上の検索欄に上記のGitHubのURLを貼り付け検索を実行
Macの任意のディレクトリで以下を実行 - apollo-iosをAddPackage
- 「Apollo」と「ApolloWebSocket」のAddtoTargetでプロジェクトを選択し右下のAddPackageをクリックする
- XCodeのPackageDependenciesにApolloがあることを確認する
- XCodeのプロジェクト名で右クリック>(Apollo)Install CLIをクリック
(この作業でプロジェクトのルートディレクトリにapollo-ios-cliがシンボリックリンクで作成されます)
2. スキーマファイルのダウンロード
curl -X POST \
-H "Content-Type: application/json" \
-H "x-hasura-admin-secret: xxxxxxxx" \
-d '{
"query": "query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } }"
}' \
https://dev.graphql.theamplium.com/v1/graphql \
-o schema.json
# data階層を外して上書きするコマンド(jqを使用)
jq '.data' schema.json > schema_cleaned.json && mv schema_cleaned.json schema.json
3. GraphQLのクエリドキュメントを作成
- ターミナルでXCodeのプロジェクトフォルダに移動する
- プロジェクトのルートディレクトリに「GraphQL」フォルダを作成
- 「GraphQL」フォルダの中に「documents」フォルダを作成
- 「documents」フォルダの中にクエリを記述した.graphqlファイルを作成
(例) users.graphql
query GetUsers {
users {
id
}
}
4. スキーマファイルをXCodeのプロジェクトにコピー
- 前手順で作成した「GraphQL」フォルダの下にschema.jsonを
5. apollo-codegen-config.jsonを作成しパッケージをgenerate
- apollo-codegen-config.jsonを「GraphQL」フォルダで作成する
{
"schemaNamespace" : "AmpliumSchema",
"input" : {
"operationSearchPaths" : ["**/*.graphql"],
"schemaSearchPaths" : ["schema.json"]
},
"output" : {
"testMocks" : { "none" : {} },
"schemaTypes" : {
"path" : "./AmpliumSchema",
"moduleType" : { "swiftPackage" : {} }
},
"operations" : { "inSchemaModule" : {} }
},
"schemaDownloadConfiguration": {
"downloadMethod": {
"introspection": {
"endpointURL": "https://dev.graphql.theamplium.com/v1/graphql",
"httpMethod": { "POST": {} },
"httpHeaderFields": [
{
"name": "x-hasura-admin-secret",
"value": "<secret key>"
}
],
"includeDeprecatedInputValues": false,
"outputFormat": "JSON"
}
},
"outputPath": "./schema.json"
}
}
- パッケージをgenerateする
{apollo-ios-cliのパス} generate
6. XCodeにパッケージとして取り込む
- XCodeのプロジェクト名で右クリック > Add Package Dependencies...をクリック
- 画面下部の「Add Local」をクリック
- 前手順で生成したパッケージフォルダを選択
- XCodeのプロジェクト名をクリック
- Build PhasesのLink Binary With Librariesから先ほど追加したパッケージを選択
以降は以下記事と同じです。
以下は古い手順。
1. packagesからapollo-iosをインストールする
- XCodeのプロジェクト名で右クリック > Add Package Dependencies...
- 右上の検索欄に上記のGitHubのURLを貼り付け検索を実行
Macの任意のディレクトリで以下を実行 - apollo-iosをAddPackage
- 「Apollo」と「ApolloWebSocket」のAddtoTargetでプロジェクトを選択し右下のAddPackageをクリックする
- XCodeのPackageDependenciesにApolloがあることを確認する
- XCodeのプロジェクト名で右クリック>(Apollo)Install CLIをクリック
(この作業でプロジェクトのルートディレクトリにapollo-ios-cliがシンボリックリンクで作成されます)
2. スキーマファイルのダウンロード
- Macの任意のディレクトリで以下を実行
npm install -g apollo
npm install -g graphql
- GraphQLサーバーからschemaをダウンロード
今回はHasuraでGraphQLサーバーを構築したため以下のコマンドを実行しています
npx apollo schema:download --endpoint={https://...} schema.json --header="x-hasura-admin-secret: {YOUR_SECRET}"
3. GraphQLのクエリドキュメントを作成
- ターミナルでXCodeのプロジェクトフォルダに移動する
- プロジェクトのルートディレクトリに「GraphQL」フォルダを作成
- 「GraphQL」フォルダの中に「documents」フォルダを作成
- 「documents」フォルダの中にクエリを記述した.graphqlファイルを作成
(例) users.graphql
query GetUsers {
users {
id
}
}
4. スキーマファイルをXCodeのプロジェクトにコピー
- 前手順で作成した「GraphQL」フォルダの下にschema.jsonを
5. apollo-codegen-config.jsonを作成しパッケージをgenerate
- 「GraphQL」フォルダでapollo-codegen-config.jsonを作成する
{apollo-ios-cliのパス} init --schema-namespace {任意のネームスペース名} --module-type swiftPackageManager --target-name {XCodeのプロジェクトのTargetName}
- 生成されたapollo-codegen-config.jsonのschemaSearchPathsを./schema.jsonに修正する
{
"schemaNamespace" : "{任意のネームスペース名}",
"input" : {
"operationSearchPaths" : [
"**/*.graphql"
],
"schemaSearchPaths" : [
"./schema.json"
]
},
"output" : {
"testMocks" : {
"none" : {
}
},
"schemaTypes" : {
"path" : "./{任意のネームスペース名}",
"moduleType" : {
"swiftPackageManager" : {
"name" : "{XCodeのプロジェクトのTargetName}"
}
}
},
"operations" : {
"inSchemaModule" : {
}
}
}
}
- パッケージをgenerateする
{apollo-ios-cliのパス} generate
6. XCodeにパッケージとして取り込む
- XCodeのプロジェクト名で右クリック > Add Package Dependencies...をクリック
- 画面下部の「Add Local」をクリック
- 前手順で生成したパッケージフォルダを選択
- XCodeのプロジェクト名をクリック
- Build PhasesのLink Binary With Librariesから先ほど追加したパッケージを選択
以降は以下記事と同じです。
Discussion