From eb8d33dc754cc85d8d63c780b3e6417901cf9b2d Mon Sep 17 00:00:00 2001
From: Jorge Canizales <jcanizales@google.com>
Date: Mon, 1 Jun 2015 16:29:06 -0700
Subject: [PATCH] Add tabbed app with one tab per RouteGuide demo
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The app doesn’t do anything yet
---
 .gitignore                                    |  21 +-
 objective-c/route_guide/AppDelegate.h         |  38 ++
 objective-c/route_guide/AppDelegate.m         |  37 ++
 .../route_guide/Base.lproj/Main.storyboard    | 193 +++++++++
 .../route_guide/GetFeatureViewController.h    |  37 ++
 .../route_guide/GetFeatureViewController.m    |  43 ++
 .../AppIcon.appiconset/Contents.json          |  68 ++++
 .../first.imageset/Contents.json              |  12 +
 .../Images.xcassets/first.imageset/first.pdf  | Bin 0 -> 2465 bytes
 .../second.imageset/Contents.json             |  12 +
 .../second.imageset/second.pdf                | Bin 0 -> 2423 bytes
 objective-c/route_guide/Info.plist            |  57 +++
 .../route_guide/ListFeaturesViewController.h  |  37 ++
 .../route_guide/ListFeaturesViewController.m  |  43 ++
 .../route_guide/RecordRouteViewController.h   |  37 ++
 .../route_guide/RecordRouteViewController.m   |  43 ++
 .../route_guide/RouteChatViewController.h     |  37 ++
 .../route_guide/RouteChatViewController.m     |  43 ++
 .../project.pbxproj                           | 373 ++++++++++++++++++
 .../contents.xcworkspacedata                  |   7 +
 objective-c/route_guide/main.m                |  41 ++
 21 files changed, 1178 insertions(+), 1 deletion(-)
 create mode 100644 objective-c/route_guide/AppDelegate.h
 create mode 100644 objective-c/route_guide/AppDelegate.m
 create mode 100644 objective-c/route_guide/Base.lproj/Main.storyboard
 create mode 100644 objective-c/route_guide/GetFeatureViewController.h
 create mode 100644 objective-c/route_guide/GetFeatureViewController.m
 create mode 100644 objective-c/route_guide/Images.xcassets/AppIcon.appiconset/Contents.json
 create mode 100644 objective-c/route_guide/Images.xcassets/first.imageset/Contents.json
 create mode 100644 objective-c/route_guide/Images.xcassets/first.imageset/first.pdf
 create mode 100644 objective-c/route_guide/Images.xcassets/second.imageset/Contents.json
 create mode 100644 objective-c/route_guide/Images.xcassets/second.imageset/second.pdf
 create mode 100644 objective-c/route_guide/Info.plist
 create mode 100644 objective-c/route_guide/ListFeaturesViewController.h
 create mode 100644 objective-c/route_guide/ListFeaturesViewController.m
 create mode 100644 objective-c/route_guide/RecordRouteViewController.h
 create mode 100644 objective-c/route_guide/RecordRouteViewController.m
 create mode 100644 objective-c/route_guide/RouteChatViewController.h
 create mode 100644 objective-c/route_guide/RouteChatViewController.m
 create mode 100644 objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj
 create mode 100644 objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 create mode 100644 objective-c/route_guide/main.m

diff --git a/.gitignore b/.gitignore
index 1a49c132b5..164603e4ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,23 @@ pom.xml.tag
 pom.xml.releaseBackup
 pom.xml.versionsBackup
 pom.xml.next
