10月8日至10日,加入我们在纽约市的活动,学习最新的 GraphQL 联邦化和 API 平台工程技巧、趋势和新闻。加入2024年纽约市的 GraphQL 峰会
文档
免费开始

Apollo iOS 1.7 迁移指南

从 1.6 到 1.7


本指南描述了将代码从版本 1.6 迁移到版本 1.7 的过程。如果您使用的是其他版本,请遵循相关的迁移指南。

受影响用户

版本 1.7 是一个次要版本升级,大多数用户不需要迁移。

  • 对于使用 Apollo Codegen CLI 运行代码生成的用户,此版本将是一个无缝升级,无需对现有代码进行任何更改。
  • 对于直接使用 ApolloCodegenLib 从 Swift 可执行文件运行代码生成的用户,需要简单的迁移。

虽然我们努力使次要版本的升级路径无缝,但这些改进不可能不要求进行迁移。对于受影响的用户,请遵循此迁移指南以升级到 1.7。

ApolloCodegenLib 现在使用 Swift Concurrency

为了提高代码生成的性能,ApolloCodegenLib 现在使用了 async/await。代码生成现在是并行化,对于拥有大量 文件的用户应该会更快完成。

这意味着入口函数,ApolloCodegen.build(with configuration:) 现在是一个 async 函数。您需要将此函数的调用点用 async/await 改写。在大多数情况下,这需要最少的代码更改。

在 Swift 可执行文件中使用 async/await

本迁移指南将提供一个示例,说明如何迁移使用swift-argument-parser的Swift可执行目标的迁移方法。虽然您可以使用ApolloCodegenLib并无需它构建Swift可执行目标,但推荐使用swift-argument-parser进行使用。

为了迁移您的代码,您需要做几处修改

  1. 将您的ParsableCommand更改为AsyncParseableCommand
  2. 将您的run()函数async
  3. 在ApolloCodegen.build(with configuration:)函数调用中使用await

考虑以下示例可执行程序

v1.6 CustomCodegenScript.swift
import Foundation
import ApolloCodegenLib
import ArgumentParser
@main
struct CustomCodegenScript: ParsableCommand {
func run() throws {
let codegenConfiguration = ApolloCodegenConfiguration(
schemaNamespace: "MySchema",
input: ApolloCodegenConfiguration.FileInput(
schemaPath: "./myschema.graphqls",
operationSearchPaths: ["./GraphQLFiles/**/*.graphql"]
),
output: ApolloCodegenConfiguration.FileOutput(
schemaTypes: ApolloCodegenConfiguration.SchemaTypesFileOutput(
path: ./Generated/Schema,
moduleType: .swiftPackageManager
),
operations: .inSchemaModule
)
)
try ApolloCodegen.build(with: codegenConfiguration)
}
}

您可以将这个可执行命令支持Swift Concurrency,将其更改为

v1.7 CustomCodegenScript.swift
import Foundation
import ApolloCodegenLib
import ArgumentParser
@main
struct CustomCodegenScript: AsyncParsableCommand {
func run() async throws {
let codegenConfiguration = ApolloCodegenConfiguration(
schemaNamespace: "MySchema",
input: ApolloCodegenConfiguration.FileInput(
schemaPath: "./myschema.graphqls",
operationSearchPaths: ["./GraphQLFiles/**/*.graphql"]
),
output: ApolloCodegenConfiguration.FileOutput(
schemaTypes: ApolloCodegenConfiguration.SchemaTypesFileOutput(
path: ./Generated/Schema,
moduleType: .swiftPackageManager
),
operations: .inSchemaModule
)
)
try await ApolloCodegen.build(with: codegenConfiguration)
}
}

main.swift的使用替换为@main

注意在上面的示例中,命令结构体使用了@main注解。某些项目可能会在main.swift文件中运行根命令。

v1.6 main.swift
import Foundation
import ApolloCodegenLib
import ArgumentParser
struct CustomCodegenScript: ParsableCommand {
func run() throws {
let codegenConfiguration = ApolloCodegenConfiguration(
schemaNamespace: "MySchema",
input: ApolloCodegenConfiguration.FileInput(
schemaPath: "./myschema.graphqls",
operationSearchPaths: ["./GraphQLFiles/**/*.graphql"]
),
output: ApolloCodegenConfiguration.FileOutput(
schemaTypes: ApolloCodegenConfiguration.SchemaTypesFileOutput(
path: ./Generated/Schema,
moduleType: .swiftPackageManager
),
operations: .inSchemaModule
)
)
try ApolloCodegen.build(with: codegenConfiguration)
}
}
CustomCodegenScript.main()

main.swift文件的使用与AsyncParsableCommand不兼容。您需要:

  1. main.swift文件的名称更改为您的命令名称,例如:CustomCodegenScript.swift
  2. @main注解添加到您的可执行程序根命令中
  3. 从脚本中删除对main()函数的调用。

标记为@main的命令的run()函数将在您运行Swift可执行目标时自动调用。

上一个
版本 1.6
下一个
代码生成
评价文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,以Apollo GraphQL运营。

隐私政策

公司