diff --git a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec
index d897d1cf07559e89a0bfe144abbcad70eabd72fd..6b00efebb8bf9aabf6a050edc7ef0670ed067175 100644
--- a/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec
+++ b/src/objective-c/generated_libraries/RemoteTestClient/RemoteTest.podspec
@@ -8,10 +8,7 @@ Pod::Spec.new do |s|
 
   # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
   s.prepare_command = <<-CMD
-    cd ../../../..
-    make CONFIG=dbg grpc_objective_c_plugin
-    cd -
-    protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto
+    protoc --plugin=protoc-gen-grpc=../../../../bins/$CONFIG/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto
   CMD
 
   s.subspec "Messages" do |ms|
diff --git a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec
index a6a7cf65f99402f2e24bd4de84ab96c92f980c4f..2c9cead7cf26f95c39134676cb93827859cbd505 100644
--- a/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec
+++ b/src/objective-c/generated_libraries/RouteGuideClient/RouteGuide.podspec
@@ -8,10 +8,7 @@ Pod::Spec.new do |s|
 
   # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
   s.prepare_command = <<-CMD
-    cd ../../../..
-    make CONFIG=dbg grpc_objective_c_plugin
-    cd -
-    protoc --plugin=protoc-gen-grpc=../../../../bins/dbg/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto
+    protoc --plugin=protoc-gen-grpc=../../../../bins/$CONFIG/grpc_objective_c_plugin --objc_out=. --grpc_out=. *.proto
   CMD
 
   s.subspec "Messages" do |ms|
diff --git a/src/objective-c/tests/build_tests.sh b/src/objective-c/tests/build_tests.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d98e0a769c6db539c8523106b2c4a790a5bb0b55
--- /dev/null
+++ b/src/objective-c/tests/build_tests.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -e
+
+cd $(dirname $0)
+
+# The local test server needs to be compiled before this because pod install of
+# gRPC renames some C gRPC files and not the server's code references to them.
+#
+# Suppress error output because Cocoapods issue #3823 causes a flooding warning.
+pod install 2>/dev/null
diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh
index 514fb07e57bf6a56654a855619ec58980cd4ee78..9afec687d68d8b7a94eb0867a00e7d7d2aa23557 100755
--- a/src/objective-c/tests/run_tests.sh
+++ b/src/objective-c/tests/run_tests.sh
@@ -32,18 +32,8 @@ set -e
 
 cd $(dirname $0)
 
-# Compile the C++ interop server if it doesn't exist yet. This has to be done
-# before pod install because the latter renames some C gRPC files and not the
-# interop server references to them.
-cd ../../..
-[ -f bins/dbg/interop_server ] || make CONFIG=dbg interop_server
-cd -
-
-# Suppress error output because Cocoapods issue #3823 causes a flooding warning.
-pod install 2>/dev/null
-
-# Run the server.
-../../../bins/dbg/interop_server --port=5050 &
+# Run the tests server.
+../../../bins/$CONFIG/interop_server --port=5050 &
 # Kill it when this script exits.
 trap 'kill -9 `jobs -p`' EXIT
 
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 0f02b4738b6a7b676df839e2aaeb72868c042927..a016924e401538ad753ef64d0a68e48c22971296 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -311,10 +311,10 @@ class ObjCLanguage(object):
                             environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
 
   def make_targets(self):
-    return []
+    return ['grpc_objective_c_plugin', 'interop_server']
 
   def build_steps(self):
-    return []
+    return [['src/objective-c/tests/build_tests.sh']]
 
   def supports_multi_config(self):
     return False