SwiftGRPC 0.11.0

SwiftGRPC 0.11.0

Tim BurksMichael RebelloDaniel Alm 维护。



 
依赖
gRPC-Core~> 1.24.1
SwiftProtobuf~> 1.7.0
 

SwiftGRPC 0.11.0

  • gRPC 贡献者

Build Status

‼️请使用 master 分支‼️

gRPC Swift 版本 v0.x 基于 SwiftNIO 的重实现即将替换旧的基于 gRPC-Core 的实现。

我们强烈建议新项目使用来自 master 分支的重实现,我们认为该分支已准备好投产。

有关更多信息,请参阅 DEPRECATION.md

Swift gRPC

该仓库包含一个实验性的 Swift gRPC API 和代码生成器。

它旨在与 Apple 的 swift-protobuf 对 Protocol Buffers 的支持一起使用。这两个项目都包含用于 Google 的 Protocol Buffer 编译器 protoc 的代码生成插件,并且都包含构建和运行生成的代码所需的代码库。

API 和生成的代码为 gRPC 客户端和服务器提供支持,可以使用 Xcode 或 Swift Package Manager 构建。支持所有四种 gRPC API 风格(单向、服务器流式、客户端流式和双向流式),可以通过安全(TLS)或非安全通道进行连接。

Echo 例子提供了一个当前支持特性的全面展示。

Swift Package Manager 构建也可以在 Linux 系统上执行。有关详细信息,请参阅 DOCKER.mdLINUX.md

CocoaPods 集成

Swift gRPC 当前可在 CocoaPods 获取。要集成,将以下行添加到您的 Podfile

pod 'SwiftGRPC'

然后,从命令行运行 pod install,并使用您项目生成的 .xcworkspace 文件。

手动集成

当不使用 CocoaPods 时,Swift gRPC 包括 提供了副本的库,这是 gRPC Core 库和BoringSSL(gRPC Core 使用的一个 OpenSSL 分支)。这些在 Swift 包管理器构建中自动构建。

构建项目 后,将生成的 SwiftGRPC.xcodeproj 添加到项目中,并在 BoringSSLCgRPCSwiftGRPC 上添加构建依赖。

请注意,您的项目还必须包含来自 Swift ProtobufSwiftProtobuf.xcodeproj 以及您使用 protoc/插件 生成的源文件。

有关基于 Xcode 的示例,请参阅 Echo,如果您发现任何问题,请不要犹豫,提交问题。

使用方法

推荐使用 Swift gRPC 的方法是首先使用 Protocol Buffer 语言定义 API,然后使用 Protocol Buffer CompilerSwift ProtobufSwift gRPC 插件来生成必要的支持代码。

获取插件

Protocol Buffer Compiler、protoc 的二进制发布版可在 GitHub 上获取。

要构建插件,请在主目录中运行 make plugin。这使用 Swift 包管理器构建两个必要的插件:生成 Protocol Buffer 支持代码的 protoc-gen-swift 和生成 gRPC 接口代码的 protoc-gen-swiftgrpc

要安装这些插件,只需将主目录中出现的两个可执行文件(protoc-gen-swiftprotoc-gen-swiftgrpc)复制到您的 PATH 环境变量的一部分的目录中。

使用插件

要使用插件,protoc 和两个插件应位于您的搜索路径中(见上面)。使用如下命令调用它们

protoc <your proto files> \
    --swift_out=. \
    --swiftgrpc_out=.

按照惯例,--swift_out 选项调用 protoc-gen-swift 插件,而 --swiftgrpc_out 调用 protoc-gen-swiftgrpc

参数

要将额外的参数传递给插件,请使用由冒号分隔的参数列表,此列表位于输出目录之前。

标志 默认值 描述
可见性 内部/公共 内部 生成代码的ACL
服务器 true/false true 是否生成服务器代码
客户端 true/false true 是否生成客户端代码
异步 true/false true 是否生成异步代码
同步 true/false true 是否生成同步代码
实现 true/false true 是否生成协议和非测试服务代码。将此选项切换为false主要在结合TestStubs=true用于生成只包含测试存根代码的文件时有用
TestStubs true/false false 是否生成测试存根代码
文件命名 FullPath/PathToUnderscores/DropPath FullPath 如何处理生成的源文件命名
ExtraModuleImports 字符串 `` 在生成的代码中导入的额外模块。此参数可以包含多次以导入多个模块

示例

$ protoc <your proto> --swiftgrpc_out=Client=true,Server=false:.

构建您的项目

大多数grpc-swift开发使用Swift Package Manager进行。对于在Xcode项目中的使用,我们依赖于swift package generate-xcodeproj命令为grpc-swift核心库生成Xcode项目。

顶层Makefile使用Swift Package Manager为SwiftGRPC包生成Xcode项目

$ make && make project

这将会创建SwiftGRPC.xcodeproj,您应该将其添加到项目中,并设置如上所述的必要构建依赖项。

低级gRPC

虽然建议使用Protocol Buffers和生成的代码来使用gRPC,但gRPC的本质是一个基于HTTP/2的强大通信系统,可以支持任意负载。因此,每个gRPC库都包括低级接口,可以用来直接构建API客户端和服务器,无需生成代码。在Swift中的示例请参见Simple示例。

构建时有问题吗?

grpc-swift 依赖于 Swift、Xcode 以及 swift-protobuf。我们目前正在以下版本上进行测试:

  • Xcode 10.2
  • Swift 4.2 / 5.0
  • swift-protobuf 1.5.0

基于 SwiftNIO 开发的 GRPC

GRPC 是基于 SwiftNIO 库对 gRPC 协议的纯净实现;您可以在 nio 分支上找到该实现的最新版本。我们认为此实现已达到生产级别,并计划在未来几个月内逐步淘汰 gRPC-Core 实现。我们强烈建议所有新项目都使用 nio 分支。

您也可以查看这份演示文稿,了解更多关于切换到 SwiftNIO 的动机。

许可

grpc-swift 以与 gRPC 相同的许可证发布,具体请参阅 LICENSE 文件。

贡献

请加入我们!请参阅我们的贡献指南

发布

在发布新版本时,应遵循以下步骤:

  1. 运行 CocoaPods 检查器以确保没有任何新的警告/错误

    $ pod spec lint SwiftGRPC.podspec

  2. 更新 Carthage Xcode 项目(需要将版本更改检查入库)

    执行以下命令:$ make project-carthage

  3. SwiftGRPC.podspec文件中更新版本号

  4. 将这些更改合并后,创建一个带有对应Tag的新的Release。确保在消息中包含变更列表

  5. 将更新推送到CocoaPods specs 仓库

    执行以下命令:$ pod trunk push