‼️ 请使用 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.md 和 LINUX.md。
CocoaPods 集成
Swift gRPC 当前可在 CocoaPods 获取。要集成,将以下行添加到您的 Podfile
:
pod 'SwiftGRPC'
然后,从命令行运行 pod install
,并使用您项目生成的 .xcworkspace
文件。
手动集成
当不使用 CocoaPods 时,Swift gRPC 包括 提供了副本的库,这是 gRPC Core 库和BoringSSL(gRPC Core 使用的一个 OpenSSL 分支)。这些在 Swift 包管理器构建中自动构建。
在 构建项目 后,将生成的 SwiftGRPC.xcodeproj
添加到项目中,并在 BoringSSL、CgRPC 和 SwiftGRPC 上添加构建依赖。
请注意,您的项目还必须包含来自 Swift Protobuf 的 SwiftProtobuf.xcodeproj
以及您使用 protoc
/插件 生成的源文件。
有关基于 Xcode 的示例,请参阅 Echo,如果您发现任何问题,请不要犹豫,提交问题。
使用方法
推荐使用 Swift gRPC 的方法是首先使用 Protocol Buffer 语言定义 API,然后使用 Protocol Buffer Compiler、Swift Protobuf 和 Swift gRPC 插件来生成必要的支持代码。
获取插件
Protocol Buffer Compiler、protoc
的二进制发布版可在 GitHub 上获取。
要构建插件,请在主目录中运行 make plugin
。这使用 Swift 包管理器构建两个必要的插件:生成 Protocol Buffer 支持代码的 protoc-gen-swift
和生成 gRPC 接口代码的 protoc-gen-swiftgrpc
。
要安装这些插件,只需将主目录中出现的两个可执行文件(protoc-gen-swift
和 protoc-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
GRPC
包
基于 SwiftNIO 开发的 GRPC
是基于 SwiftNIO
库对 gRPC 协议的纯净实现;您可以在 nio
分支上找到该实现的最新版本。我们认为此实现已达到生产级别,并计划在未来几个月内逐步淘汰 gRPC-Core 实现。我们强烈建议所有新项目都使用 nio
分支。
您也可以查看这份演示文稿,了解更多关于切换到 SwiftNIO 的动机。
许可
grpc-swift 以与 gRPC 相同的许可证发布,具体请参阅 LICENSE 文件。
贡献
请加入我们!请参阅我们的贡献指南。
发布
在发布新版本时,应遵循以下步骤:
-
运行 CocoaPods 检查器以确保没有任何新的警告/错误
$ pod spec lint SwiftGRPC.podspec
-
更新 Carthage Xcode 项目(需要将版本更改检查入库)
执行以下命令:$ make project-carthage
-
在
SwiftGRPC.podspec
文件中更新版本号 -
将这些更改合并后,创建一个带有对应
Tag
的新的Release
。确保在消息中包含变更列表 -
将更新推送到CocoaPods specs 仓库
执行以下命令:$ pod trunk push