diff --git a/objective-c/route_guide/README.md b/objective-c/route_guide/README.md index 8c677e910ec..e1126735b4c 100644 --- a/objective-c/route_guide/README.md +++ b/objective-c/route_guide/README.md @@ -71,7 +71,7 @@ The next sections guide you step-by-step through the creation of this proto serv ## Defining the service -Our first step is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`grpc-common/protos/route_guide.proto`](https://github.com/grpc/grpc-common/blob/master/protos/route_guide.proto). +First let's look at how the service we're using is defined. A gRPC *service* and its method *request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file for our example in [`grpc-common/protos/route_guide.proto`](https://github.com/grpc/grpc-common/blob/master/protos/route_guide.proto). To define a service, you specify a named `service` in your .proto file: @@ -135,7 +135,7 @@ option objc_class_prefix = "RTG"; Next we need to generate the gRPC client interfaces from our .proto service definition. We do this using the protocol buffer compiler (`protoc`) with a special gRPC Objective-C plugin. -For simplicity, we've provided a [Podspec file](https://github.com/grpc/grpc-common/blob/master/objective-c/route_guide/RouteGuide.podspec) that runs `protoc` for you with the appropriate plugin, input, and output, and describes how to compile the generated files. You just need to run in this directory: +For simplicity, we've provided a [Podspec file](https://github.com/grpc/grpc-common/blob/master/objective-c/route_guide/RouteGuide.podspec) that runs `protoc` for you with the appropriate plugin, input, and output, and describes how to compile the generated files. You just need to run in this directory (`grpc-common/objective-c/route_guide`): ```shell $ pod install @@ -147,7 +147,7 @@ which, before installing the generated library in the XCode project of this samp $ protoc -I ../../protos --objc_out=Pods/RouteGuide --objcgrpc_out=Pods/RouteGuide ../../protos/route_guide.proto ``` -Running this command generates the following files in under `Pods/RouteGuide/`: +Running this command generates the following files under `Pods/RouteGuide/`: - `RouteGuide.pbobjc.h`, the header which declares your generated message classes. - `RouteGuide.pbobjc.m`, which contains the implementation of your message classes. - `RouteGuide.pbrpc.h`, the header which declares your generated service classes. @@ -155,9 +155,9 @@ Running this command generates the following files in under `Pods/RouteGuide/`: These contain: - All the protocol buffer code to populate, serialize, and retrieve our request and response message types. -- A class called `RTGRouteGuide` that for clients to call with the methods defined in the `RouteGuide` service. +- A class called `RTGRouteGuide` that lets clients call the methods defined in the `RouteGuide` service. -The provided Podspec file works for any proto library you define; you just need to replace the name (matching the file name), version, and other metadata. +You can also use the provided Podspec file to generate client code from any other proto service definition; just replace the name (matching the file name), version, and other metadata. @@ -188,7 +188,7 @@ Now let's look at how we call our service methods. As you will see, all these me #### Simple RPC -Calling the simple RPC `GetFeature` is nearly as straightforward as calling any other aynschronous method on Cocoa. +Calling the simple RPC `GetFeature` is nearly as straightforward as calling any other asynchronous method on Cocoa. ```objective-c RTGPoint *point = [RTGPoint message]; @@ -204,7 +204,7 @@ point.longitude = -74E7; }]; ``` -As you can see, we create and populate a request protocol buffer object (in our case `RTGPoint`). Then, we call the method on the client object, passing it the request, and a block to handle the response (or any RPC error). If the RPC finished successfully, the handler block is called with a `nil` error argument, and we can read the response information from the server from the response argument. If, instead, some RPC error happened, the handler block is called with a `nil` response argument, and we can read the details of the problem from the error argument. +As you can see, we create and populate a request protocol buffer object (in our case `RTGPoint`). Then, we call the method on the client object, passing it the request, and a block to handle the response (or any RPC error). If the RPC finishes successfully, the handler block is called with a `nil` error argument, and we can read the response information from the server from the response argument. If, instead, some RPC error happens, the handler block is called with a `nil` response argument, and we can read the details of the problem from the error argument. ```objective-c NSLog(@"Found feature called %@ at %@.", response.name, response.location); @@ -227,7 +227,7 @@ Now let's look at our streaming methods. Here's where we call the response-strea }]; ``` -Notice how the signature of the handler block now includes a `BOOL done` parameter. The block will be called any number of times; only on the last call will the `done` argument be `YES`. If an error occurs, the RPC will be finished and the handler will be called with arguments `(YES, nil, error)`. +Notice how the signature of the handler block now includes a `BOOL done` parameter. The handler block can be called any number of times; only on the last call is the `done` argument value set to `YES`. If an error occurs, the RPC finishes and the handler is called with the arguments `(YES, nil, error)`. The request-streaming method `RecordRoute` expects a stream of `RTGPoint`s from the cient. This stream is passed to the method as an object that conforms to the `GRXWriter` protocol. The simplest way to create one is to initialize one from a `NSArray` object: