xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/README.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 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