diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh
index 80d907c04d053fc994e0e7ced4359e811f609785..74e83ceec864d86ff9bc3deb3a5e21b5a445e71b 100755
--- a/src/objective-c/tests/run_tests.sh
+++ b/src/objective-c/tests/run_tests.sh
@@ -28,16 +28,23 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-pushd `dirname $0`/../../..
-# TODO(jcanizales): Make only objective-c plugin.
-make plugins
+# Return to current directory on error.
+trap 'cd - > /dev/null; exit 1' ERR
 
-cd src/objective-c/tests
+cd $(dirname $0)
 
 # TODO(jcanizales): Remove when Cocoapods issue #3823 is resolved.
 export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES
 pod install
 
-xcodebuild -workspace Tests.xcworkspace -scheme AllTests test
+# xcodebuild is very verbose. We filter its output and tell Bash to fail if any
+# element of the pipe fails.
+set -o pipefail
+XCODEBUILD_FILTER='^(/.+:[0-9+:[0-9]+:.(error|warning):|fatal|===|\*\*)'
+xcodebuild \
+    -workspace Tests.xcworkspace \
+    -scheme AllTests \
+    test \
+    | egrep "$XCODEBUILD_FILTER" -
 
-popd
+cd - > /dev/null