Swiftpack.co - Package - grpc/grpc-swift

Build Status sswg:sandbox|94x20

gRPC Swift

This repository contains a gRPC Swift API and code generator.

It is intended for use with Apple's SwiftProtobuf support for Protocol Buffers. Both projects contain code generation plugins for protoc, Google's Protocol Buffer compiler, and both contain libraries of supporting code that is needed to build and run the generated code.

APIs and generated code is provided for both gRPC clients and servers, and can be built either with Xcode or the Swift Package Manager. Support is provided for all four gRPC API styles (Unary, Server Streaming, Client Streaming, and Bidirectional Streaming) and connections can be made either over secure (TLS) or insecure channels.

gRPC Swift is built on top of Swift NIO as opposed to the core library provided by the gRPC project.

Supported Platforms

gRPC Swift's platform support is identical to the platform support of Swift NIO.

Note that gRPC Swift uses NIO 2 and therefore requires Swift to be version 5.0 or higher.

Getting gRPC Swift

There are two parts to gRPC Swift: the gRPC library and an API code generator.

Getting the gRPC library

Swift Package Manager

The Swift Package Manager is the preferred way to get gRPC Swift. Simply add the package dependency to your Package.swift and depend on "GRPC" in the necessary targets:

dependencies: [
  .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.0.0-alpha.9")

The syntax for target dependencies changed in Swift 5.2 and requires the package of each dependency to be specified.

For Swift 5.2 (swift-tools-version:5.2):

  name: ...,
  dependencies: [.product(name: "GRPC", package: "grpc-swift")]

For Swift 5.0 (swift-tools-version:5.0) and 5.1 (swift-tools-version:5.1):

  name: ...,
  dependencies: ["GRPC"]

From Xcode 11 it is possible to add Swift Package dependencies to Xcode projects and link targets to products of those packages; this is the easiest way to integrate gRPC Swift with an existing xcodeproj.

Manual Integration

Alternatively, gRPC Swift can be manually integrated into a project:

  1. Build an Xcode project: swift package generate-xcodeproj,
  2. Add the generated project to your own project, and
  3. Add a build dependency on GRPC.


CocoaPods support will be added in v1.0.

Getting the protoc Plugins

Binary releases of protoc, the Protocol Buffer Compiler, are available on GitHub.

To build the plugins, run make plugins in the main directory. This uses the Swift Package Manager to build both of the necessary plugins: protoc-gen-swift, which generates Protocol Buffer support code and protoc-gen-grpc-swift, which generates gRPC interface code.

To install these plugins, just copy the two executables (protoc-gen-swift and protoc-gen-grpc-swift) that show up in the main directory into a directory that is part of your PATH environment variable. Alternatively the full path to the plugins can be specified when using protoc.

Using gRPC Swift

gRPC Swift has a number of tutorials and examples available:

  • A quick start guide for creating and running your first gRPC service.
  • A basic tutorial covering the creation and implementation of a gRPC service using all four call types as well as the code required to setup and run a server and make calls to it using a generated client.

The docs directory contains other documenation, including:


gRPC Swift is released under the same license as gRPC, repeated in LICENSE.


Please get involved! See our guidelines for contributing.


Stars: 889

Used By

Total: 0


gRPC Swift 1.0.0-alpha.11 - 2020-03-24 13:32:17

SemVer Patch

  • Remove required platforms from SPM (#761)
  • Added .git ending for swift-log (#760, patch credit to @fabianfett)

gRPC Swift 1.0.0-alpha.10 - 2020-03-19 13:09:41

⚠️ This release contains a number of API breaking changes. ⚠️

In order to support payloads other than Protocol Buffers, for example Flatbuffers, it was necessary for much of the surface API to be generic over a new protocol, GRPCPayload instead of Message. This therefore requires that services are regenerated.

We also took this opportunity to address the interface between the generated code and runtime library: clients previously relied on ClientConnection for transport, they now rely on an something conforming to GRPClient; such as ClientConnection.

Generated clients have also had "Service" removed from their name. For example, the client for the Bar service in the Foo package would previously have been generated as Foo_BarServiceClient and will now be generated as Foo_BarClient. If you have multiple references to generated clients in your code which need updating it is possible to create a deprecated type alias such that Xcode will provide fixits:

@available(*, deprecated, renamed: "Foo_BarClient")
typealias Foo_BarServiceClient = Foo_BarClient

The list of supported platforms has now been added to Package.swift; dependents using Swift Package Manager must now also declare their supported platforms.

SemVer Major:

  • Adds the ability to use different payloads (#710, patch credit to @mustiikhalil)
  • Rename generated clients from FooServiceClient to FooClient (#736)
  • Put the client connection behind a protocol (#727)
  • Add supported platforms to Package.swift (#696)
  • Add support for compression (#714, #707, #729)

SemVer Minor:

  • Add a builder to make configuring a server easier (#752)
  • Add a builder to make configuring a client connection easier (#733)

SemVer Patch:

  • Fix bug with BoringSSLError.invalidSNIName exception (#702, patch credit to @esen)
  • Use metadata in log messages (#720, patch credit to @mariosangiorgio)
  • Fixed basic tutorial typo (#724, patch credit to @JanC)
  • Generate documentation from proto comments (#743)
  • Normalize user-provider headers (#730)
  • Fixed a bug where in some cases conformace to GRPCProtobufPayload could be generated multiple times (#740)
  • Add tests for custom payloads (#719)
  • Reorder some of the server logic. (#717)
  • Document how to create certificates/private keys from a string (#699)
  • Various infrastructure and documentation improvements (#695, #698, #701, #704, #713, #718, #728, #731, #734)

gRPC Swift 1.0.0-alpha.9 - 2020-01-09 12:33:04

⚠️ This release contains a number of API breaking changes. ⚠️

Many of the types which should be implementation details are now either internal or private. Similarly, a number of components have been refactored to be extensible in a way which doesn't break the API in the future.

In addition to the API changes:

  • Avoid protocol check after TLS handshake (#685, credit to @WilliamIzzo83)
  • log channel readiness and eventloop for debugging (#676, credit to @weissi)
  • Fix typo in the "grpc-exp" ALPN name (#681)
  • Miscelanoues CI and infrastructure improvements (#670, #691, #686, #677)

API Changes:

  • Make GRPCTimeout extensible and add documentation. (#689)
  • Make gRPC error types extensible (#669)
  • Rename asGRPCStatus() to makeGRPCStatus(), add documentation. (#690)
  • Remove outdated examples/documentation (#692)
  • Simplify compression representation. (#688)
  • Make LengthPrefixedMessageWriter internal (#673)
  • Make server request/response parts internal (#672)
  • Make LengthPrefixedMessageReader internal (#674)
  • Make GRPCClientUserEvent internal (#675)
  • Make client request/response parts internal (#671)
  • Make server CallHandlers more internal (#657) gbrntt@gmail.com
  • Make WebCORSHandler internal (#664)
  • Make GRPCClientChannelHandler underscore internal (#662)
  • Make HTTPProtocolSwitcher internal (#661)
  • Make GRPCServerCodec internal (#660)
  • Make TLSVerificationHandler internal (#659)
  • Make DelegatingErrorHandler underscored-internal (#658)
  • Make GRPCApplicationProtocolIdentifier internal (#665)
  • Make header names internal (#666)

gRPC Swift 1.0.0-alpha.8 - 2019-12-12 09:54:02

  • Correctly set the authority to the host rather than scheme (#637, patch credit to @adolfo)
  • Allow client error delegate to have a logger injected (#654)
    • ⚠️ This is a breaking change. Implementations of ClientErrorDelegate must now accept an additional argument loggerin didCatchError.
  • Fix compile issues in Google/NaturalLanguage (#643)
  • Don't log at info level (#651)
  • Ignore SSL unclean shutdown errors (#650)
  • Update dependencies (#649)
  • Update minimum required version of SwiftNIO SSL (#640)
  • Build protoc plugins in release mode (#647)
  • A number of performance improvements (#653, #645, #644, #641)

gRPC Swift 1.0.0-alpha.7 - 2019-11-14 12:30:51

Important: this change contains breaking changes to the generated client code.

  • License header checking script (#587)
  • Run CI on Swift 5.1 and Swift 5.0 (#588)
  • Add missing environment variable for interop tests (#589)
  • RPC state machine for client (#580)
  • Add/update GOVERNANCE.md, CODE-OF-CONDUCT.md and CONTRIBUTING.md (#595)
  • Add HelloWorld example (#590)
  • Add a RouteGuide example and tutorial (#598)
  • Fix up markdown (#600)
  • Reduce logging in the message reader (#602)
  • Workaround for SR-11564 (#608)
  • Provide a channel handler using the client state machine (#601)
  • Use string comparison instead of regex in the HTTPProtocolSwitcher (#618)
  • Update the client to use the new state machine backed channel handler (#625)
  • Update CI to use more recent Swift versions (#629)
  • Reduce logging verbosity (#632)
  • Inline service name into the generated path (#633)
  • Require a lock to access the connectivity state delegate (#634)
  • import FoundationNetworking if possible (#586)
  • Remove unexported executables from products (#592)
  • Fix interoperability tests. (#596)

Release 0.10.0 - 2019-10-25 09:27:09

  • Use protoToModuleMappings in input/output names. (#553)
  • Update vendored gRPC-core to v1.23.0. (#563)

gRPC Swift 1.0.0-alpha.6 - 2019-09-18 13:54:26

  • Fix deprecation warnings (#585) - George Barnett (3972a3f9)
  • Rename the plugin: protoc-gen-swiftgrpc -> protoc-gen-grpc-swift (#584) - George Barnett (ca683154)
  • Explain platform support in the readme. (#578) - Daniel Alm (99d51ca2)
  • Add MAINTAINERS.md. (#564) (#576) - George Barnett (e0c70ce6)

gRPC Swift 1.0.0-alpha.5 - 2019-09-03 09:29:30

  • Always use the same event loop for a client connection (#562)
  • Allow timeouts to be rounded so they may comply with the spec (#569)
  • Separate trailers from GRPCStatus (#572)
  • Replace Commander usage with our own CLI parsing (#570)
  • Split the Echo example into model, implementation and runtime (#567)
  • CI and version updates (#561, #571, #568, #573)

gRPC Swift 1.0.0-alpha.4 - 2019-08-20 10:32:14

  • Increase the minimum required version of NIOSSL (#559)
  • Increase the minimum required version of NIOHTTP/2 (#548)
  • Implement the connection backoff interoperability test (#557)
  • Default to using backoff for making connections (#554)
  • Make the connection backoff iterator continually produce backoff (#554)
  • Fix a rare thread safety issue in tests (#551)
  • Add server logging (#547)
  • Use protoToModuleMappings in input/output names (#555)
  • Package structure updates, typo fixes, dead code removal (#558, #556, #549, #546, #544)

gRPC Swift 1.0.0-alpha.3 - 2019-08-07 09:38:17

  • Add sendMessages and flush to StreamingRequestClientCall (#538)
  • Fix building for 32-bit architectures (#535)
  • Disable static stdlib linking. (#533)
  • Fix typo in metadata key for server-hostname (#531)

gRPC Swift 1.0.0-alpha.2 - 2019-07-25 17:48:18

Major Changes:

  • Provide restricted TLS configurations (#513)
  • Rename GRPCNIO to PlatformSupport (#522)
  • Remove onNext from connectivity state delegate (#506)


  • Add client-side logging with swift-log (#514)
  • Delay creating event observers for client streaming calls (#523)
  • Fallback to the hostname for TLS if a hostname override isn't provided (#528)
  • Improvements to connectivity state management (#510, #529)
  • Avoid a conformance error in the interoperability test CLI when used with SwiftUI (#518)
  • Test fixes and improvents (#503, #524, #527, #521)
  • Typo fixes (#512)
  • Provide a git commit template. (#508, #509)
  • Revert to Apache 2.0 license verbatim [skip ci] (#504)
  • Add missing copyright headers (#505)

Release 0.9.1 - 2019-07-05 07:34:27

Relevant for library users:

  • Support tvOS (#446)
  • Improve Carthage compatibility (#493)
  • Avoid linking nghttp2 in Carthage project (#450)
  • Fix two memory leaks and update a link in the README. (#501)
  • Fix a compiler warning. (#499)
  • Fix libtool warning when compiling with bazel (#447)

Less visible changes:

  • Update the test certificates and increase their validity to 10 years. (#494)
  • Add a swift_versions flag to the Podspec. (#500)
  • Revert to Apache 2.0 license verbatim (#498)
  • Update README.md for examples to point to correct folders (#473)

gRPC Swift 1.0.0-alpha.1 - 2019-06-21 15:38:40

First "official" preview of SwiftGRPC based on SwiftNIOHTTP2. See README.md for a guide to the library's new interface.

Fixes for Swift 5 - 2019-04-18 19:42:04

This release contains fixes for Swift 5 warnings that were emitted by SwiftGRPC and SwiftProtobuf.

  • Bump version to 0.9.0 (#444) - Michael Rebello (d5f0c46)
  • Try de-flaking testMultipleConnectivityObserversAreCalled. (#441) - Daniel Alm (c0eca15)
  • Update SwiftProtobuf to 1.5.0 (#440) - Michael Rebello (2d822f1)
  • Run CI on both Swift 4.2 and 5, and fix Swift 5 warning (#426) - Michael Rebello (0f2af51)
  • Change the swiftc argument to use static Swift libraries. (#424) - Daniel Alm (6bbc15c)

Release 0.8.2 - 2019-04-11 15:36:31

  • Update vendored gRPC-core to v1.19.1. This commit also fixes a few minor problems in the vendoring scripts and updates a call in shim/channel.c to use a modified API.

  • Update ClientCancellingTests to give clients more time to cancel before the server finishes streaming.

  • Update Roots.swift to use the latest roots.pem from gRPC.

  • Add SleepingEchoProvider.

  • Updating podspec. gRPC-Core dependency is v1.19.0. There was no podspec published for gRPC-Core v1.19.1 but it has no changes in the C layer: vendoring v1.19.0 yields the same code as vendoring v1.19.1.

  • Changes from running "make project-carthage"

Release 0.8.1 - 2019-03-28 16:21:10

  • Update to 0.8.1 - Michael Rebello (f8738a6)
  • Disable iOS 12 cellular connectivity monitor by default - Michael Rebello (58a009b)
  • Implement async client test stub methods (#378) - Carlos Pages (630dfa5)
  • Temporarily disable NIOClientTimeoutTests.testBidirectionalStreamingTimeoutAfterSending on Linux for now (#409) - Daniel Alm (4df501a)
  • Use FileHandle instead of io.swift. (#408) - Martin Petrov (1d056f1)
  • Update Echo certificate and key (#407) - George Barnett (14734c7)
  • Rewrite LengthPrefixedMessageReader and tests (#397) - George Barnett (143255e)
  • Allow generating test stubs separately from the client implementation (#402) - Martin Petrov (869c168)
  • Generate client test stubs in a dedicated section. (#403) - Martin Petrov (90a5498)
  • Add public init to client call unary stubs. (#401) - Martin Petrov (dc2e8bb)
  • Mark unary async calls as @discardableResult. (#399) - Martin Petrov (f7807da)
  • Generate ClientCallUnary test stubs. (#398) - Martin Petrov (c0478aa)
  • Add/update scripts for vendoring dependencies (#396) - Michael Rebello (9745a76)
  • Fix crashes due to mismatching responses sent to the channel when event observer factories fail. (#395) - Daniel Alm (772b78e)
  • Enforce request cardinality for unary-request calls also for the case of zero request messages being sent. (#392) - Daniel Alm (d4a6366)
  • Add public factory methods for CallResult. (#394) - Martin Petrov (140d34a)
  • Make a few more write calls flushing. (#391) - Daniel Alm (30a7fbc)
  • Refactor some properties shared by all server-side call contexts into a common ServerCallContext protocol … (#389) - Daniel Alm (c082197)

Release 0.8.0 - 2019-03-01 19:29:11

  • Update CocoaPods & Carthage for 0.8.0 release (#370) - Michael Rebello (8b064bd)
  • Add ClientNetworkMonitor for tracking network changes (#387) - Michael Rebello (3b3c5c5)
  • First pass implementation of NIO client (#357) - George Barnett (97ff923)
  • Clean up gRPC.swift (#386) - Michael Rebello (ee0f374)
  • Add ability to manually shut down channels (#384) - Michael Rebello (930440a)
  • Update releasing instructions (#383) - Michael Rebello (f5c0d63)
  • Comments/cleanup to Package.swift. (#371) - Daniel Alm (ba335b2)
  • Refactor channel connectivity to avoid multiple spin loops (#380) - Michael Rebello (10aff09)
  • Improve error handling in NIO server. (#364) - George Barnett (158c4ef)
  • Fix channel credentials memory leak in shims (#369) - Kevin Sweeney (587218a)
  • Make ConnectivityObserver class final (#375) - Michael Rebello (5f24269)
  • Store the root certificates as a multi-line string literal. (#372) - Daniel Alm (ac3e175)
  • Run ChannelCrashTests on Linux/CI (#379) - Michael Rebello (b899a30)
  • Move ConnectivityState to new file & update initializer (#376) - Michael Rebello (9dff24d)
  • Merge pull request #350 from sergiocampama/http1 - Tim Burks (ac1939e)
  • Adds Echo Web example with functional prototype - Sergio Campama (86748a7)
  • Add HTTP1 Tests for GRPCSwiftNIO - Sergio Campama (eee57da)
  • Add gRPC Web support. - Sergio Campama (24c8e5d)
  • Proposal to fix #362. (#363) - Alexey Gordeev (0195dfd)
  • Allow client to specify metadata per call (#356) - Taeho Kim (3cd505a)
  • Update SwiftProtobuf to 1.3.1 (#367) - Michael Rebello (96bf49e)
  • Improve memory management in Channel (#368) - Kevin Sweeney (fcb8ab3)
  • XCode 10.1 + Carthage support (#360) - Dmitry Malakhov (99d3834)
  • Upgrade swift-nio to 1.12 - George Barnett (a43337c)
  • Allow "FileNaming" option to be set via CLI - George Barnett (78c5fed)
  • Bump podspec to 0.7.0 - Michael Rebello (6928fb2)

Release 0.7.0 - 2018-12-22 17:09:44

  • Support proto-gen-swift's proto-to-module mapping. (ff2d161 - Tony Allevato)
  • Update Linux build documentation (#346) (824814b - George Barnett)
  • Add libnghttp2 depdendency to Docker image (#338) (#344) (c3a03f1 - George Barnett)
  • Add environment flag for BoringSSL/OpenSSL on MacOS (#341) (54659b8 - james h)
  • First implementation of gRPC based on SwiftNIO (#281) (bf20e93 - Daniel Alm)
  • Remove .swift-version file (d3ad74b - Yosuke Ishikawa)
  • Add support for RPC status (#331) (b6dc500 - Sebastian Thiebaud)
  • Fix crash during Channel with subscription is destroying (#328) (2fd06dc - slavabulgakov)
  • Improve the documentation on building the protoc plugins and add a make plugin option. (48c274f - Daniel Alm)
  • Remove build-carthage altogether from CI for now. (7e6e28c - Daniel Alm)
  • Pull build-carthage to the beginning of the build process for faster CI iteration times on failing Carthage builds. (8cd1420 - Daniel Alm)
  • Minor tweaks in preparation for SwiftGRPCNIO. (00d18f6 - Daniel Alm)
  • Transmission type parameters for sync/async code generation (611e527 - Pontus Andersson)
  • Re-run make project-carthage (6cc5371 - Yosuke Ishikawa)
  • Replace absolute path with relative path after generating xcodeproj (30441f7 - Yosuke Ishikawa)
  • Docs/add question template (#310) (0faf1d6 - tikidunpon)
  • Add io.grpc. prefix to bundle identifier (c9b15b8 - Yosuke Ishikawa)
  • Update README.md (02b8fc5 - Daniel Alm)
  • Update README.md (8ff1778 - Daniel Alm)
  • Update README.md (ec7c3e4 - Daniel Alm)
  • Update README.md (52195d2 - Daniel Alm)
  • Tweak Echo Readme (see #273) (a387dd6 - Daniel Alm)
  • docs: add a mention about resolved issues about ssl. (5ba63b6 - tikidunpon)
  • docs: add issue template for bug reporting. (660adca - tikidunpon)

Release 0.6.0 - 2018-11-16 18:14:27

  • Cut a 0.6.0 release due to the breaking changes in SwiftProtobuf 1.1 (ed8a7e5 - GitHub)
  • Several fixes to the example projects. (696cd46 - Daniel Alm)
  • Update CLA link to point to CNCF CLA. (c3a071b - Tim Burks)
  • Update Carthage project with SwiftProtobuf 1.1.1 (9841080 - Michael Rebello)
  • Update examples to SwiftProtobuf 1.1.1 (a86b934 - Michael Rebello)
  • Update README with swift-protobuf version (9db4d0b - Michael Rebello)
  • Update SwiftProtobuf to 1.1.1 (6c6d9be - Michael Rebello)
  • Remove Linux RUNME.sh script (5dfda65 - Michael Rebello)

Release 0.5.1 - 2018-11-16 18:13:51

  • Fix -Wstrict-prototypes warning (c03c5c7 - Michael Rebello)
  • Bump podspec to 0.5.1 (021075e - Michael Rebello)
  • Project patch script rework. (4984951 - Daniel Alm)
  • Only make the Swift Xcode project (instead of a full Xcode build) on macOS CI, as that is covered by the Carthage build already. (165f684 - Daniel Alm)
  • Fix make clean and switch to Carthage debug builds on CI for improved performance. (3e8720e - Daniel Alm)
  • Support folding the output of individual build steps in the Travis log. (5130063 - Daniel Alm)
  • Lock the SwiftProtobuf dependency to 1.0.3, up to next minor (#289) (78ac010 - Daniel Alm)
  • version SwiftGRPC-Carthage.xcodeproj after CgRPC fix (55cc056 - Jonas Vautherin)
  • fix CgRPC target in generated xcodeproj files (bea6195 - Jonas Vautherin)
  • Add "Releasing" section for CocoaPods to the ReadMe (36dbda1 - Michael Rebello)
  • Update carthage xcodeproj (4cc9c3c - Jonas Vautherin)
  • version SwiftGRPC-Carthage.xcodeproj for Carthage (e07895f - Jonas Vautherin)
  • Add make target generating an xcodeproj for Carthage. (ea2babf - Jonas Vautherin)
  • fix make clean target (d8b2b51 - Jonas Vautherin)
  • [README] Update the link to the Echo sample project. (3eade39 - Shinping Bai)
  • PR Feedback (7340be3 - Brian Hatfield)
  • Expose google cgrpc credential mode (b4414b8 - Brian Hatfield)
  • Remove Czlib dependency from SimpleXcode example (325c9cf - koichi.tanaka)
  • Fix a header search path for CgRPC and some compile error for „Echo“ example (44dfc81 - koichi.tanaka)
  • Remove Czlib from README (0c3ce55 - koichi.tanaka)
  • Remove Czlib from dependencies (ec3c2a9 - koichi.tanaka)
  • Update Dockerfile (62e4e3c - GitHub)
  • add "make project" (05b27cb - GitHub)

Release 0.5.0 - 2018-11-16 18:13:18

  • Update podspec to version 0.5.0. (f11ad0b - Tim Burks)
  • Create ServerStatus in Core (045bc17 - ito_kyohei)
  • Code review fixes. (5f0531d - Daniel Alm)
  • Fix compilation under Linux. (3130eea - Daniel Alm)
  • Fix a bug and test for it. (b34303c - Daniel Alm)
  • Add a few more tests to ensure that trailing metadata is sent as expected. (22dee41 - Daniel Alm)
  • Reword documentation (c317f9d - Nate Armstrong)
  • Rename "services" to "serviceProviders". (a6e8cbb - Daniel Alm)
  • Add security tests to LinuxMain (df96858 - Nate Armstrong)
  • Document rootCerts param (22da1da - Nate Armstrong)
  • Update TestKeys generator and include cert files (1e19905 - Nate Armstrong)
  • Remove comment (d5ff00d - Nate Armstrong)
  • Add tests for mutual auth (18af90f - Nate Armstrong)
  • For service servers, replace inheritance with composition. (98f7fa6 - Daniel Alm)
  • Added requited designation to allow to create ServiceClient dynamically (12340a4 - Carlos Pages)
  • Make ChannelArgument extensible with custom values. (4f9e7a5 - Daniel Alm)
  • Make the build commands less verbose. (ec8f37b - Daniel Alm)
  • Pass pointer (2252397 - Nate Armstrong)
  • Fix memory leak and whitespace (706ed74 - Nate Armstrong)
  • Cast malloc result (a2b983a - Nate Armstrong)
  • Pass NULL if client certs or key are not given (f477ce5 - Nate Armstrong)
  • Update ServiceClient init (b795d14 - Nate Armstrong)
  • Add support for TLS mutual auth (0251dd8 - Nate Armstrong)
  • Fix building with a clean Xcode and add a CI run to ensure just that. (56ecb72 - Daniel Alm)
  • Fix linking with OpenSSL on Linux. (8ef093b - Daniel Alm)
  • Move another compiler directive into vendor-grpc.sh. (03f4309 - Daniel Alm)
  • Re-add swift-nio-zlib-support for macOS builds. (c12125b - Daniel Alm)
  • Update Google sample for recent API changes. (2cc6af7 - Tim Burks)
  • Move a compilation flag out of the Makefile and fix-project-settings.rb and into vendor-grpc.sh, which adds them to Sources/CgRPC/third_party/nanopb/pb.h. (4a16c13 - Daniel Alm)
  • Re-add swift-nio-zlib-support for macOS builds. (0368de9 - Daniel Alm)
  • Also update the Mac Travis system images to Xcode 9.3. (070170d - Daniel Alm)
  • Update .travis-install.sh to Swift 4.1.1. (470fb2f - Daniel Alm)
  • Update CgRPC to v1.12.0 and BoringSSL to 10.0.4 (I guess?). This change requires Swift 4.1 and Ruby (with the 'xcodeproj' gem) installed to compile if building via SPM. (75940a4 - Daniel Alm)
  • Link CgRPC with openssl instead of BoringSSL under Linux. (d56e1ca - Daniel Alm)
  • Add a few channel arguments (3cd89dd - Sebastian Thiebaud)
  • PR changes (0d25ef8 - Sebastian Thiebaud)
  • Remove print statements (ad6e022 - Sebastian Thiebaud)
  • PR changes (4ca615a - Sebastian Thiebaud)
  • Add comments (e853032 - Sebastian Thiebaud)
  • PR changes (0891482 - Sebastian Thiebaud)
  • Add timeout argument to makeCall (0d67da9 - ito_kyohei)
  • PR changes (255ce88 - Sebastian Thiebaud)
  • Make ServiceServer log calls to unknown methods. (e144258 - Daniel Alm)
  • Replace Metadata.description with Metadata.dictionaryRepresentation.description. (588963a - Daniel Alm)
  • Explicitly import dispatch (76faf09 - Chris Vanderschuere)
  • Implement connectivity state property and observers (#8) (0bd14d8 - Chris Vanderschuere)

Release 0.4.3 - 2018-11-16 17:46:47

  • Add more channel arguments (@SebastianThiebaud)
  • Add casts to fix warnings about ints used as void *. (@timburks)
  • README updates (@rebello95)
  • Fix memory leaks (@MrMage)
  • Avoid a try! call (@MrMage)
  • Make the test stubs thread safe (@MrMage)
  • Leave zlib dependency only for non-Apple platforms (@MrMage)
  • Add CocoaPods-based sample (@timburks)
  • Fix broken link (@koichi.tanaka)
  • Spin up dedicated queues for some operations (@MrMage)
  • Dispatch the actual request handlers on new threads (@MrMage)
  • Remove several now-unused DispatchQueue arguments (@MrMage)
  • Make the server dispatch each request handler on its own thread (@MrMage)
  • Streamline the interface of the server-side response handling code (@MrMage)
  • Fix several completion queue leaks in tests (@MrMage)
  • Add server/client codegen options to protoc (@rebello95)
  • Add docs for protoc parameter usage (@rebello95)

Fix some issues when running `pod spec lint` - 2018-11-16 17:34:59

Update podspec to use grpc-core 1.11.0, add timeouts to blocking send() and receive() calls. - 2018-04-17 18:18:46

Sweeping refactoring to improve error handling and code generation. - 2018-04-11 15:29:24

This release contains a large set of improvements led by @MrMage that improve error visibility and the structure of generated code. The Swift gRPC core now consists of two parts, a "Core" that provides basic services and a "Runtime" that contains code factored out of previously-generated code. With these changes, generated code is much lighter and easier to generate. To reduce dependencies, protoc-gen-swiftgrpc was rewritten to directly "print" generated code, and this simplification allowed us to move the plugin to the main Package.swift.

There are other pending improvements coming soon as patch version updates.

Use StatusCode enum for status codes, improve handling of unknown messages in generated code. - 2018-02-03 23:19:41

Improvements made during prototyping of a Swift webserver-to-gRPC proxy.

Improved Examples, Removed unneeded CountDownLatch class. - 2017-12-29 05:32:17

CountDownLatch was removed and replaced with DispatchSemaphore.

More consistent naming with Swift Protobuf - 2017-12-27 23:35:18

This update adds a dependency on SwiftProtobufPluginLibrary with the goal of using the SwiftProtobufNamer class to generate names that are consistent with the ones used by the Swift Protobuf project. Currently only message names are affected.

It also manually imports code used to determine file names for generated code to allow the default path names of files generated by protoc-gen-swiftgrpc to be more consistent with those from protoc-gen-swift.

Simpler client creation, secure connections are now the default. - 2017-12-22 23:44:32

Previous versions required a separate "roots.pem" file to be loaded to initialize secure connections. Now this file is built into the library binary (see Sources/gRPC/Roots.swift) so clients no longer have to worry about providing this file.

In a related simplification, the Channel constructor now takes an optional "secure" argument whose default value is true. Note that this will break code that calls the Channel constructor with just an address since previously that created insecure connections. To get an insecure channel, add "secure:false" to your Channel constructor.

Migrating to Swift 4 - 2017-09-02 23:58:08

This release moves from Swift 3 to Swift 4. The update required changes to the modulemap for CgRPC that could break Swift 3 builds. If you still need to build with Swift 3, add the following line to the modulemap:

link "CgRPC"

See the change for more details.