xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/README-CFSTREAM.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker[![Cocoapods](https://img.shields.io/cocoapods/v/gRPC.svg)](https://cocoapods.org/pods/gRPC)
2*cc02d7e2SAndroid Build Coastguard Worker# gRPC Objective-C with CFStream
3*cc02d7e2SAndroid Build Coastguard Worker
4*cc02d7e2SAndroid Build Coastguard WorkergRPC now provides the option to use Apple's CFStream API (rather than TCP
5*cc02d7e2SAndroid Build Coastguard Workersockets) for networking. Using CFStream resolves a bunch of network connectivity transition issues
6*cc02d7e2SAndroid Build Coastguard Worker(see the [doc](https://github.com/grpc/grpc/blob/master/src/objective-c/NetworkTransitionBehavior.md)
7*cc02d7e2SAndroid Build Coastguard Workerfor more information).
8*cc02d7e2SAndroid Build Coastguard Worker
9*cc02d7e2SAndroid Build Coastguard Worker<s>CFStream integration is now in experimental state. You will need explicit opt-in to use it to get
10*cc02d7e2SAndroid Build Coastguard Workerthe benefits of resolving the issues above. We expect to make CFStream the default networking
11*cc02d7e2SAndroid Build Coastguard Workerinterface that gRPC uses when it is ready for production.</s>
12*cc02d7e2SAndroid Build Coastguard Worker
13*cc02d7e2SAndroid Build Coastguard WorkerAs of v1.21.0, CFStream integration is now the default networking stack being used by gRPC
14*cc02d7e2SAndroid Build Coastguard WorkerObjective-C on iOS layer. You get to use it automatically without special configuration needed. See
15*cc02d7e2SAndroid Build Coastguard Workerbelow on how to disable CFStream in case of problem.
16*cc02d7e2SAndroid Build Coastguard Worker
17*cc02d7e2SAndroid Build Coastguard WorkerAs of v1.23.0, CFStream is enabled by default on iOS for all wrapped languages. See below on how to
18*cc02d7e2SAndroid Build Coastguard Workerdisable CFStream in case of a problem.
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Worker## Usage
21*cc02d7e2SAndroid Build Coastguard WorkerIf you use gRPC on iOS, CFStream is on automatically. If you use it on other
22*cc02d7e2SAndroid Build Coastguard Workerplatforms, you can turn it on with macro `GRPC_CFSTREAM=1` for the pod 'gRPC-Core' and 'gRPC'. In
23*cc02d7e2SAndroid Build Coastguard Workercase of problem and you want to disable CFStream on iOS, you can set environment variable
24*cc02d7e2SAndroid Build Coastguard Worker"grpc\_cfstream=0".
25*cc02d7e2SAndroid Build Coastguard Worker
26*cc02d7e2SAndroid Build Coastguard Worker## Caveats
27*cc02d7e2SAndroid Build Coastguard WorkerIt is known to us that the CFStream API has some bug (FB6162039) which will cause gRPC's CFStream
28*cc02d7e2SAndroid Build Coastguard Workernetworking layer to stall occasionally. The issue mostly occur on MacOS systems (including iOS
29*cc02d7e2SAndroid Build Coastguard Workersimulators on MacOS); iOS may be affected too but we have not seen issue there. gRPC provides a
30*cc02d7e2SAndroid Build Coastguard Workerworkaround to this problem with an alternative poller based on CFRunLoop. The poller can be enabled
31*cc02d7e2SAndroid Build Coastguard Workerby setting environment variable `GRPC_CFSTREAM_RUN_LOOP=1`. Note that the poller is a client side
32*cc02d7e2SAndroid Build Coastguard Workeronly poller that does not support running a server on it. That means if an app opts in to the
33*cc02d7e2SAndroid Build Coastguard WorkerCFRunLoop-based poller, the app cannot host a gRPC server (gRPC Objective-C does not support running
34*cc02d7e2SAndroid Build Coastguard Workera server but other languages running on iOS do support it).
35*cc02d7e2SAndroid Build Coastguard Worker
36*cc02d7e2SAndroid Build Coastguard Worker## Notes
37*cc02d7e2SAndroid Build Coastguard Worker
38*cc02d7e2SAndroid Build Coastguard Worker- Currently we do not support platforms other than iOS, although it is likely that this integration
39*cc02d7e2SAndroid Build Coastguard Worker  can run on MacOS targets with Apple's compiler.
40*cc02d7e2SAndroid Build Coastguard Worker- Let us know if you meet any issue by filing issue and ping @stanleycheung.
41