This document outlines the current plan to deprecate the 0.x
release series of gRPC Swift.
gRPC Swift versions v0.x
based on gRPC-Core will soon be replaced with a re-implementation based on SwiftNIO.
We strongly suggest that new projects use the re-implementation from the nio
branch which we consider to be production ready.
In the coming weeks this branch (currently master
) containing the 0.x
releases will be renamed cgrpc
. The nio
branch containing the new implementation will subsequently be renamed to master
and become the default branch. A 1.0.0
tag will also be created.
Version | Branch Now | Branch After Deprecation |
---|---|---|
0.x |
master |
cgrpc |
1.x |
nio |
master |
We have rewritten gRPC Swift on top of SwiftNIO, an open-source asynchronous event-driven networking framework created by Apple. Our implementation will be written in Swift and will not wrap the gRPC Core C library.
There are a number of reasons we have rewritten gRPC Swift:
- The
0.x
releases are built on top of a C interface to the gRPC Core library provided by the gRPC project. This led to a number of memory safety issues and is easy to hold incorrectly. - Network connectivity changes (e.g. LTE to WiFi, 3G to LTE, etc.) are not handled well by the networking stack in the gRPC Core C library. Network.framework (where available, see below) alleviates this problem and has integration with SwiftNIO.
- SwiftNIO has gained a lot of traction in the Swift on Server community due to its performance. We believe we can leverage this to improve the performance and stability of gRPC Swift.
- Vendoring copies of the gRPC Core library and BoringSSL is a source of frustration for developers and users.
We will continue to patch the cgrpc
branch for security fixes and serious bugs only. There will be no feature development on the cgrpc
branch and the version of the gRPC Core library will not be updated (unless necessary for a security fix).
We plan to deprecate versions 0.x
and tag version 1.0.0
by the end of 2019.
Swift 5.0 and later.
We have the same platform support as SwiftNIO. That is:
- macOS 10.12+, iOS 10+
- macOS 10.14+, iOS 12+, or tvOS 12+ (with Network.framework support via NIO Transport Services)
- Ubuntu 14.04+
We will provide support for Swift Package Manager as we believe that its integration with Xcode is the most convenient way to manage packages.
CocoaPods support is not currently planned. However, we may provide support if there is significant community interest.
Carthage will not be supported as it has been the source of a number of issues in the past.
Absolutely! Head over to the nio
branch and check out the quick-start guide or basic tutorial.
If there’s something you can't find that was in the previous implementation or if anything is unclear then please reach out to us by filing an issue. We also have a dedicated space in the Swift forums for the project.