diff --git a/src/compiler/objective_c_generator.cc b/src/compiler/objective_c_generator.cc
index a3157db0fb457175680b50022ee7f64dae9b0895..ff092053ad09386f695387a3cdd232b81e96da7d 100644
--- a/src/compiler/objective_c_generator.cc
+++ b/src/compiler/objective_c_generator.cc
@@ -203,6 +203,7 @@ void PrintMethodImplementations(Printer *printer,
     printer.Print(
         "- (instancetype)initWithHost:(NSString *)host"
         " NS_DESIGNATED_INITIALIZER;\n");
+    printer.Print("+ (instancetype)serviceWithHost:(NSString *)host;\n");
     printer.Print("@end\n");
   }
   return output;
@@ -239,6 +240,9 @@ void PrintMethodImplementations(Printer *printer,
     printer.Print("                 packageName:(NSString *)packageName\n");
     printer.Print("                 serviceName:(NSString *)serviceName {\n");
     printer.Print("  return [self initWithHost:host];\n");
+    printer.Print("}\n\n");
+    printer.Print("+ (instancetype)serviceWithHost:(NSString *)host {\n");
+    printer.Print("  return [[self alloc] initWithHost:host];\n");
     printer.Print("}\n\n\n");
 
     for (int i = 0; i < service->method_count(); i++) {
diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m
index 1b63fe2059c985388799194518eda9c23c996a74..af58e2bd0489bdba3dd5979d748c0a30adf2ffce 100644
--- a/src/objective-c/tests/InteropTests.m
+++ b/src/objective-c/tests/InteropTests.m
@@ -89,7 +89,7 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.google.com";
 }
 
 - (void)setUp {
-  _service = [[RMTTestService alloc] initWithHost:self.class.host];
+  _service = [RMTTestService serviceWithHost:self.class.host];
 }
 
 - (void)testEmptyUnaryRPC {
@@ -274,17 +274,17 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.google.com";
 
 - (void)testCancelAfterFirstResponseRPC {
   __weak XCTestExpectation *expectation = [self expectationWithDescription:@"CancelAfterFirstResponse"];
-  
+
   // A buffered pipe to which we write a single value but never close
   GRXBufferedPipe *requestsBuffer = [[GRXBufferedPipe alloc] init];
-  
+
   __block BOOL receivedResponse = NO;
-  
+
   id request = [RMTStreamingOutputCallRequest messageWithPayloadSize:@21782
                                                requestedResponseSize:@31415];
-  
+
   [requestsBuffer writeValue:request];
-  
+
   __block ProtoRPC *call =
       [_service RPCToFullDuplexCallWithRequestsWriter:requestsBuffer
                                          eventHandler:^(BOOL done,