-release.properties
\ No newline at end of file
+release.properties
+
+# OS X
+.DS_Store
+
+# XCode
+build/
+DerivedData
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+*.xcuserstate
diff --git a/objective-c/route_guide/AppDelegate.h b/objective-c/route_guide/AppDelegate.h
new file mode 100644
index 0000000000..102e7f3ade
--- /dev/null
+++ b/objective-c/route_guide/AppDelegate.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
diff --git a/objective-c/route_guide/AppDelegate.m b/objective-c/route_guide/AppDelegate.m
new file mode 100644
index 0000000000..a38e36651e
--- /dev/null
+++ b/objective-c/route_guide/AppDelegate.m
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import "AppDelegate.h"
+
+@implementation AppDelegate
+@end
diff --git a/objective-c/route_guide/Base.lproj/Main.storyboard b/objective-c/route_guide/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..10c9b0cf3f
--- /dev/null
+++ b/objective-c/route_guide/Base.lproj/Main.storyboard
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7702" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
+    </dependencies>
+    <scenes>
+        <!--Get Feature-->
+        <scene sceneID="hNz-n2-bh7">
+            <objects>
+                <viewController id="9pv-A4-QxB" customClass="GetFeatureViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Ia1-K6-d13"/>
+                        <viewControllerLayoutGuide type="bottom" id="4ug-Mw-9AY"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Get Feature" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="KQZ-1w-vlD">
+                                <rect key="frame" x="203" y="279" width="193" height="42"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                                <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by GetFeatureViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A5M-7J-77L">
+                                <rect key="frame" x="181" y="329" width="238" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="6BV-lF-sBN"/>
+                            <constraint firstItem="A5M-7J-77L" firstAttribute="top" secondItem="KQZ-1w-vlD" secondAttribute="bottom" constant="8" symbolic="YES" id="cfb-er-3JN"/>
+                            <constraint firstItem="A5M-7J-77L" firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="e1l-AV-tCB"/>
+                            <constraint firstAttribute="centerY" secondItem="KQZ-1w-vlD" secondAttribute="centerY" id="exm-UA-ej4"/>
+                        </constraints>
+                    </view>
+                    <tabBarItem key="tabBarItem" title="Get Feature" image="first" id="acW-dT-cKf"/>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="718" y="-660"/>
+        </scene>
+        <!--List Features-->
+        <scene sceneID="wg7-f3-ORb">
+            <objects>
+                <viewController id="8rJ-Kc-sve" customClass="ListFeaturesViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="L7p-HK-0SC"/>
+                        <viewControllerLayoutGuide type="bottom" id="Djb-ko-YwX"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" misplaced="YES" text="List Features" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zEq-FU-wV5">
+                                <rect key="frame" x="195" y="279" width="210" height="42"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by ListFeaturesViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NDk-cv-Gan">
+                                <rect key="frame" x="178" y="329" width="245" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="NDk-cv-Gan" firstAttribute="top" secondItem="zEq-FU-wV5" secondAttribute="bottom" constant="8" symbolic="YES" id="Day-4N-Vmt"/>
+                            <constraint firstItem="NDk-cv-Gan" firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="JgO-Fn-dHn"/>
+                            <constraint firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="qqM-NS-xev"/>
+                            <constraint firstAttribute="centerY" secondItem="zEq-FU-wV5" secondAttribute="centerY" id="qzY-Ky-pLD"/>
+                        </constraints>
+                    </view>
+                    <tabBarItem key="tabBarItem" title="List Features" image="second" id="cPa-gy-q4n"/>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="1466" y="-386"/>
+        </scene>
+        <!--Tab Bar Controller-->
+        <scene sceneID="yl2-sM-qoP">
+            <objects>
+                <tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
+                    <nil key="simulatedBottomBarMetrics"/>
+                    <tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
+                        <rect key="frame" x="0.0" y="975" width="768" height="49"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                    </tabBar>
+                    <connections>
+                        <segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
+                        <segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
+                        <segue destination="YIR-e4-hjB" kind="relationship" relationship="viewControllers" id="L0R-vl-fT4"/>
+                        <segue destination="6mc-1d-hJy" kind="relationship" relationship="viewControllers" id="C2G-Se-4Fe"/>
+                    </connections>
+                </tabBarController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="0.0" y="0.0"/>
+        </scene>
+        <!--Record Route-->
+        <scene sceneID="kS4-Oa-mxG">
+            <objects>
+                <viewController id="YIR-e4-hjB" userLabel="Record Route" customClass="RecordRouteViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="jR8-0x-GjY"/>
+                        <viewControllerLayoutGuide type="bottom" id="4Q5-sW-A9H"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Wvj-mg-YnO">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Record Route" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="Nqv-Vr-o8P">
+                                <rect key="frame" x="189" y="279" width="223" height="42"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by RecordRouteViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xjS-0N-tLe">
+                                <rect key="frame" x="175" y="329" width="251" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstAttribute="centerX" secondItem="Nqv-Vr-o8P" secondAttribute="centerX" id="1wf-uc-57y"/>
+                            <constraint firstItem="xjS-0N-tLe" firstAttribute="centerX" secondItem="Nqv-Vr-o8P" secondAttribute="centerX" id="Gnh-rN-EQ3"/>
+                            <constraint firstItem="xjS-0N-tLe" firstAttribute="top" secondItem="Nqv-Vr-o8P" secondAttribute="bottom" constant="8" symbolic="YES" id="Xhj-u3-th9"/>
+                            <constraint firstAttribute="centerY" secondItem="Nqv-Vr-o8P" secondAttribute="centerY" id="xqU-v8-Bb3"/>
+                        </constraints>
+                    </view>
+                    <tabBarItem key="tabBarItem" title="Record Route" image="first" id="PLK-Jm-UyM"/>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="9RW-dt-a4q" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="1466" y="264"/>
+        </scene>
+        <!--Route Chat-->
+        <scene sceneID="M4k-TV-RZJ">
+            <objects>
+                <viewController id="6mc-1d-hJy" userLabel="Route Chat" customClass="RouteChatViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Sl7-r2-TON"/>
+                        <viewControllerLayoutGuide type="bottom" id="e7m-SC-g06"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="c9d-af-OMP">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Route Chat" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zUL-Bo-wJt">
+                                <rect key="frame" x="209" y="279" width="183" height="42"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by RouteChatViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CgS-1q-Od9">
+                                <rect key="frame" x="183" y="329" width="235" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstAttribute="centerY" secondItem="zUL-Bo-wJt" secondAttribute="centerY" id="5hM-q1-ZjM"/>
+                            <constraint firstItem="CgS-1q-Od9" firstAttribute="top" secondItem="zUL-Bo-wJt" secondAttribute="bottom" constant="8" symbolic="YES" id="AqI-Ra-a5O"/>
+                            <constraint firstItem="CgS-1q-Od9" firstAttribute="centerX" secondItem="zUL-Bo-wJt" secondAttribute="centerX" id="K8f-KI-bc6"/>
+                            <constraint firstAttribute="centerX" secondItem="zUL-Bo-wJt" secondAttribute="centerX" id="n8b-x8-Yze"/>
+                        </constraints>
+                    </view>
+                    <tabBarItem key="tabBarItem" title="Route Chat" image="second" id="p2G-IC-yAR"/>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="yUz-se-Cfi" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="718" y="594"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="first" width="30" height="30"/>
+        <image name="second" width="30" height="30"/>
+    </resources>
+</document>
diff --git a/objective-c/route_guide/GetFeatureViewController.h b/objective-c/route_guide/GetFeatureViewController.h
new file mode 100644
index 0000000000..034404e259
--- /dev/null
+++ b/objective-c/route_guide/GetFeatureViewController.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface GetFeatureViewController : UIViewController
+@end
diff --git a/objective-c/route_guide/GetFeatureViewController.m b/objective-c/route_guide/GetFeatureViewController.m
new file mode 100644
index 0000000000..ef373f4afe
--- /dev/null
+++ b/objective-c/route_guide/GetFeatureViewController.m
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import "GetFeatureViewController.h"
+
+@implementation GetFeatureViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  // Do any additional setup after loading the view, typically from a nib.
+}
+
+@end
diff --git a/objective-c/route_guide/Images.xcassets/AppIcon.appiconset/Contents.json b/objective-c/route_guide/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..36d2c80d88
--- /dev/null
+++ b/objective-c/route_guide/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "29x29",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "40x40",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "76x76",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "76x76",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/objective-c/route_guide/Images.xcassets/first.imageset/Contents.json b/objective-c/route_guide/Images.xcassets/first.imageset/Contents.json
new file mode 100644
index 0000000000..33a745102c
--- /dev/null
+++ b/objective-c/route_guide/Images.xcassets/first.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "first.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/objective-c/route_guide/Images.xcassets/first.imageset/first.pdf b/objective-c/route_guide/Images.xcassets/first.imageset/first.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..47d911dea647d55983671ead4d08b6f6b3600715
GIT binary patch
literal 2465
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

