在Swift代码中运行代码生成
对于大多数用例,Apollo iOS Codegen CLI是生成代码和下载您的模式的推荐方法。CLI使用ApolloCodegenLib执行这些操作。ApolloCodegenLib
用于执行这些操作。
要启用高级使用,ApolloCodegenLib
可以作为您自己的Swift项目的依赖项包含。这使您可以使用Swift脚本执行CLI无法完成的操作。直接调用ApolloCodegenLib
允许您以您想要的方式将Apollo集成到开发过程中。
安装ApolloCodegenLib
该ApolloCodegenLib
作为Apollo iOS Codegen的SPM包的一部分。
目前,ApolloCodegenLib
仅支持macOS
。您无法在其他平台上运行代码生成脚本。
要在您自己的Swift项目中使用它,只需将其作为依赖项包含即可。
Package.swift
.target(name: "MyApp",dependencies: [.product(name: "ApolloCodegenLib", package: "apollo-ios-codegen"),])
重要:由于代码生成与Apollo iOS SDK的使用相关联,请确保您使用了相同版本的apollo-ios
和apollo-ios-codegen
包。
使用方法
一旦您在项目中安装了ApolloCodegenLib
依赖项,您可以使用它来:
运行代码生成
要使用ApolloCodegenLib
配置和运行代码生成,创建一个ApolloCodegenConfiguration
,然后将它传递给ApolloCodegen.build(with configuration:withRootURL:itemsToGenerate:)
函数。
默认情况下,代码生成引擎会将ApolloCodegenConfiguration
中的所有文件路径解析为当前工作目录。可以使用rootURL
参数来提供要运行代码生成的项目的根目录的本地文件路径URL。这将在提供的rootURL
相对于解析您的配置中的文件路径。
import ApolloCodegenLiblet configuration = ApolloCodegenConfiguration(schemaNamespace: "MyGraphAPI",input: ApolloCodegenConfiguration.FileInput(schemaSearchPaths: ["**/*.graphqls"],operationSearchPaths: ["**/*.graphql"]),output: ApolloCodegenConfiguration.FileOutput(schemaTypes: ApolloCodegenConfiguration.SchemaTypesFileOutput(path: "./generated/schema/",moduleType: .swiftPackageManager),operations: .inSchemaModule,testMocks: .none),options: ApolloCodegenConfiguration.OutputOptions(additionalInflectionRules: [.pluralization(singularRegex: "animal",replacementRegex: "animals")],queryStringLiteralFormat: .multiline,deprecatedEnumCases: .include,schemaDocumentation: .include,apqs: .disabled,cocoapodsCompatibleImportStatements: false,warningsOnDeprecatedUsage: .include,conversionStrategies: ApolloCodegenConfiguration.ConversionStrategies(enumCases: .camelCase),pruneGeneratedFiles: true))try! ApolloCodegen.build(with: configuration)
有关配置代码生成的更多信息,请参阅配置文档。
下载模式
如果您想从您的Swift项目中下载一个GraphQL模式,请使用ApolloSchemaDownloader
。
模式下载器可以配置为使用 ApolloSchemaDownloadConfiguration
.
import ApolloCodegenLiblet configuration = ApolloSchemaDownloadConfiguration(using: .introspection(endpointURL: endpoint, outputFormat: .SDL),outputPath: outputURL.path)try! ApolloSchemaDownloader.fetch(configuration: configuration)
有关模式获取的更多信息,请参阅 下载模式.