1*cc02d7e2SAndroid Build Coastguard Worker[](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