literal 0
HcmV?d00001

diff --git a/objective-c/route_guide/Images.xcassets/second.imageset/Contents.json b/objective-c/route_guide/Images.xcassets/second.imageset/Contents.json
new file mode 100644
index 0000000000..03bd9c927f
--- /dev/null
+++ b/objective-c/route_guide/Images.xcassets/second.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "second.pdf"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/objective-c/route_guide/Images.xcassets/second.imageset/second.pdf b/objective-c/route_guide/Images.xcassets/second.imageset/second.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..401614e288b4b160471c2776bed6f09762af3e1c
GIT binary patch
literal 2423
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

literal 0
HcmV?d00001

diff --git a/objective-c/route_guide/Info.plist b/objective-c/route_guide/Info.plist
new file mode 100644
index 0000000000..33ad4800f6
--- /dev/null
+++ b/objective-c/route_guide/Info.plist
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>gRPC.$(PRODUCT_NAME:rfc1034identifier)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>Main</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UIStatusBarTintParameters</key>
+	<dict>
+		<key>UINavigationBar</key>
+		<dict>
+			<key>Style</key>
+			<string>UIBarStyleDefault</string>
+			<key>Translucent</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>
diff --git a/objective-c/route_guide/ListFeaturesViewController.h b/objective-c/route_guide/ListFeaturesViewController.h
new file mode 100644
index 0000000000..d758d1c16d
--- /dev/null
+++ b/objective-c/route_guide/ListFeaturesViewController.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface ListFeaturesViewController : UIViewController
+@end
diff --git a/objective-c/route_guide/ListFeaturesViewController.m b/objective-c/route_guide/ListFeaturesViewController.m
new file mode 100644
index 0000000000..9afc89bd3b
--- /dev/null
+++ b/objective-c/route_guide/ListFeaturesViewController.m
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import "ListFeaturesViewController.h"
+
+@implementation ListFeaturesViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  // Do any additional setup after loading the view, typically from a nib.
+}
+
+@end
diff --git a/objective-c/route_guide/RecordRouteViewController.h b/objective-c/route_guide/RecordRouteViewController.h
new file mode 100644
index 0000000000..155b7e6e9b
--- /dev/null
+++ b/objective-c/route_guide/RecordRouteViewController.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface RecordRouteViewController : UIViewController
+@end
diff --git a/objective-c/route_guide/RecordRouteViewController.m b/objective-c/route_guide/RecordRouteViewController.m
new file mode 100644
index 0000000000..56dbdd1696
--- /dev/null
+++ b/objective-c/route_guide/RecordRouteViewController.m
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import "RecordRouteViewController.h"
+
+@implementation RecordRouteViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  // Do any additional setup after loading the view.
+}
+
+@end
diff --git a/objective-c/route_guide/RouteChatViewController.h b/objective-c/route_guide/RouteChatViewController.h
new file mode 100644
index 0000000000..4a92e58f12
--- /dev/null
+++ b/objective-c/route_guide/RouteChatViewController.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface RouteChatViewController : UIViewController
+@end
diff --git a/objective-c/route_guide/RouteChatViewController.m b/objective-c/route_guide/RouteChatViewController.m
new file mode 100644
index 0000000000..67735e0e75
--- /dev/null
+++ b/objective-c/route_guide/RouteChatViewController.m
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import "RouteChatViewController.h"
+
+@implementation RouteChatViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  // Do any additional setup after loading the view.
+}
+
+@end
diff --git a/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj b/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..0fb054b8c3
--- /dev/null
+++ b/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj
@@ -0,0 +1,373 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */; };
+		632527831B1D0396003073D9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527821B1D0396003073D9 /* main.m */; };
+		632527861B1D0396003073D9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527851B1D0396003073D9 /* AppDelegate.m */; };
+		632527891B1D0396003073D9 /* GetFeatureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527881B1D0396003073D9 /* GetFeatureViewController.m */; };
+		6325278C1B1D0396003073D9 /* ListFeaturesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6325278B1B1D0396003073D9 /* ListFeaturesViewController.m */; };
+		6325278F1B1D0396003073D9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6325278D1B1D0396003073D9 /* Main.storyboard */; };
+		632527911B1D0396003073D9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 632527901B1D0396003073D9 /* Images.xcassets */; };
+		632527AB1B1D1C20003073D9 /* RecordRouteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527AA1B1D1C20003073D9 /* RecordRouteViewController.m */; };
+		632527AE1B1D1DFE003073D9 /* RouteChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527AD1B1D1DFE003073D9 /* RouteChatViewController.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		6325277D1B1D0396003073D9 /* RouteGuideClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RouteGuideClient.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		632527811B1D0396003073D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		632527821B1D0396003073D9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		632527841B1D0396003073D9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		632527851B1D0396003073D9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		632527871B1D0396003073D9 /* GetFeatureViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GetFeatureViewController.h; sourceTree = "<group>"; };
+		632527881B1D0396003073D9 /* GetFeatureViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GetFeatureViewController.m; sourceTree = "<group>"; };
+		6325278A1B1D0396003073D9 /* ListFeaturesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ListFeaturesViewController.h; sourceTree = "<group>"; };
+		6325278B1B1D0396003073D9 /* ListFeaturesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ListFeaturesViewController.m; sourceTree = "<group>"; };
+		6325278E1B1D0396003073D9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		632527901B1D0396003073D9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+		632527A91B1D1C20003073D9 /* RecordRouteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecordRouteViewController.h; sourceTree = "<group>"; };
+		632527AA1B1D1C20003073D9 /* RecordRouteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecordRouteViewController.m; sourceTree = "<group>"; };
+		632527AC1B1D1DFE003073D9 /* RouteChatViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RouteChatViewController.h; sourceTree = "<group>"; };
+		632527AD1B1D1DFE003073D9 /* RouteChatViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RouteChatViewController.m; sourceTree = "<group>"; };
+		71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RouteGuideClient.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.debug.xcconfig"; sourceTree = "<group>"; };
+		C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.release.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		6325277A1B1D0395003073D9 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		56849C29DC376BF4B902CD77 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */,
+				C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+		632527741B1D0395003073D9 = {
+			isa = PBXGroup;
+			children = (
+				6325277F1B1D0396003073D9 /* RouteGuideClient */,
+				6325277E1B1D0396003073D9 /* Products */,
+				56849C29DC376BF4B902CD77 /* Pods */,
+				7482B8A18481F7B13ADE4530 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		6325277E1B1D0396003073D9 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				6325277D1B1D0396003073D9 /* RouteGuideClient.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		6325277F1B1D0396003073D9 /* RouteGuideClient */ = {
+			isa = PBXGroup;
+			children = (
+				632527841B1D0396003073D9 /* AppDelegate.h */,
+				632527851B1D0396003073D9 /* AppDelegate.m */,
+				632527871B1D0396003073D9 /* GetFeatureViewController.h */,
+				632527881B1D0396003073D9 /* GetFeatureViewController.m */,
+				6325278A1B1D0396003073D9 /* ListFeaturesViewController.h */,
+				6325278B1B1D0396003073D9 /* ListFeaturesViewController.m */,
+				6325278D1B1D0396003073D9 /* Main.storyboard */,
+				632527901B1D0396003073D9 /* Images.xcassets */,
+				632527801B1D0396003073D9 /* Supporting Files */,
+				632527A91B1D1C20003073D9 /* RecordRouteViewController.h */,
+				632527AA1B1D1C20003073D9 /* RecordRouteViewController.m */,
+				632527AC1B1D1DFE003073D9 /* RouteChatViewController.h */,
+				632527AD1B1D1DFE003073D9 /* RouteChatViewController.m */,
+			);
+			name = RouteGuideClient;
+			sourceTree = SOURCE_ROOT;
+		};
+		632527801B1D0396003073D9 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				632527811B1D0396003073D9 /* Info.plist */,
+				632527821B1D0396003073D9 /* main.m */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		7482B8A18481F7B13ADE4530 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		6325277C1B1D0395003073D9 /* RouteGuideClient */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */;
+			buildPhases = (
+				C6FC30AD2376EC04317237C5 /* Check Pods Manifest.lock */,
+				632527791B1D0395003073D9 /* Sources */,
+				6325277A1B1D0395003073D9 /* Frameworks */,
+				6325277B1B1D0395003073D9 /* Resources */,
+				FFE0BCF30339E7A50A989EAB /* Copy Pods Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = RouteGuideClient;
+			productName = RouteGuideClient;
+			productReference = 6325277D1B1D0396003073D9 /* RouteGuideClient.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		632527751B1D0395003073D9 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0630;
+				ORGANIZATIONNAME = gRPC;
+				TargetAttributes = {
+					6325277C1B1D0395003073D9 = {
+						CreatedOnToolsVersion = 6.3.1;
+					};
+				};
+			};
+			buildConfigurationList = 632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 632527741B1D0395003073D9;
+			productRefGroup = 6325277E1B1D0396003073D9 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				6325277C1B1D0395003073D9 /* RouteGuideClient */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		6325277B1B1D0395003073D9 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				6325278F1B1D0396003073D9 /* Main.storyboard in Resources */,
+				632527911B1D0396003073D9 /* Images.xcassets in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		C6FC30AD2376EC04317237C5 /* Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Check Pods Manifest.lock";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n    cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n    exit 1\nfi\n";
+			showEnvVarsInLog = 0;
+		};
+		FFE0BCF30339E7A50A989EAB /* Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Copy Pods Resources";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		632527791B1D0395003073D9 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				632527AE1B1D1DFE003073D9 /* RouteChatViewController.m in Sources */,
+				6325278C1B1D0396003073D9 /* ListFeaturesViewController.m in Sources */,
+				632527861B1D0396003073D9 /* AppDelegate.m in Sources */,
+				632527891B1D0396003073D9 /* GetFeatureViewController.m in Sources */,
+				632527831B1D0396003073D9 /* main.m in Sources */,
+				632527AB1B1D1C20003073D9 /* RecordRouteViewController.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		6325278D1B1D0396003073D9 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				6325278E1B1D0396003073D9 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		632527A11B1D0396003073D9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		632527A21B1D0396003073D9 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		632527A41B1D0396003073D9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				INFOPLIST_FILE = Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		632527A51B1D0396003073D9 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				INFOPLIST_FILE = Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				632527A11B1D0396003073D9 /* Debug */,
+				632527A21B1D0396003073D9 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				632527A41B1D0396003073D9 /* Debug */,
+				632527A51B1D0396003073D9 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 632527751B1D0395003073D9 /* Project object */;
+}
diff --git a/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..f208589e44
--- /dev/null
+++ b/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:RouteGuideClient.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/objective-c/route_guide/main.m b/objective-c/route_guide/main.m
new file mode 100644
index 0000000000..fb701005d1
--- /dev/null
+++ b/objective-c/route_guide/main.m
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+  @autoreleasepool {
+    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+  }
+}
-- 
GitLab