1*cc02d7e2SAndroid Build Coastguard Worker[](https://cocoapods.org/pods/gRPC) 2*cc02d7e2SAndroid Build Coastguard Worker# gRPC for Objective-C 3*cc02d7e2SAndroid Build Coastguard WorkergRPC Objective C library provides Objective C API for users to make gRPC calls on iOS or OS X 4*cc02d7e2SAndroid Build Coastguard Workerplatforms. Currently, the minimum supported iOS version is 9.0 and OS X version is 10.10 (Yosemite). 5*cc02d7e2SAndroid Build Coastguard Worker 6*cc02d7e2SAndroid Build Coastguard WorkerWhile gRPC doesn't require the use of an IDL to describe the API of services, using one simplifies 7*cc02d7e2SAndroid Build Coastguard Workerusage and adds some interoperability guarantees. Here we use [Protocol Buffers][], and provide a 8*cc02d7e2SAndroid Build Coastguard Workerplugin for the Protobuf Compiler (_protoc_) to generate client libraries to communicate with gRPC 9*cc02d7e2SAndroid Build Coastguard Workerservices. 10*cc02d7e2SAndroid Build Coastguard Worker 11*cc02d7e2SAndroid Build Coastguard Worker- [Write your API declaration in proto format](#write-protos) 12*cc02d7e2SAndroid Build Coastguard Worker- [Integrate a proto library in your project](#cocoapods) 13*cc02d7e2SAndroid Build Coastguard Worker- [Use the generated library in your code](#use) 14*cc02d7e2SAndroid Build Coastguard Worker- [Use gRPC without Protobuf](#no-proto) 15*cc02d7e2SAndroid Build Coastguard Worker- [Alternatives to the steps above](#alternatives) 16*cc02d7e2SAndroid Build Coastguard Worker - [Install protoc with the gRPC plugin](#install) 17*cc02d7e2SAndroid Build Coastguard Worker - [Install protoc and the gRPC plugin without using Homebrew](#no-homebrew) 18*cc02d7e2SAndroid Build Coastguard Worker - [Integrate the generated gRPC library without using Cocoapods](#no-cocoapods) 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Worker<a name="write-protos"></a> 21*cc02d7e2SAndroid Build Coastguard Worker## Write your API declaration in proto format 22*cc02d7e2SAndroid Build Coastguard Worker 23*cc02d7e2SAndroid Build Coastguard WorkerFor this you can consult the [Protocol Buffers][]' official documentation, or learn from a quick 24*cc02d7e2SAndroid Build Coastguard Workerexample [here](https://github.com/grpc/grpc/tree/master/examples#defining-a-service). 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard Worker<a name="cocoapods"></a> 27*cc02d7e2SAndroid Build Coastguard Worker## Integrate a proto library in your project 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard WorkerInstall [Cocoapods](https://cocoapods.org/#install). 30*cc02d7e2SAndroid Build Coastguard Worker 31*cc02d7e2SAndroid Build Coastguard WorkerYou need to create a Podspec file for your proto library. You may simply copy the following example 32*cc02d7e2SAndroid Build Coastguard Workerto the directory where your `.proto` files are located, updating the name, version and license as 33*cc02d7e2SAndroid Build Coastguard Workernecessary. You also need to set the `pods_root` variable to the correct value, depending on where 34*cc02d7e2SAndroid Build Coastguard Workeryou place this podspec relative to your Podfile. 35*cc02d7e2SAndroid Build Coastguard Worker 36*cc02d7e2SAndroid Build Coastguard Worker```ruby 37*cc02d7e2SAndroid Build Coastguard WorkerPod::Spec.new do |s| 38*cc02d7e2SAndroid Build Coastguard Worker s.name = '<Podspec file name>' 39*cc02d7e2SAndroid Build Coastguard Worker s.version = '0.0.1' 40*cc02d7e2SAndroid Build Coastguard Worker s.license = '...' 41*cc02d7e2SAndroid Build Coastguard Worker s.authors = { '<your name>' => '<your email>' } 42*cc02d7e2SAndroid Build Coastguard Worker s.homepage = '...' 43*cc02d7e2SAndroid Build Coastguard Worker s.summary = '...' 44*cc02d7e2SAndroid Build Coastguard Worker s.source = { :git => 'https://github.com/...' } 45*cc02d7e2SAndroid Build Coastguard Worker 46*cc02d7e2SAndroid Build Coastguard Worker s.ios.deployment_target = '10.0' 47*cc02d7e2SAndroid Build Coastguard Worker s.osx.deployment_target = '10.12' 48*cc02d7e2SAndroid Build Coastguard Worker s.tvos.deployment_target = '12.0' 49*cc02d7e2SAndroid Build Coastguard Worker s.watchos.deployment_target = '6.0' 50*cc02d7e2SAndroid Build Coastguard Worker 51*cc02d7e2SAndroid Build Coastguard Worker # Base directory where the .proto files are. 52*cc02d7e2SAndroid Build Coastguard Worker src = '.' 53*cc02d7e2SAndroid Build Coastguard Worker 54*cc02d7e2SAndroid Build Coastguard Worker # We'll use protoc with the gRPC plugin. 55*cc02d7e2SAndroid Build Coastguard Worker s.dependency '!ProtoCompiler-gRPCPlugin', '~> 1.0' 56*cc02d7e2SAndroid Build Coastguard Worker 57*cc02d7e2SAndroid Build Coastguard Worker # Pods directory corresponding to this app's Podfile, relative to the location of this podspec. 58*cc02d7e2SAndroid Build Coastguard Worker pods_root = '<path to your Podfile>/Pods' 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard Worker # Path where Cocoapods downloads protoc and the gRPC plugin. 61*cc02d7e2SAndroid Build Coastguard Worker protoc_dir = "#{pods_root}/!ProtoCompiler" 62*cc02d7e2SAndroid Build Coastguard Worker protoc = "#{protoc_dir}/protoc" 63*cc02d7e2SAndroid Build Coastguard Worker plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin" 64*cc02d7e2SAndroid Build Coastguard Worker 65*cc02d7e2SAndroid Build Coastguard Worker # Directory where you want the generated files to be placed. This is an example. 66*cc02d7e2SAndroid Build Coastguard Worker dir = "#{pods_root}/#{s.name}" 67*cc02d7e2SAndroid Build Coastguard Worker 68*cc02d7e2SAndroid Build Coastguard Worker # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. 69*cc02d7e2SAndroid Build Coastguard Worker # You can run this command manually if you later change your protos and need to regenerate. 70*cc02d7e2SAndroid Build Coastguard Worker # Alternatively, you can advance the version of this podspec and run `pod update`. 71*cc02d7e2SAndroid Build Coastguard Worker s.prepare_command = <<-CMD 72*cc02d7e2SAndroid Build Coastguard Worker mkdir -p #{dir} 73*cc02d7e2SAndroid Build Coastguard Worker #{protoc} \ 74*cc02d7e2SAndroid Build Coastguard Worker --plugin=protoc-gen-grpc=#{plugin} \ 75*cc02d7e2SAndroid Build Coastguard Worker --objc_out=#{dir} \ 76*cc02d7e2SAndroid Build Coastguard Worker --grpc_out=#{dir} \ 77*cc02d7e2SAndroid Build Coastguard Worker -I #{src} \ 78*cc02d7e2SAndroid Build Coastguard Worker -I #{protoc_dir} \ 79*cc02d7e2SAndroid Build Coastguard Worker #{src}/*.proto 80*cc02d7e2SAndroid Build Coastguard Worker CMD 81*cc02d7e2SAndroid Build Coastguard Worker 82*cc02d7e2SAndroid Build Coastguard Worker # The --objc_out plugin generates a pair of .pbobjc.h/.pbobjc.m files for each .proto file. 83*cc02d7e2SAndroid Build Coastguard Worker s.subspec 'Messages' do |ms| 84*cc02d7e2SAndroid Build Coastguard Worker ms.source_files = "#{dir}/*.pbobjc.{h,m}" 85*cc02d7e2SAndroid Build Coastguard Worker ms.header_mappings_dir = dir 86*cc02d7e2SAndroid Build Coastguard Worker ms.requires_arc = false 87*cc02d7e2SAndroid Build Coastguard Worker # The generated files depend on the protobuf runtime. 88*cc02d7e2SAndroid Build Coastguard Worker ms.dependency 'Protobuf' 89*cc02d7e2SAndroid Build Coastguard Worker end 90*cc02d7e2SAndroid Build Coastguard Worker 91*cc02d7e2SAndroid Build Coastguard Worker # The --objcgrpc_out plugin generates a pair of .pbrpc.h/.pbrpc.m files for each .proto file with 92*cc02d7e2SAndroid Build Coastguard Worker # a service defined. 93*cc02d7e2SAndroid Build Coastguard Worker s.subspec 'Services' do |ss| 94*cc02d7e2SAndroid Build Coastguard Worker ss.source_files = "#{dir}/*.pbrpc.{h,m}" 95*cc02d7e2SAndroid Build Coastguard Worker ss.header_mappings_dir = dir 96*cc02d7e2SAndroid Build Coastguard Worker ss.requires_arc = true 97*cc02d7e2SAndroid Build Coastguard Worker # The generated files depend on the gRPC runtime, and on the files generated by `--objc_out`. 98*cc02d7e2SAndroid Build Coastguard Worker ss.dependency 'gRPC-ProtoRPC' 99*cc02d7e2SAndroid Build Coastguard Worker ss.dependency "#{s.name}/Messages" 100*cc02d7e2SAndroid Build Coastguard Worker end 101*cc02d7e2SAndroid Build Coastguard Worker 102*cc02d7e2SAndroid Build Coastguard Worker s.pod_target_xcconfig = { 103*cc02d7e2SAndroid Build Coastguard Worker # This is needed by all pods that depend on Protobuf: 104*cc02d7e2SAndroid Build Coastguard Worker 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', 105*cc02d7e2SAndroid Build Coastguard Worker # This is needed by all pods that depend on gRPC-RxLibrary: 106*cc02d7e2SAndroid Build Coastguard Worker 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', 107*cc02d7e2SAndroid Build Coastguard Worker } 108*cc02d7e2SAndroid Build Coastguard Workerend 109*cc02d7e2SAndroid Build Coastguard Worker``` 110*cc02d7e2SAndroid Build Coastguard Worker 111*cc02d7e2SAndroid Build Coastguard WorkerThe file should be named `<Podspec file name>.podspec`. 112*cc02d7e2SAndroid Build Coastguard Worker 113*cc02d7e2SAndroid Build Coastguard WorkerNote: If your proto files are in a directory hierarchy, you might want to adjust the _globs_ used in 114*cc02d7e2SAndroid Build Coastguard Workerthe sample Podspec above. For example, you could use: 115*cc02d7e2SAndroid Build Coastguard Worker 116*cc02d7e2SAndroid Build Coastguard Worker```ruby 117*cc02d7e2SAndroid Build Coastguard Worker s.prepare_command = <<-CMD 118*cc02d7e2SAndroid Build Coastguard Worker ... 119*cc02d7e2SAndroid Build Coastguard Worker `find . -name *.proto -print | xargs` 120*cc02d7e2SAndroid Build Coastguard Worker CMD 121*cc02d7e2SAndroid Build Coastguard Worker ... 122*cc02d7e2SAndroid Build Coastguard Worker ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}" 123*cc02d7e2SAndroid Build Coastguard Worker ... 124*cc02d7e2SAndroid Build Coastguard Worker ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}" 125*cc02d7e2SAndroid Build Coastguard Worker``` 126*cc02d7e2SAndroid Build Coastguard Worker 127*cc02d7e2SAndroid Build Coastguard WorkerOnce your library has a Podspec, Cocoapods can install it into any XCode project. For that, go into 128*cc02d7e2SAndroid Build Coastguard Workeryour project's directory and create a Podfile by running: 129*cc02d7e2SAndroid Build Coastguard Worker 130*cc02d7e2SAndroid Build Coastguard Worker```sh 131*cc02d7e2SAndroid Build Coastguard Workerpod init 132*cc02d7e2SAndroid Build Coastguard Worker``` 133*cc02d7e2SAndroid Build Coastguard Worker 134*cc02d7e2SAndroid Build Coastguard WorkerNext add a line to your Podfile to refer to your library's Podspec. Use `:path` as described 135*cc02d7e2SAndroid Build Coastguard Worker[here](https://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine): 136*cc02d7e2SAndroid Build Coastguard Worker 137*cc02d7e2SAndroid Build Coastguard Worker```ruby 138*cc02d7e2SAndroid Build Coastguard Workerpod '<Podspec file name>', :path => 'path/to/the/directory/of/your/podspec' 139*cc02d7e2SAndroid Build Coastguard Worker``` 140*cc02d7e2SAndroid Build Coastguard Worker 141*cc02d7e2SAndroid Build Coastguard WorkerYou can look at this [example Podfile][]. 142*cc02d7e2SAndroid Build Coastguard Worker 143*cc02d7e2SAndroid Build Coastguard WorkerFinally, in your project's directory, run: 144*cc02d7e2SAndroid Build Coastguard Worker 145*cc02d7e2SAndroid Build Coastguard Worker```sh 146*cc02d7e2SAndroid Build Coastguard Workerpod install 147*cc02d7e2SAndroid Build Coastguard Worker``` 148*cc02d7e2SAndroid Build Coastguard Worker 149*cc02d7e2SAndroid Build Coastguard Worker<a name="use"></a> 150*cc02d7e2SAndroid Build Coastguard Worker## Use the generated library in your code 151*cc02d7e2SAndroid Build Coastguard Worker 152*cc02d7e2SAndroid Build Coastguard WorkerPlease check the [example apps][] for examples of how to use a generated gRPC library. 153*cc02d7e2SAndroid Build Coastguard Worker 154*cc02d7e2SAndroid Build Coastguard Worker<a name="no-proto"></a> 155*cc02d7e2SAndroid Build Coastguard Worker## Use gRPC without Protobuf 156*cc02d7e2SAndroid Build Coastguard Worker 157*cc02d7e2SAndroid Build Coastguard WorkerThis [tests file](https://github.com/grpc/grpc/tree/master/src/objective-c/tests/GRPCClientTests.m) 158*cc02d7e2SAndroid Build Coastguard Workershows how to use the generic gRPC Objective-C client without generated protobuf files. 159*cc02d7e2SAndroid Build Coastguard Worker 160*cc02d7e2SAndroid Build Coastguard Worker<a name="alternatives"></a> 161*cc02d7e2SAndroid Build Coastguard Worker## Alternatives to the steps above 162*cc02d7e2SAndroid Build Coastguard Worker 163*cc02d7e2SAndroid Build Coastguard Worker<a name="install"></a> 164*cc02d7e2SAndroid Build Coastguard Worker### Install _protoc_ with the gRPC plugin 165*cc02d7e2SAndroid Build Coastguard Worker 166*cc02d7e2SAndroid Build Coastguard WorkerAlthough it's not recommended (because it can lead to hard-to-solve version conflicts), it is 167*cc02d7e2SAndroid Build Coastguard Workersometimes more convenient to install _protoc_ and the gRPC plugin in your development machine, 168*cc02d7e2SAndroid Build Coastguard Workerinstead of letting Cocoapods download the appropriate versions for you. To do so, on Mac OS X or 169*cc02d7e2SAndroid Build Coastguard Workerlater, install [homebrew][]. 170*cc02d7e2SAndroid Build Coastguard Worker 171*cc02d7e2SAndroid Build Coastguard WorkerThe run the following command to install _protoc_ and the gRPC _protoc_ plugin: 172*cc02d7e2SAndroid Build Coastguard Worker```sh 173*cc02d7e2SAndroid Build Coastguard Worker$ curl -fsSL https://goo.gl/getgrpc | bash - 174*cc02d7e2SAndroid Build Coastguard Worker``` 175*cc02d7e2SAndroid Build Coastguard WorkerThis will download and run the [gRPC install script][]. 176*cc02d7e2SAndroid Build Coastguard Worker 177*cc02d7e2SAndroid Build Coastguard Worker<a name="no-homebrew"></a> 178*cc02d7e2SAndroid Build Coastguard Worker### Install _protoc_ and the gRPC plugin without using Homebrew 179*cc02d7e2SAndroid Build Coastguard Worker 180*cc02d7e2SAndroid Build Coastguard WorkerFirst install v3 of the Protocol Buffers compiler (_protoc_), by cloning 181*cc02d7e2SAndroid Build Coastguard Worker[its Git repository](https://github.com/protocolbuffers/protobuf) and following these 182*cc02d7e2SAndroid Build Coastguard Worker[installation instructions](https://github.com/protocolbuffers/protobuf#c-installation---unix) 183*cc02d7e2SAndroid Build Coastguard Worker(the ones titled C++; don't miss the note for Mac users). 184*cc02d7e2SAndroid Build Coastguard Worker 185*cc02d7e2SAndroid Build Coastguard WorkerThen clone this repository and execute the following commands from the root directory where it was 186*cc02d7e2SAndroid Build Coastguard Workercloned. 187*cc02d7e2SAndroid Build Coastguard Worker 188*cc02d7e2SAndroid Build Coastguard WorkerCompile the gRPC plugins for _protoc_: 189*cc02d7e2SAndroid Build Coastguard Worker```sh 190*cc02d7e2SAndroid Build Coastguard Workermake grpc_objective_c_plugin 191*cc02d7e2SAndroid Build Coastguard Worker``` 192*cc02d7e2SAndroid Build Coastguard Worker 193*cc02d7e2SAndroid Build Coastguard WorkerCreate a symbolic link to the compiled plugin binary somewhere in your `$PATH`: 194*cc02d7e2SAndroid Build Coastguard Worker```sh 195*cc02d7e2SAndroid Build Coastguard Workerln -s `pwd`/bins/opt/grpc_objective_c_plugin /usr/local/bin/protoc-gen-objcgrpc 196*cc02d7e2SAndroid Build Coastguard Worker``` 197*cc02d7e2SAndroid Build Coastguard Worker(Notice that the name of the created link must begin with "`protoc-gen-`" for _protoc_ to recognize 198*cc02d7e2SAndroid Build Coastguard Workerit as a plugin). 199*cc02d7e2SAndroid Build Coastguard Worker 200*cc02d7e2SAndroid Build Coastguard WorkerIf you don't want to create the symbolic link, you can alternatively copy the binary (with the 201*cc02d7e2SAndroid Build Coastguard Workerappropriate name). Or you might prefer instead to specify the plugin's path as a flag when invoking 202*cc02d7e2SAndroid Build Coastguard Worker_protoc_, in which case no system modification nor renaming is necessary. 203*cc02d7e2SAndroid Build Coastguard Worker 204*cc02d7e2SAndroid Build Coastguard Worker<a name="no-cocoapods"></a> 205*cc02d7e2SAndroid Build Coastguard Worker### Integrate the generated gRPC library without using Cocoapods 206*cc02d7e2SAndroid Build Coastguard Worker 207*cc02d7e2SAndroid Build Coastguard WorkerYou need to compile the generated `.pbobjc.*` files (the enums and messages) without ARC support, 208*cc02d7e2SAndroid Build Coastguard Workerand the generated `.pbrpc.*` files (the services) with ARC support. The generated code depends on 209*cc02d7e2SAndroid Build Coastguard Workerv0.12+ of the Objective-C gRPC runtime library and v3.0.0-alpha-4+ of the Objective-C Protobuf 210*cc02d7e2SAndroid Build Coastguard Workerruntime library. 211*cc02d7e2SAndroid Build Coastguard Worker 212*cc02d7e2SAndroid Build Coastguard WorkerThese libraries need to be integrated into your project as described in their respective Podspec 213*cc02d7e2SAndroid Build Coastguard Workerfiles: 214*cc02d7e2SAndroid Build Coastguard Worker 215*cc02d7e2SAndroid Build Coastguard Worker* [Podspec](https://github.com/grpc/grpc/blob/master/gRPC.podspec) for the Objective-C gRPC runtime 216*cc02d7e2SAndroid Build Coastguard Workerlibrary. This can be tedious to configure manually. 217*cc02d7e2SAndroid Build Coastguard Worker* [Podspec](https://github.com/protocolbuffers/protobuf/blob/master/Protobuf.podspec) for the 218*cc02d7e2SAndroid Build Coastguard WorkerObjective-C Protobuf runtime library. 219*cc02d7e2SAndroid Build Coastguard Worker 220*cc02d7e2SAndroid Build Coastguard Worker[Protocol Buffers]:https://developers.google.com/protocol-buffers/ 221*cc02d7e2SAndroid Build Coastguard Worker[homebrew]:http://brew.sh 222*cc02d7e2SAndroid Build Coastguard Worker[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install 223*cc02d7e2SAndroid Build Coastguard Worker[example Podfile]:https://github.com/grpc/grpc/blob/master/examples/objective-c/helloworld/Podfile 224*cc02d7e2SAndroid Build Coastguard Worker[example apps]: https://github.com/grpc/grpc/tree/master/examples/objective-c 225*cc02d7e2SAndroid Build Coastguard Worker 226*cc02d7e2SAndroid Build Coastguard Worker## Use gRPC with OpenSSL 227*cc02d7e2SAndroid Build Coastguard WorkergRPC uses BoringSSL as its dependency, which is a fork of OpenSSL and export a number of symbols 228*cc02d7e2SAndroid Build Coastguard Workerthat are the same as OpenSSL. gRPC avoids conflicts of these symbols by renaming BoringSSL symbols. 229*cc02d7e2SAndroid Build Coastguard Worker 230*cc02d7e2SAndroid Build Coastguard WorkerIf you need gRPC to use OpenSSL instead of BoringSSL (e.g. for the benefit of reducing the binary 231*cc02d7e2SAndroid Build Coastguard Workersize of your product), you need to make a local `gRPC-Core` podspec and tweak it accordingly: 232*cc02d7e2SAndroid Build Coastguard Worker- Copy the version of `/gRPC-Core.podspec` you wish to use from Github into the repository of your 233*cc02d7e2SAndroid Build Coastguard Worker app; 234*cc02d7e2SAndroid Build Coastguard Worker- In your `Podfile`, add the following line: 235*cc02d7e2SAndroid Build Coastguard Worker``` 236*cc02d7e2SAndroid Build Coastguard Workerpod `gRPC-Core`, :podspec => "." # assuming gRPC-Core.podspec is in the same directory as your Podfile 237*cc02d7e2SAndroid Build Coastguard Worker``` 238*cc02d7e2SAndroid Build Coastguard Worker- Remove [the 239*cc02d7e2SAndroid Build Coastguard Worker macro](https://github.com/grpc/grpc/blob/b24b212ee585d376c618235905757b2445ac6461/gRPC-Core.podspec#L186) 240*cc02d7e2SAndroid Build Coastguard Worker `GRPC_SHADOW_BORINGSSL_SYMBOLS` to disable symbol renaming; 241*cc02d7e2SAndroid Build Coastguard Worker- Substitude the `BoringSSL-GRPC` 242*cc02d7e2SAndroid Build Coastguard Worker [dependency](https://github.com/grpc/grpc/blob/b24b212ee585d376c618235905757b2445ac6461/gRPC-Core.podspec#L184) 243*cc02d7e2SAndroid Build Coastguard Worker to whatever pod of OpenSSL your other libraries use. 244*cc02d7e2SAndroid Build Coastguard Worker 245*cc02d7e2SAndroid Build Coastguard WorkerThese steps should allow gRPC to use OpenSSL and drop BoringSSL dependency. If you see any issue, 246*cc02d7e2SAndroid Build Coastguard Workerfile an issue to us. 247*cc02d7e2SAndroid Build Coastguard Worker 248*cc02d7e2SAndroid Build Coastguard Worker## Upgrade issue with BoringSSL 249*cc02d7e2SAndroid Build Coastguard WorkerIf you were using an old version of gRPC (<= v1.14) which depended on pod `BoringSSL` rather than 250*cc02d7e2SAndroid Build Coastguard Worker`BoringSSL-GRPC` and meet issue with the library like: 251*cc02d7e2SAndroid Build Coastguard Worker``` 252*cc02d7e2SAndroid Build Coastguard Workerld: framework not found openssl 253*cc02d7e2SAndroid Build Coastguard Worker``` 254*cc02d7e2SAndroid Build Coastguard Workerupdating `-framework openssl` in Other Linker Flags to `-framework openssl_grpc` in your project 255*cc02d7e2SAndroid Build Coastguard Workermay resolve this issue (see [#16821](https://github.com/grpc/grpc/issues/16821)). 256