TBR: third-party: Adds iOS Google Sign-In SDK 4.0.0

Currently 3.x is in the tree and is in use by the older example code.
This adds 4.0.0 which is used by the Syncbase Todos app. The older
examples will eventually migrate to 4.0.0 and remove 3.x in a separate
CL.

Change-Id: Ie70d8ea245b54fa1608d082e24125df814aa66ba
diff --git a/swift/google_signin_sdk_4_0_0/CHANGELOG.md b/swift/google_signin_sdk_4_0_0/CHANGELOG.md
new file mode 100644
index 0000000..3cb1c2f
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/CHANGELOG.md
@@ -0,0 +1,77 @@
+# 2016-04-21 -- v4.0.0
+- GoogleSignIn pod now takes form of a static framework. Import with
+  `#import <GoogleSignIn/GoogleSignIn.h>` in Objective-C.
+- Adds module support. You can also use `@import GoogleSignIn;` in Objective-C,
+  if module is enabled, and `import GoogleSignIn` in Swift without using a
+  bridge-header.
+- For users of the stand-alone zip distribution, multiple frameworks are now
+  provided and all need to be added to a project. This decomposition allows more
+  flexibility in case of duplicated dependencies.
+- Removes deprecated method `checkGoogleSignInAppInstalled` from `GIDSignIn`.
+- Removes `allowsSignInWithBrowser` and `allowsSignInWithWebView` properties
+  from `GIDSignIn`.
+- No longer requires adding bundle ID as a URL scheme supported by the app.
+
+# 2016-03-04 -- v3.0.0
+- Provides `givenName` and `familyName` properties on `GIDProfileData`.
+- Allows setting the `loginHint` property on `GIDSignIn` to prefill the user's
+  ID or email address in the sign-in flow.
+- Removed the `UIViewController(SignIn)` category as well as the `delegate`
+  property from `GIDSignInButton`.
+- Requires that `uiDelegate` has been set properly on `GIDSignIn` and that
+  SafariServices framework has been linked.
+- Removes the dependency on StoreKit.
+- Provides bitcode support.
+- Requires Xcode 7.0 or above due to bitcode incompatibilities with Xcode 6.
+
+# 2015-10-26 -- v2.4.0
+- Updates sign-in button with the new Google logo.
+- Supports domain restriction for sign-in.
+- Allows refreshing ID tokens.
+
+# 2015-10-09 -- v2.3.2
+- No longer requires Xcode 7.
+
+# 2015-10-01 -- v2.3.1
+- Fixes a crash in `GIDProfileData`'s `imageURLWithDimension:`.
+
+# 2015-09-25 -- v2.3.0
+- Requires Xcode 7.0 or above.
+- Uses SFSafariViewController for signing in on iOS 9.  `uiDelegate` must be
+  set for this to work.
+- Optimizes fetching user profile.
+- Supports GTMFetcherAuthorizationProtocol in GIDAuthentication.
+
+# 2015-07-15 -- v2.2.0
+- Compatible with iOS 9 (beta).  Note that this version of the Sign-In SDK does
+  not include bitcode, so you must set ENABLE_BITCODE to NO in your project if
+  you use Xcode 7.
+- Adds descriptive identifiers for GIDSignInButton's Auto Layout constraints.
+- `signInSilently` no longer requires setting `uiDelegate`.
+
+# 2015-06-17 -- v2.1.0
+- Fixes Auto Layout issues with GIDSignInButton.
+- Adds API to refresh access token in GIDAuthentication.
+- Better exception description for unassigned clientID in GIDSignIn.
+- Other minor bug fixes.
+
+# 2015-05-28 -- v2.0.1
+- Bug fixes
+
+# 2015-05-21 -- v2.0.0
+- Supports sign-in via UIWebView rather than app switching to a browser,
+  configurable with the new `allowsSignInWithWebView` property.
+- Now apps which have disabled the app switch to a browser via the
+  `allowsSignInWithBrowser` and in-app web view via `allowsSignInWithWebView`
+  properties have the option to display a prompt instructing the user to
+  download the Google app from the App Store.
+- Fixes sign-in button sizing issue when auto-layout is enabled
+- `signInSilently` now calls the delegate with error when `hasAuthInKeychain`
+  is `NO` as documented
+- Other minor bug fixes
+
+# 2015-03-12 -- v1.0.0
+- New sign-in focused SDK with refreshed API
+- Dynamically rendered sign-in button with contextual branding
+- Basic profile support
+- Added allowsSignInWithBrowser property
diff --git a/swift/google_signin_sdk_4_0_0/GoogleAppUtilities.framework/GoogleAppUtilities b/swift/google_signin_sdk_4_0_0/GoogleAppUtilities.framework/GoogleAppUtilities
new file mode 100644
index 0000000..2a75aed
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleAppUtilities.framework/GoogleAppUtilities
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/GoogleAuthUtilities b/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/GoogleAuthUtilities
new file mode 100644
index 0000000..097f2d2
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/GoogleAuthUtilities
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib b/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib
new file mode 100644
index 0000000..2f2c4bb
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1792</int>
+		<string key="IBDocument.SystemVersion">12F2560</string>
+		<string key="IBDocument.InterfaceBuilderVersion">5056</string>
+		<string key="IBDocument.AppKitVersion">1187.40</string>
+		<string key="IBDocument.HIToolboxVersion">626.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">3733</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIActivityIndicatorView</string>
+			<string>IBUIBarButtonItem</string>
+			<string>IBUIButton</string>
+			<string>IBUINavigationItem</string>
+			<string>IBUIView</string>
+			<string>IBUIWebView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUINavigationItem" id="1047805472">
+				<string key="IBUITitle">OAuth</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIBarButtonItem" id="961671599">
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+				<int key="IBUIStyle">1</int>
+			</object>
+			<object class="IBUIView" id="808907889">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">292</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUIButton" id="453250804">
+						<reference key="NSNextResponder" ref="808907889"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrameSize">{30, 30}</string>
+						<reference key="NSSuperview" ref="808907889"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="981703116"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<object class="NSColor" key="IBUINormalTitleColor" id="193465259">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<reference key="IBUIHighlightedTitleColor" ref="193465259"/>
+						<string key="IBUITitleShadowOffset">{0, -2}</string>
+						<string key="IBUINormalTitle">◀</string>
+						<object class="NSColor" key="IBUIDisabledTitleColor">
+							<int key="NSColorSpace">2</int>
+							<bytes key="NSRGB">MC41OTYwNzg0NiAwLjY4NjI3NDUzIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor" id="999379443">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="621440819">
+							<string key="name">Helvetica-Bold</string>
+							<string key="family">Helvetica</string>
+							<int key="traits">2</int>
+							<double key="pointSize">24</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="530402572">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">24</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIButton" id="981703116">
+						<reference key="NSNextResponder" ref="808907889"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{30, 0}, {30, 30}}</string>
+						<reference key="NSSuperview" ref="808907889"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<reference key="IBUINormalTitleColor" ref="193465259"/>
+						<reference key="IBUIHighlightedTitleColor" ref="193465259"/>
+						<string key="IBUITitleShadowOffset">{0, -2}</string>
+						<string key="IBUINormalTitle">▶</string>
+						<object class="NSColor" key="IBUIDisabledTitleColor">
+							<int key="NSColorSpace">2</int>
+							<bytes key="NSRGB">MC41ODQzMTM3NSAwLjY3NDUwOTgyIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA</bytes>
+						</object>
+						<reference key="IBUINormalTitleShadowColor" ref="999379443"/>
+						<reference key="IBUIFontDescription" ref="621440819"/>
+						<reference key="IBUIFont" ref="530402572"/>
+					</object>
+				</array>
+				<string key="NSFrameSize">{60, 30}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="453250804"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MSAwAA</bytes>
+				</object>
+				<bool key="IBUIOpaque">NO</bool>
+				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
+					<int key="IBUIInterfaceOrientation">3</int>
+					<int key="interfaceOrientation">3</int>
+				</object>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="426018584">
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUIWebView" id="663477729">
+						<reference key="NSNextResponder" ref="426018584"/>
+						<int key="NSvFlags">274</int>
+						<string key="NSFrameSize">{320, 460}</string>
+						<reference key="NSSuperview" ref="426018584"/>
+						<reference key="NSNextKeyView" ref="268967673"/>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MSAxIDEAA</bytes>
+						</object>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIMultipleTouchEnabled">YES</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIDataDetectorTypes">1</int>
+						<bool key="IBUIDetectsPhoneNumbers">YES</bool>
+					</object>
+					<object class="IBUIActivityIndicatorView" id="268967673">
+						<reference key="NSNextResponder" ref="426018584"/>
+						<int key="NSvFlags">301</int>
+						<string key="NSFrame">{{150, 115}, {20, 20}}</string>
+						<reference key="NSSuperview" ref="426018584"/>
+						<string key="NSReuseIdentifierKey">_NS:9</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<bool key="IBUIHidesWhenStopped">NO</bool>
+						<bool key="IBUIAnimating">YES</bool>
+						<int key="IBUIStyle">2</int>
+					</object>
+				</array>
+				<string key="NSFrameSize">{320, 460}</string>
+				<reference key="NSNextKeyView" ref="663477729"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<bool key="usesAutoincrementingIDs">NO</bool>
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">rightBarButtonItem</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="961671599"/>
+					</object>
+					<string key="id">20</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">navButtonsView</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="808907889"/>
+					</object>
+					<string key="id">22</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">backButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="453250804"/>
+					</object>
+					<string key="id">25</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">forwardButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="981703116"/>
+					</object>
+					<string key="id">26</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="426018584"/>
+					</object>
+					<string key="id">28</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">webView</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="663477729"/>
+					</object>
+					<string key="id">29</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">initialActivityIndicator</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="268967673"/>
+					</object>
+					<string key="id">33</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="663477729"/>
+						<reference key="destination" ref="372490531"/>
+					</object>
+					<string key="id">9</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">rightBarButtonItem</string>
+						<reference key="source" ref="1047805472"/>
+						<reference key="destination" ref="961671599"/>
+					</object>
+					<string key="id">14</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">goBack</string>
+						<reference key="source" ref="453250804"/>
+						<reference key="destination" ref="663477729"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<string key="id">18</string>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">goForward</string>
+						<reference key="source" ref="981703116"/>
+						<reference key="destination" ref="663477729"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<string key="id">19</string>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<string key="id">0</string>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">-1</string>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">-2</string>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">6</string>
+						<reference key="object" ref="1047805472"/>
+						<array class="NSMutableArray" key="children"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">10</string>
+						<reference key="object" ref="961671599"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">15</string>
+						<reference key="object" ref="808907889"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="453250804"/>
+							<reference ref="981703116"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">16</string>
+						<reference key="object" ref="453250804"/>
+						<reference key="parent" ref="808907889"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">17</string>
+						<reference key="object" ref="981703116"/>
+						<reference key="parent" ref="808907889"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">27</string>
+						<reference key="object" ref="426018584"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="663477729"/>
+							<reference ref="268967673"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">4</string>
+						<reference key="object" ref="663477729"/>
+						<reference key="parent" ref="426018584"/>
+					</object>
+					<object class="IBObjectRecord">
+						<string key="id">31</string>
+						<reference key="object" ref="268967673"/>
+						<reference key="parent" ref="426018584"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">GTMOAuth2ViewControllerTouch</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes"/>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">YES</bool>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
+			<integer value="4600" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">3733</string>
+	</data>
+</archive>
diff --git a/swift/google_signin_sdk_4_0_0/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities b/swift/google_signin_sdk_4_0_0/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities
new file mode 100644
index 0000000..500af27
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleNetworkingUtilities.framework/GoogleNetworkingUtilities
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Info.plist b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Info.plist
new file mode 100644
index 0000000..bb8965d
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Info.plist
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Roboto-Bold.ttf b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Roboto-Bold.ttf
new file mode 100644
index 0000000..68822ca
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/Roboto-Bold.ttf
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..7fdf528
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..519ab44
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..fe7dc9c
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..e1a2f7e
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..4e8f09f
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..36fae01
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..fecad11
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..fecad11
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..15a0abf
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..59d2dcb
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..f383b94
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..7cdd675
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google.png
new file mode 100644
index 0000000..a13d4dc
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@2x.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@2x.png
new file mode 100644
index 0000000..88a86b1
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@3x.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@3x.png
new file mode 100644
index 0000000..b4d4645
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/google@3x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus.png
new file mode 100644
index 0000000..a612d53
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@2x.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@2x.png
new file mode 100644
index 0000000..b2380df
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@3x.png b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@3x.png
new file mode 100644
index 0000000..0a449d3
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/gplus@3x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..7ca16d5
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..4a25129
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..4312727
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..bb9f0f9
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..320a232
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..7fe6148
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..8f84f47
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..4ae20d2
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..18edcd0
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..6d1c58e
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..112ec3b
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..5941bec
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..5941bec
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..e98d74f
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..49814ea
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..549538f
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..4de8bb4
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..f67b5b4
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..0ff2fa3
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..2f3f1d5
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..c684256
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..f99e5c7
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..b230411
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings
new file mode 100644
index 0000000..c8be012
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/GoogleSignIn b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/GoogleSignIn
new file mode 100644
index 0000000..6a541ef
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/GoogleSignIn
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDAuthentication.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDAuthentication.h
new file mode 100644
index 0000000..7ab00b8
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDAuthentication.h
@@ -0,0 +1,72 @@
+/*
+ * GIDAuthentication.h
+ * Google Sign-In iOS SDK
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this SDK is subject to the Google APIs Terms of Service:
+ * https://developers.google.com/terms/
+ */
+
+#import <Foundation/Foundation.h>
+
+@protocol GTMFetcherAuthorizationProtocol;
+@class GIDAuthentication;
+
+// @relates GIDAuthentication
+//
+// The callback block that takes a GIDAuthentication, or an error if attempt to refresh was
+// unsuccessful.
+typedef void (^GIDAuthenticationHandler)(GIDAuthentication *authentication, NSError *error);
+
+// @relates GIDAuthentication
+//
+// The callback block that takes an access token, or an error if attempt to refresh was
+// unsuccessful.
+typedef void (^GIDAccessTokenHandler)(NSString *accessToken, NSError *error);
+
+// This class represents the OAuth 2.0 entities needed for sign-in.
+@interface GIDAuthentication : NSObject <NSCoding>
+
+// The client ID associated with the authentication.
+@property(nonatomic, readonly) NSString *clientID;
+
+// The OAuth2 access token to access Google services.
+@property(nonatomic, readonly) NSString *accessToken;
+
+// The estimated expiration date of the access token.
+@property(nonatomic, readonly) NSDate *accessTokenExpirationDate;
+
+// The OAuth2 refresh token to exchange for new access tokens.
+@property(nonatomic, readonly) NSString *refreshToken;
+
+// An OpenID Connect ID token that identifies the user. Send this token to your server to
+// authenticate the user there. For more information on this topic, see
+// https://developers.google.com/identity/sign-in/ios/backend-auth
+@property(nonatomic, readonly) NSString *idToken;
+
+// The estimated expiration date of the ID token.
+@property(nonatomic, readonly) NSDate *idTokenExpirationDate;
+
+// Gets a new authorizer for GTLService, GTMSessionFetcher, or GTMHTTPFetcher.
+- (id<GTMFetcherAuthorizationProtocol>)fetcherAuthorizer;
+
+// Get a valid access token and a valid ID token, refreshing them first if they have expired or are
+// about to expire.
+- (void)getTokensWithHandler:(GIDAuthenticationHandler)handler;
+
+// Refreshes the access token and the ID token using the refresh token.
+- (void)refreshTokensWithHandler:(GIDAuthenticationHandler)handler;
+
+// Gets the access token, which may be a new one from the refresh token if the original has already
+// expired or is about to expire. Deprecated: use |getTokensWithHandler:| to get access tokens
+// instead.
+- (void)getAccessTokenWithHandler:(GIDAccessTokenHandler)handler
+    DEPRECATED_MSG_ATTRIBUTE("Use |getTokensWithHandler:| instead.");
+
+// Refreshes the access token with the refresh token. Deprecated: Use |refreshTokensWithHandler:|
+// to refresh access tokens instead.
+- (void)refreshAccessTokenWithHandler:(GIDAccessTokenHandler)handler
+    DEPRECATED_MSG_ATTRIBUTE("Use |refreshTokensWithHandler:| instead.");
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDGoogleUser.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDGoogleUser.h
new file mode 100644
index 0000000..9562a33
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDGoogleUser.h
@@ -0,0 +1,38 @@
+/*
+ * GIDGoogleUser.h
+ * Google Sign-In iOS SDK
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this SDK is subject to the Google APIs Terms of Service:
+ * https://developers.google.com/terms/
+ */
+
+#import <Foundation/Foundation.h>
+
+@class GIDAuthentication;
+@class GIDProfileData;
+
+// This class represents a user account.
+@interface GIDGoogleUser : NSObject <NSCoding>
+
+// The Google user ID.
+@property(nonatomic, readonly) NSString *userID;
+
+// Representation of the Basic profile data. It is only available if |shouldFetchBasicProfile|
+// is set and either |signInWithUser| or |SignIn| has been completed successfully.
+@property(nonatomic, readonly) GIDProfileData *profile;
+
+// The authentication object for the user.
+@property(nonatomic, readonly) GIDAuthentication *authentication;
+
+// The API scopes requested by the app in an array of |NSString|s.
+@property(nonatomic, readonly) NSArray *accessibleScopes;
+
+// For Google Apps hosted accounts, the domain of the user.
+@property(nonatomic, readonly) NSString *hostedDomain;
+
+// An OAuth2 authorization code for the home server.
+@property(nonatomic, readonly) NSString *serverAuthCode;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDProfileData.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDProfileData.h
new file mode 100644
index 0000000..8ffc995
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDProfileData.h
@@ -0,0 +1,34 @@
+/*
+ * GIDProfileData.h
+ * Google Sign-In iOS SDK
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this SDK is subject to the Google APIs Terms of Service:
+ * https://developers.google.com/terms/
+ */
+
+#import <Foundation/Foundation.h>
+
+// This class represents the basic profile information of a GIDGoogleUser.
+@interface GIDProfileData : NSObject <NSCoding>
+
+// The Google user's email.
+@property(nonatomic, readonly) NSString *email;
+
+// The Google user's full name.
+@property(nonatomic, readonly) NSString *name;
+
+// The Google user's given name.
+@property(nonatomic, readonly) NSString *givenName;
+
+// The Google user's family name.
+@property(nonatomic, readonly) NSString *familyName;
+
+// Whether or not the user has profile image.
+@property(nonatomic, readonly) BOOL hasImage;
+
+// Gets the user's profile image URL for the given dimension in pixels for each side of the square.
+- (NSURL *)imageURLWithDimension:(NSUInteger)dimension;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignIn.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignIn.h
new file mode 100644
index 0000000..e5cd40e
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignIn.h
@@ -0,0 +1,185 @@
+/*
+ * GIDSignIn.h
+ * Google Sign-In iOS SDK
+ *
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this SDK is subject to the Google APIs Terms of Service:
+ * https://developers.google.com/terms/
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@class GIDGoogleUser;
+@class GIDSignIn;
+
+// The error domain for NSErrors returned by the Google Identity SDK.
+extern NSString *const kGIDSignInErrorDomain;
+
+// A list of potential error codes returned from the Google Identity SDK.
+typedef NS_ENUM(NSInteger, GIDSignInErrorCode) {
+  // Indicates an unknown error has occured.
+  kGIDSignInErrorCodeUnknown = -1,
+  // Indicates a problem reading or writing to the application keychain.
+  kGIDSignInErrorCodeKeychain = -2,
+  // Indicates no appropriate applications are installed on the user's device which can handle
+  // sign-in. This code will only ever be returned if using webview and switching to browser have
+  // both been disabled.
+  kGIDSignInErrorCodeNoSignInHandlersInstalled = -3,
+  // Indicates there are no auth tokens in the keychain. This error code will be returned by
+  // signInSilently if the user has never signed in before with the given scopes, or if they have
+  // since signed out.
+  kGIDSignInErrorCodeHasNoAuthInKeychain = -4,
+  // Indicates the user canceled the sign in request.
+  kGIDSignInErrorCodeCanceled = -5,
+};
+
+// A protocol implemented by the delegate of |GIDSignIn| to receive a refresh token or an error.
+@protocol GIDSignInDelegate <NSObject>
+
+// The sign-in flow has finished and was successful if |error| is |nil|.
+- (void)signIn:(GIDSignIn *)signIn
+    didSignInForUser:(GIDGoogleUser *)user
+           withError:(NSError *)error;
+
+@optional
+
+// Finished disconnecting |user| from the app successfully if |error| is |nil|.
+- (void)signIn:(GIDSignIn *)signIn
+    didDisconnectWithUser:(GIDGoogleUser *)user
+                withError:(NSError *)error;
+
+@end
+
+// A protocol which may be implemented by consumers of |GIDSignIn| to be notified of when
+// GIDSignIn has finished dispatching the sign-in request.
+//
+// This protocol is useful for developers who implement their own "Sign In with Google" button.
+// Because there may be a brief delay between when the call to |signIn| is made, and when the
+// app switch occurs, it is best practice to have the UI react to the user's input by displaying
+// a spinner or other UI element. The |signInWillDispatch| method should be used to
+// stop or hide the spinner.
+@protocol GIDSignInUIDelegate <NSObject>
+
+@optional
+
+// The sign-in flow has finished selecting how to proceed, and the UI should no longer display
+// a spinner or other "please wait" element.
+- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error;
+
+// If implemented, this method will be invoked when sign in needs to display a view controller.
+// The view controller should be displayed modally (via UIViewController's |presentViewController|
+// method, and not pushed unto a navigation controller's stack.
+- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController;
+
+// If implemented, this method will be invoked when sign in needs to dismiss a view controller.
+// Typically, this should be implemented by calling |dismissViewController| on the passed
+// view controller.
+- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController;
+
+@end
+
+// This class signs the user in with Google. It also provides single sign-on via a capable Google
+// app if one is installed.
+//
+// For reference, please see "Google Sign-In for iOS" at
+// https://developers.google.com/identity/sign-in/ios
+// Here is sample code to use |GIDSignIn|:
+// 1. Get a reference to the |GIDSignIn| shared instance:
+//    GIDSignIn *signIn = [GIDSignIn sharedInstance];
+// 2. Set the OAuth 2.0 scopes you want to request:
+//    [signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]];
+// 3. Call [signIn setDelegate:self];
+// 4. Set up delegate method |signIn:didSignInForUser:withError:|.
+// 5. Call |handleURL| on the shared instance from |application:openUrl:...| in your app delegate.
+// 6. Call |signIn| on the shared instance;
+@interface GIDSignIn : NSObject
+
+// The authentication object for the current user, or |nil| if there is currently no logged in user.
+@property(nonatomic, readonly) GIDGoogleUser *currentUser;
+
+// The object to be notified when authentication is finished.
+@property(nonatomic, weak) id<GIDSignInDelegate> delegate;
+
+// The object to be notified when sign in dispatch selection is finished.
+@property(nonatomic, weak) id<GIDSignInUIDelegate> uiDelegate;
+
+// The client ID of the app from the Google APIs console.  Must set for sign-in to work.
+@property(nonatomic, copy) NSString *clientID;
+
+// The API scopes requested by the app in an array of |NSString|s.  The default value is |@[]|.
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSArray *scopes;
+
+// Whether or not to fetch basic profile data after signing in. The data is saved in the
+// |GIDGoogleUser.profileData| object.
+//
+// Setting the flag will add "email" and "profile" to scopes.
+// Defaults to |YES|.
+@property(nonatomic, assign) BOOL shouldFetchBasicProfile;
+
+// The language for sign-in, in the form of ISO 639-1 language code optionally followed by a dash
+// and ISO 3166-1 alpha-2 region code, such as |@"it"| or |@"pt-PT"|. Only set if different from
+// system default.
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSString *language;
+
+// The login hint to the authorization server, for example the user's ID, or email address,
+// to be prefilled if possible.
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSString *loginHint;
+
+// The client ID of the home web server.  This will be returned as the |audience| property of the
+// OpenID Connect ID token.  For more info on the ID token:
+// https://developers.google.com/identity/sign-in/ios/backend-auth
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSString *serverClientID;
+
+// The OpenID2 realm of the home web server. This allows Google to include the user's OpenID
+// Identifier in the OpenID Connect ID token.
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSString *openIDRealm;
+
+// The Google Apps domain to which users must belong to sign in.  To verify, check |GIDGoogleUser|'s
+// |hostedDomain| property.
+//
+// This property is optional. If you set it, set it before calling |signIn|.
+@property(nonatomic, copy) NSString *hostedDomain;
+
+// Returns a shared |GIDSignIn| instance.
++ (GIDSignIn *)sharedInstance;
+
+// This method should be called from your |UIApplicationDelegate|'s
+// |application:openURL:sourceApplication:annotation|.  Returns |YES| if |GIDSignIn| handled this
+// URL.
+- (BOOL)handleURL:(NSURL *)url
+    sourceApplication:(NSString *)sourceApplication
+           annotation:(id)annotation;
+
+// Checks whether the user has either currently signed in or has previous authentication saved in
+// keychain.
+- (BOOL)hasAuthInKeychain;
+
+// Attempts to sign in a previously authenticated user without interaction.  The delegate will be
+// called at the end of this process indicating success or failure.
+- (void)signInSilently;
+
+// Starts the sign-in process.  The delegate will be called at the end of this process.  Note that
+// this method should not be called when the app is starting up, (e.g in
+// application:didFinishLaunchingWithOptions:). Instead use the |signInSilently| method.
+- (void)signIn;
+
+// Marks current user as being in the signed out state.
+- (void)signOut;
+
+// Disconnects the current user from the app and revokes previous authentication. If the operation
+// succeeds, the OAuth 2.0 token is also removed from keychain.
+- (void)disconnect;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignInButton.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignInButton.h
new file mode 100644
index 0000000..1e75fd6
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GIDSignInButton.h
@@ -0,0 +1,51 @@
+/*
+ * GIDSignInButton.h
+ * Google Sign-In iOS SDK
+ *
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this SDK is subject to the Google APIs Terms of Service:
+ * https://developers.google.com/terms/
+ */
+
+#import <UIKit/UIKit.h>
+
+// The various layout styles supported by the GIDSignInButton.
+// The minimum size of the button depends on the language used for text.
+// The following dimensions (in points) fit for all languages:
+// kGIDSignInButtonStyleStandard: 230 x 48
+// kGIDSignInButtonStyleWide:     312 x 48
+// kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size)
+typedef NS_ENUM(NSInteger, GIDSignInButtonStyle) {
+  kGIDSignInButtonStyleStandard = 0,
+  kGIDSignInButtonStyleWide = 1,
+  kGIDSignInButtonStyleIconOnly = 2
+};
+
+// The various color schemes supported by the GIDSignInButton.
+typedef NS_ENUM(NSInteger, GIDSignInButtonColorScheme) {
+  kGIDSignInButtonColorSchemeDark = 0,
+  kGIDSignInButtonColorSchemeLight = 1
+};
+
+// This class provides the "Sign in with Google" button. You can instantiate this
+// class programmatically or from a NIB file.  You should set up the
+// |GIDSignIn| shared instance with your client ID and any additional scopes,
+// implement the delegate methods for |GIDSignIn|, and add this button to your
+// view hierarchy.
+@interface GIDSignInButton : UIControl
+
+// The layout style for the sign-in button.
+// Possible values:
+// - kGIDSignInButtonStyleStandard: 230 x 48 (default)
+// - kGIDSignInButtonStyleWide:     312 x 48
+// - kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size)
+@property(nonatomic, assign) GIDSignInButtonStyle style;
+
+// The color scheme for the sign-in button.
+// Possible values:
+// - kGIDSignInButtonColorSchemeDark
+// - kGIDSignInButtonColorSchemeLight (default)
+@property(nonatomic, assign) GIDSignInButtonColorScheme colorScheme;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GoogleSignIn.h b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GoogleSignIn.h
new file mode 100644
index 0000000..fba5281
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Headers/GoogleSignIn.h
@@ -0,0 +1,16 @@
+//
+//  GoogleSignIn.h
+//
+//  Copyright 2016 Google Inc.
+//
+
+#ifndef GOOGLESIGNIN_H
+#define GOOGLESIGNIN_H
+
+#import "GIDAuthentication.h"
+#import "GIDGoogleUser.h"
+#import "GIDProfileData.h"
+#import "GIDSignIn.h"
+#import "GIDSignInButton.h"
+
+#endif
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Modules/module.modulemap b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Modules/module.modulemap
new file mode 100644
index 0000000..0f00875
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/Modules/module.modulemap
@@ -0,0 +1,17 @@
+
+framework module GoogleSignIn {
+
+  export *
+
+  umbrella header "GoogleSignIn.h"
+
+  header "GIDAuthentication.h"
+  header "GIDGoogleUser.h"
+  header "GIDProfileData.h"
+  header "GIDSignIn.h"
+  header "GIDSignInButton.h"
+
+  link framework "CoreText"
+  link framework "SafariServices"
+  link framework "Security"
+}
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/embedded.mobileprovision b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/embedded.mobileprovision
new file mode 100644
index 0000000..6fb94b3
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSignIn.framework/embedded.mobileprovision
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleSymbolUtilities.framework/GoogleSymbolUtilities b/swift/google_signin_sdk_4_0_0/GoogleSymbolUtilities.framework/GoogleSymbolUtilities
new file mode 100644
index 0000000..016a524
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleSymbolUtilities.framework/GoogleSymbolUtilities
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/GoogleUtilities.framework/GoogleUtilities b/swift/google_signin_sdk_4_0_0/GoogleUtilities.framework/GoogleUtilities
new file mode 100644
index 0000000..31efbac
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/GoogleUtilities.framework/GoogleUtilities
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/README.google b/swift/google_signin_sdk_4_0_0/README.google
new file mode 100644
index 0000000..754d295
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/README.google
@@ -0,0 +1,11 @@
+URL: https://developers.google.com/identity/sign-in/ios/sdk/google_signin_sdk_4_0_0.zip
+Version: 4.0.0
+License: Copyright 2016 Google Inc.
+License File: None
+
+Description:
+The Google Sign-In SDK allows users to sign in with their Google account from
+third-party apps.
+
+Local Modifications:
+None
\ No newline at end of file
diff --git a/swift/google_signin_sdk_4_0_0/README.md b/swift/google_signin_sdk_4_0_0/README.md
new file mode 100644
index 0000000..68c6c57
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/README.md
@@ -0,0 +1,8 @@
+# Google Sign-In SDK for iOS
+
+The Google Sign-In SDK allows users to sign in with their Google account from
+third-party apps.
+
+Please visit [our developer
+site](https://developers.google.com/identity/sign-in/ios/) for integration
+instructions, documentation, support information, and terms of service.
diff --git a/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.h b/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.h
new file mode 100644
index 0000000..e2e0536
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.h
@@ -0,0 +1,28 @@
+//
+//  AppDelegate.h
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder<UIApplicationDelegate>
+
+// The sample app's |UIWindow|.
+@property(strong, nonatomic) UIWindow *window;
+// The navigation controller.
+@property(strong, nonatomic) UINavigationController *navigationController;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.m b/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.m
new file mode 100644
index 0000000..cb8a816
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/AppDelegate.m
@@ -0,0 +1,61 @@
+//
+//  AppDelegate.m
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import "AppDelegate.h"
+
+#import <GoogleSignIn/GoogleSignIn.h>
+
+#import "SignInViewController.h"
+
+@implementation AppDelegate
+
+// DO NOT USE THIS CLIENT ID. IT WILL NOT WORK FOR YOUR APP.
+// Please use the client ID created for you by Google.
+static NSString * const kClientID =
+    @"589453917038-qaoga89fitj2ukrsq27ko56fimmojac6.apps.googleusercontent.com";
+
+#pragma mark Object life-cycle.
+
+- (BOOL)application:(UIApplication *)application
+    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+  // Set app's client ID for |GIDSignIn|.
+  [GIDSignIn sharedInstance].clientID = kClientID;
+
+  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+  SignInViewController *masterViewController =
+      [[SignInViewController alloc] initWithNibName:@"SignInViewController"
+                                             bundle:nil];
+  self.navigationController =
+      [[UINavigationController alloc]
+          initWithRootViewController:masterViewController];
+  self.window.rootViewController = self.navigationController;
+  [self.window makeKeyAndVisible];
+
+  return YES;
+}
+
+- (BOOL)application:(UIApplication *)application
+              openURL:(NSURL *)url
+    sourceApplication:(NSString *)sourceApplication
+           annotation:(id)annotation {
+  return [[GIDSignIn sharedInstance] handleURL:url
+                             sourceApplication:sourceApplication
+                                    annotation:annotation];
+}
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.h b/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.h
new file mode 100644
index 0000000..8e792ca
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.h
@@ -0,0 +1,26 @@
+//
+//  AuthInspectorViewController.h
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <UIKit/UIKit.h>
+
+// A view controller for inspecting the various properties stored in the
+// |GIDSignIn| object.
+@interface AuthInspectorViewController : UIViewController
+
+@end
+
diff --git a/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.m b/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.m
new file mode 100644
index 0000000..83f8608
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/AuthInspectorViewController.m
@@ -0,0 +1,158 @@
+//
+//  AuthInspectorViewController.m
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import "AuthInspectorViewController.h"
+
+#import <GoogleSignIn/GoogleSignIn.h>
+
+static NSString * const kReusableCellIdentifier = @"AuthInspectorCell";
+static CGFloat const kVeryTallConstraint = 10000.f;
+static CGFloat const kTableViewCellFontSize = 16.f;
+static CGFloat const kTableViewCellPadding = 22.f;
+
+@interface AuthInspectorViewController () <UITableViewDataSource, UITableViewDelegate>
+
+@end
+
+@implementation AuthInspectorViewController {
+  // Key-paths for the GIDSignIn instance to inspect.
+  NSArray *_keyPaths;
+}
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
+  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+  if (self) {
+    _keyPaths = @[
+      @"authentication.accessToken",
+      @"authentication.accessTokenExpirationDate",
+      @"authentication.refreshToken",
+      @"authentication.idToken",
+      @"accessibleScopes",
+      @"userID",
+      @"serverAuthCode",
+      @"profile.email",
+      @"profile.name",
+    ];
+  }
+  return self;
+}
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+  UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero
+                                                        style:UITableViewStyleGrouped];
+  tableView.delegate = self;
+  tableView.dataSource = self;
+  tableView.frame = self.view.bounds;
+  [self.view addSubview:tableView];
+}
+
+- (void)viewDidLayoutSubviews {
+  if (self.view.subviews.count) {
+    ((UIView *)self.view.subviews[0]).frame = self.view.bounds;
+  }
+}
+
+#pragma mark - UITableViewDataSource
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+  return (NSInteger)[_keyPaths count];
+}
+
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
+  return [self contentForSectionHeader:section];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+  return 1;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView
+         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kReusableCellIdentifier];
+  if (!cell) {
+    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
+                                   reuseIdentifier:kReusableCellIdentifier];
+  }
+  cell.textLabel.font = [UIFont systemFontOfSize:kTableViewCellFontSize];
+  cell.textLabel.numberOfLines = 0;
+  cell.textLabel.text = [self contentForRowAtIndexPath:indexPath];
+  cell.selectionStyle = UITableViewCellSelectionStyleNone;
+
+  return cell;
+}
+
+#pragma mark - UITableViewDelegate
+
+- (void)tableView:(UITableView *)tableView
+    willDisplayHeaderView:(UIView *)view
+               forSection:(NSInteger)section {
+  // The default header view capitalizes the title, which we don't want (because it's the key path).
+  if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) {
+    ((UITableViewHeaderFooterView *)view).textLabel.text = [self contentForSectionHeader:section];
+  }
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+  return [self heightForTableView:tableView content:[self contentForSectionHeader:section]]
+      - (section ? kTableViewCellPadding : 0);  // to remove the extra padding in later sections.
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+  return [self heightForTableView:tableView content:[self contentForRowAtIndexPath:indexPath]];
+}
+
+#pragma mark - Helpers
+
+- (NSString *)contentForSectionHeader:(NSInteger)section {
+  return _keyPaths[section];
+}
+
+- (NSString *)contentForRowAtIndexPath:(NSIndexPath *)indexPath {
+  NSString *keyPath = _keyPaths[indexPath.section];
+  return [[[GIDSignIn sharedInstance].currentUser valueForKeyPath:keyPath] description];
+}
+
+- (CGFloat)heightForTableView:(UITableView *)tableView content:(NSString *)content {
+  CGSize constraintSize =
+      CGSizeMake(tableView.frame.size.width - 2 * kTableViewCellPadding, kVeryTallConstraint);
+  CGSize size;
+  UIFont *font = [UIFont systemFontOfSize:kTableViewCellFontSize];
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
+  if ([content respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {
+    NSDictionary *attributes = @{ NSFontAttributeName : font };
+    size = [content boundingRectWithSize:constraintSize
+                                 options:0
+                              attributes:attributes
+                                 context:NULL].size;
+  } else {
+    // Using the deprecated method as this instance doesn't respond to the new method since this is
+    // running on an older OS version.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    size = [content sizeWithFont:font constrainedToSize:constraintSize];
+#pragma clang diagnostic pop
+  }
+#else
+  size = [value sizeWithFont:font constrainedToSize:constraintSize];
+#endif
+  return size.height + kTableViewCellPadding;
+}
+
+@end
+
diff --git a/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.h b/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.h
new file mode 100644
index 0000000..b7227db
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.h
@@ -0,0 +1,56 @@
+//
+//  DataPickerState.h
+//
+//  Copyright 2014 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <Foundation/Foundation.h>
+
+// Dictionary Key indicating whether multiple selection is enabled.
+extern NSString * const kMultipleSelectKey;
+// Dictionary Key for the array of elements to be shown.
+extern NSString * const kElementsKey;
+// Dictionary Key for the label of each element.
+extern NSString * const kLabelKey;
+// Dictionary Key for the short label for each element (Optional).
+extern NSString * const kShortLabelKey;
+// Dictionary Key to indicate whether a particular element should be selected by default (Optional).
+extern NSString * const kSelectedKey;
+
+// DataPickerState objects keep track of the list of available cells and set
+// of selected cells that are being used in a DataPickerViewController object.
+@interface DataPickerState : NSObject
+
+// An ordered list of cell labels (NSStrings) to select from
+@property(strong, nonatomic) NSArray *cellLabels;
+// A set of the labels of the selected cells (NSStrings).
+@property(strong, nonatomic) NSMutableSet *selectedCells;
+// Determines if multiple cells can be checked.
+@property(assign, nonatomic) BOOL multipleSelectEnabled;
+
+// Initializes a DataPickerState to collect its data from
+// the provided dictionary. The assumption about the provided
+// dictionary is that it obeys the structure:
+// dict[@"multiple-select"] - BOOL that represents whether multiple of the
+//                            elements can be simultaneously selected.
+// dict[@"elements"] - Array that contains the list of cell items to be shown.
+// dict[@"elements"][index] - Dictionary that contains properties for each cell.
+// dict[@"elements"][index][@"label"] - String storing the label of the cell.
+// dict[@"elements"][index][@"selected"] - BOOL for whether the cell begins as
+//                                         selected. If this property is not
+//                                         set, then we default to NO.
+- (id)initWithDictionary:(NSDictionary *)dict;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.m b/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.m
new file mode 100644
index 0000000..8d1ef59
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/DataPickerState.m
@@ -0,0 +1,61 @@
+//
+//  DataPickerState.m
+//
+//  Copyright 2014 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import "DataPickerState.h"
+
+NSString * const kMultipleSelectKey = @"multiple-select";
+NSString * const kElementsKey = @"elements";
+NSString * const kLabelKey = @"label";
+NSString * const kShortLabelKey = @"shortLabel";
+NSString * const kSelectedKey = @"selected";
+
+@implementation DataPickerState
+
+- (id)initWithDictionary:(NSDictionary *)dict {
+  self = [super init];
+  if (self) {
+    _multipleSelectEnabled =
+        [[dict objectForKey:kMultipleSelectKey] boolValue];
+
+    NSMutableArray *cellLabels = [[NSMutableArray alloc] init];
+    NSMutableSet *selectedCells = [[NSMutableSet alloc] init];
+
+    NSArray *elements = [dict objectForKey:kElementsKey];
+    for (NSDictionary *elementDict in elements) {
+      NSMutableDictionary *cellLabelDict = [NSMutableDictionary dictionary];
+      NSString *label = [elementDict objectForKey:kLabelKey];
+      cellLabelDict[kLabelKey] = label;
+
+      if ([elementDict objectForKey:kShortLabelKey]) {
+        cellLabelDict[kShortLabelKey] = [elementDict objectForKey:kShortLabelKey];
+      }
+      [cellLabels addObject:cellLabelDict];
+
+      // Default selection mode is unselected, unless specified in plist.
+      if ([[elementDict objectForKey:kSelectedKey] boolValue]) {
+        [selectedCells addObject:label];
+      }
+    }
+
+    self.cellLabels = cellLabels;
+    self.selectedCells = selectedCells;
+  }
+  return self;
+}
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.h b/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.h
new file mode 100644
index 0000000..4e6f46c
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.h
@@ -0,0 +1,40 @@
+//
+//  DataPickerViewController.h
+//
+//  Copyright 2014 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <UIKit/UIKit.h>
+
+@class DataPickerState;
+
+// This view controller controls a table view meant to select
+// options from a list. The list is supplied from the DataPickerDictionary.plist
+// file based upon what |dataKey| the controller is initialized with.
+@interface DataPickerViewController : UITableViewController
+
+// |dataState| stores the list of cells and the current set of selected cells.
+// It should be created and owned by whoever owns the DataPickerViewController,
+// so we only need a weak reference to it from here.
+@property(weak, readonly, nonatomic) DataPickerState *dataState;
+
+// This method initializes a DataPickerViewController using
+// a DataPickerState object, from which the view controller
+// obtains cell information for use in its table.
+- (id)initWithNibName:(NSString *)nibNameOrNil
+               bundle:(NSBundle *)nibBundleOrNil
+            dataState:(DataPickerState *)dataState;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.m b/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.m
new file mode 100644
index 0000000..6e83fb6
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/DataPickerViewController.m
@@ -0,0 +1,106 @@
+//
+//  DataPickerViewController.m
+//
+//  Copyright 2014 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import "DataPickerState.h"
+#import "DataPickerViewController.h"
+
+@implementation DataPickerViewController
+
+- (id)initWithNibName:(NSString *)nibNameOrNil
+               bundle:(NSBundle *)nibBundleOrNil
+            dataState:(DataPickerState *)dataState {
+  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+  if (self) {
+    _dataState = dataState;
+  }
+  return self;
+}
+
+#pragma mark - Table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+  return 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView
+    numberOfRowsInSection:(NSInteger)section {
+  return [self.dataState.cellLabels count];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView
+         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+  static NSString * const kCellIdentifier = @"Cell";
+  UITableViewCell *cell =
+      [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
+
+  if (cell == nil) {
+    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
+                                  reuseIdentifier:kCellIdentifier];
+  }
+
+  NSDictionary *cellLabelDict = self.dataState.cellLabels[indexPath.row];
+  NSString *cellLabelText = cellLabelDict[kLabelKey];
+  if ([cellLabelDict objectForKey:kShortLabelKey]) {
+    cellLabelText = [cellLabelDict objectForKey:kShortLabelKey];
+  }
+  cell.textLabel.text = cellLabelText;
+  // If the cell is selected, mark it as checked
+  if ([self.dataState.selectedCells containsObject:cellLabelDict[kLabelKey]]) {
+    cell.accessoryType = UITableViewCellAccessoryCheckmark;
+  } else {
+    cell.accessoryType = UITableViewCellAccessoryNone;
+  }
+  return cell;
+}
+
+#pragma mark - Table view delegate
+
+- (void)tableView:(UITableView *)tableView
+    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+  UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
+  NSDictionary *selectedCellDict = _dataState.cellLabels[indexPath.row];
+  NSString *label = selectedCellDict[kLabelKey];
+
+  if (self.dataState.multipleSelectEnabled) {
+    // If multiple selections are allowed, then toggle the state
+    // of the selected cell
+    if ([self.dataState.selectedCells containsObject:label]) {
+      [self.dataState.selectedCells removeObject:label];
+      selectedCell.accessoryType = UITableViewCellAccessoryNone;
+    } else {
+      [self.dataState.selectedCells addObject:label];
+      selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
+    }
+  } else {
+    // Set all cells to unchecked except for the one that was just selected
+    [self.dataState.selectedCells removeAllObjects];
+    [self.dataState.selectedCells addObject:label];
+
+    for (NSIndexPath *curPath in [self.tableView indexPathsForVisibleRows]) {
+      UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:curPath];
+      if (curPath.row == indexPath.row) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+      } else {
+        cell.accessoryType = UITableViewCellAccessoryNone;
+      }
+    }
+  }
+  [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+}
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/LaunchScreen.xib b/swift/google_signin_sdk_4_0_0/Sample/LaunchScreen.xib
new file mode 100644
index 0000000..8c06c68
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/LaunchScreen.xib
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6254" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6247"/>
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Google Sign-In" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
+                    <rect key="frame" x="20" y="140" width="441" height="43"/>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Sample App" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Npk-1c-nVk">
+                    <rect key="frame" x="168.5" y="204.5" width="144.5" height="24"/>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
+                    <color key="textColor" red="0.40000000596046448" green="0.40000000596046448" blue="0.40000000596046448" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="highlightedColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+            <constraints>
+                <constraint firstAttribute="centerX" secondItem="Npk-1c-nVk" secondAttribute="centerX" constant="-0.5" id="8Hl-kO-KfB"/>
+                <constraint firstAttribute="centerY" secondItem="Npk-1c-nVk" secondAttribute="centerY" constant="23.5" id="J0S-6m-MK8"/>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="Kid-kn-2rF"/>
+                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="404" y="445"/>
+        </view>
+    </objects>
+</document>
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/DataPickerDictionary.plist b/swift/google_signin_sdk_4_0_0/Sample/Resources/DataPickerDictionary.plist
new file mode 100644
index 0000000..619c39d
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/DataPickerDictionary.plist
@@ -0,0 +1,46 @@
+<?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>Style</key>
+	<dict>
+		<key>multiple-select</key>
+		<false/>
+		<key>elements</key>
+		<array>
+			<dict>
+				<key>label</key>
+				<string>Standard</string>
+				<key>selected</key>
+				<true/>
+			</dict>
+			<dict>
+				<key>label</key>
+				<string>Wide</string>
+			</dict>
+			<dict>
+				<key>label</key>
+				<string>Icon</string>
+			</dict>
+		</array>
+	</dict>
+	<key>Color scheme</key>
+	<dict>
+		<key>multiple-select</key>
+		<false/>
+		<key>elements</key>
+		<array>
+			<dict>
+				<key>label</key>
+				<string>Light</string>
+				<key>selected</key>
+				<true/>
+			</dict>
+			<dict>
+				<key>label</key>
+				<string>Dark</string>
+			</dict>
+		</array>
+	</dict>
+</dict>
+</plist>
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Contents.json b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..9613a65
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,162 @@
+{
+  "images" : [
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-29.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-29_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-29_3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "Icon-40_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "Icon-40_3x.png",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "57x57",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "57x57",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "Icon-60_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "Icon-60_3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "Icon-29.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "Icon-29_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "Icon-40.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "Icon-40_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "50x50",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "50x50",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "72x72",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "72x72",
+      "scale" : "2x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "Icon-76.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "Icon-76_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "83.5x83.5",
+      "idiom" : "ipad",
+      "filename" : "Icon-83_2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "16x16",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "16x16",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "32x32",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "32x32",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "128x128",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "128x128",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "256x256",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "256x256",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29.png
new file mode 100644
index 0000000..7cec570
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_2x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_2x.png
new file mode 100644
index 0000000..c0c9ec2
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_3x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_3x.png
new file mode 100644
index 0000000..78c08ab
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-29_3x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40.png
new file mode 100644
index 0000000..20c5306
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_2x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_2x.png
new file mode 100644
index 0000000..8d1d377
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_3x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_3x.png
new file mode 100644
index 0000000..ea08035
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-40_3x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_2x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_2x.png
new file mode 100644
index 0000000..de13151
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_3x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_3x.png
new file mode 100644
index 0000000..b242897
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-60_3x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76.png
new file mode 100644
index 0000000..f7c70b2
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76_2x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76_2x.png
new file mode 100644
index 0000000..2f54a15
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-76_2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-83_2x.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-83_2x.png
new file mode 100644
index 0000000..3c2a5a9
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/Images.xcassets/AppIcon.appiconset/Icon-83_2x.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/PlaceholderAvatar.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/PlaceholderAvatar.png
new file mode 100644
index 0000000..2ab238f
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/PlaceholderAvatar.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ar.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ar.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ar.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ca.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ca.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ca.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/cs.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/cs.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/cs.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/da.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/da.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/da.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/de.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/de.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/de.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/el.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/el.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/el.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/en.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/en.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/en.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/en_GB.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/en_GB.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/en_GB.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/es.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/es.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/es.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/es_MX.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/es_MX.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/es_MX.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/fi.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/fi.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/fi.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/fr.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/fr.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/fr.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/he.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/he.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/he.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/hr.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/hr.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/hr.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/hu.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/hu.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/hu.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/id.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/id.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/id.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/it.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/it.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/it.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ja.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ja.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ja.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ko.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ko.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ko.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ms.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ms.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ms.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/nb.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/nb.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/nb.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/nl.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/nl.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/nl.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/pl.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/pl.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/pl.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/pt.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_BR.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_BR.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_BR.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_PT.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_PT.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/pt_PT.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/refresh.png b/swift/google_signin_sdk_4_0_0/Sample/Resources/refresh.png
new file mode 100644
index 0000000..6a3a709
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/refresh.png
Binary files differ
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ro.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ro.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ro.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/ru.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/ru.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/ru.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/sk.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/sk.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/sk.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/sv.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/sv.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/sv.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/th.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/th.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/th.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/tr.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/tr.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/tr.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/uk.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/uk.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/uk.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/vi.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/vi.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/vi.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_CN.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_CN.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_CN.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_TW.lproj/Dummy.strings b/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_TW.lproj/Dummy.strings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/Resources/zh_TW.lproj/Dummy.strings
diff --git a/swift/google_signin_sdk_4_0_0/Sample/SignInSample-Info.plist b/swift/google_signin_sdk_4_0_0/Sample/SignInSample-Info.plist
new file mode 100644
index 0000000..1f7aa49
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/SignInSample-Info.plist
@@ -0,0 +1,73 @@
+<?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>CFBundleDisplayName</key>
+	<string>Sign-In Sample</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIcons</key>
+	<dict>
+		<key>CFBundlePrimaryIcon</key>
+		<dict>
+			<key>CFBundleIconFiles</key>
+			<array>
+				<string>Icon.png</string>
+				<string>Icon-72.png</string>
+				<string>Icon-144.png</string>
+				<string>Icon@2x.png</string>
+			</array>
+		</dict>
+	</dict>
+	<key>CFBundleIdentifier</key>
+	<string>com.google.${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>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>com.googleusercontent.apps.589453917038-qaoga89fitj2ukrsq27ko56fimmojac6</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>com.googleusercontent.apps.589453917038-qaoga89fitj2ukrsq27ko56fimmojac6</string>
+			</array>
+		</dict>
+	</array>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<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/swift/google_signin_sdk_4_0_0/Sample/SignInSample.xcodeproj/project.pbxproj b/swift/google_signin_sdk_4_0_0/Sample/SignInSample.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..60fe0cf
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/SignInSample.xcodeproj/project.pbxproj
@@ -0,0 +1,387 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		D947C2F11BC1DDDA004BF2E0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D947C2F01BC1DDDA004BF2E0 /* libz.dylib */; };
+		D996592C1CBF13C200F12145 /* GoogleAppUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99659271CBF13C200F12145 /* GoogleAppUtilities.framework */; };
+		D996592D1CBF13C200F12145 /* GoogleAuthUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99659281CBF13C200F12145 /* GoogleAuthUtilities.framework */; };
+		D996592E1CBF13C200F12145 /* GoogleNetworkingUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99659291CBF13C200F12145 /* GoogleNetworkingUtilities.framework */; };
+		D996592F1CBF13C200F12145 /* GoogleSymbolUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D996592A1CBF13C200F12145 /* GoogleSymbolUtilities.framework */; };
+		D99659301CBF13C200F12145 /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D996592B1CBF13C200F12145 /* GoogleUtilities.framework */; };
+		D99924FB1A92B478008CC226 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D99924F41A92B478008CC226 /* AppDelegate.m */; };
+		D99924FC1A92B478008CC226 /* AuthInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D99924F61A92B478008CC226 /* AuthInspectorViewController.m */; };
+		D99924FD1A92B478008CC226 /* DataPickerState.m in Sources */ = {isa = PBXBuildFile; fileRef = D99924F81A92B478008CC226 /* DataPickerState.m */; };
+		D99924FE1A92B478008CC226 /* DataPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D99924FA1A92B478008CC226 /* DataPickerViewController.m */; };
+		D99925021A92B4BC008CC226 /* SignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D99925001A92B4BC008CC226 /* SignInViewController.m */; };
+		D99925031A92B4BC008CC226 /* SignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D99925011A92B4BC008CC226 /* SignInViewController.xib */; };
+		D99925051A92B4D3008CC226 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D99925041A92B4D3008CC226 /* main.m */; };
+		D999250A1A92B4F0008CC226 /* DataPickerDictionary.plist in Resources */ = {isa = PBXBuildFile; fileRef = D99925081A92B4F0008CC226 /* DataPickerDictionary.plist */; };
+		D999250B1A92B4F0008CC226 /* refresh.png in Resources */ = {isa = PBXBuildFile; fileRef = D99925091A92B4F0008CC226 /* refresh.png */; };
+		D999250E1A92B54D008CC226 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D999250D1A92B54D008CC226 /* AddressBook.framework */; };
+		D99925151A92B5A8008CC226 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99925141A92B5A8008CC226 /* SystemConfiguration.framework */; };
+		D99925171A92B5BD008CC226 /* GoogleSignIn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99925161A92B5BD008CC226 /* GoogleSignIn.framework */; };
+		D999251A1A92BCCD008CC226 /* GoogleSignIn.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D99925191A92BCCD008CC226 /* GoogleSignIn.bundle */; };
+		D9D3B1DA1B72A28500D2EAA2 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9D3B1D91B72A28500D2EAA2 /* SafariServices.framework */; };
+		D9D634B91BA3608900B7B48B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D9D634B81BA3608900B7B48B /* libz.tbd */; };
+		D9F31B191AB384EE00715FBF /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9F31B181AB384EE00715FBF /* LaunchScreen.xib */; };
+		D9F31B1C1AB384FC00715FBF /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D9F31B1A1AB384FC00715FBF /* Images.xcassets */; };
+		D9F31B1D1AB384FC00715FBF /* PlaceholderAvatar.png in Resources */ = {isa = PBXBuildFile; fileRef = D9F31B1B1AB384FC00715FBF /* PlaceholderAvatar.png */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		D947C2F01BC1DDDA004BF2E0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		D99659271CBF13C200F12145 /* GoogleAppUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppUtilities.framework; path = ../GoogleAppUtilities.framework; sourceTree = "<group>"; };
+		D99659281CBF13C200F12145 /* GoogleAuthUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAuthUtilities.framework; path = ../GoogleAuthUtilities.framework; sourceTree = "<group>"; };
+		D99659291CBF13C200F12145 /* GoogleNetworkingUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleNetworkingUtilities.framework; path = ../GoogleNetworkingUtilities.framework; sourceTree = "<group>"; };
+		D996592A1CBF13C200F12145 /* GoogleSymbolUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSymbolUtilities.framework; path = ../GoogleSymbolUtilities.framework; sourceTree = "<group>"; };
+		D996592B1CBF13C200F12145 /* GoogleUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleUtilities.framework; path = ../GoogleUtilities.framework; sourceTree = "<group>"; };
+		D99924CA1A92B3C7008CC226 /* SignInSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SignInSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D99924F31A92B478008CC226 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
+		D99924F41A92B478008CC226 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
+		D99924F51A92B478008CC226 /* AuthInspectorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthInspectorViewController.h; sourceTree = SOURCE_ROOT; };
+		D99924F61A92B478008CC226 /* AuthInspectorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthInspectorViewController.m; sourceTree = SOURCE_ROOT; };
+		D99924F71A92B478008CC226 /* DataPickerState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataPickerState.h; sourceTree = SOURCE_ROOT; };
+		D99924F81A92B478008CC226 /* DataPickerState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataPickerState.m; sourceTree = SOURCE_ROOT; };
+		D99924F91A92B478008CC226 /* DataPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataPickerViewController.h; sourceTree = SOURCE_ROOT; };
+		D99924FA1A92B478008CC226 /* DataPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataPickerViewController.m; sourceTree = SOURCE_ROOT; };
+		D99924FF1A92B4BC008CC226 /* SignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignInViewController.h; sourceTree = SOURCE_ROOT; };
+		D99925001A92B4BC008CC226 /* SignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignInViewController.m; sourceTree = SOURCE_ROOT; };
+		D99925011A92B4BC008CC226 /* SignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SignInViewController.xib; sourceTree = SOURCE_ROOT; };
+		D99925041A92B4D3008CC226 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
+		D99925061A92B4DC008CC226 /* SignInSample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "SignInSample-Info.plist"; sourceTree = SOURCE_ROOT; };
+		D99925081A92B4F0008CC226 /* DataPickerDictionary.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = DataPickerDictionary.plist; path = Resources/DataPickerDictionary.plist; sourceTree = SOURCE_ROOT; };
+		D99925091A92B4F0008CC226 /* refresh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = refresh.png; path = Resources/refresh.png; sourceTree = SOURCE_ROOT; };
+		D999250D1A92B54D008CC226 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
+		D99925141A92B5A8008CC226 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		D99925161A92B5BD008CC226 /* GoogleSignIn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSignIn.framework; path = ../GoogleSignIn.framework; sourceTree = "<group>"; };
+		D99925191A92BCCD008CC226 /* GoogleSignIn.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = GoogleSignIn.bundle; path = ../GoogleSignIn.bundle; sourceTree = "<group>"; };
+		D9D3B1D91B72A28500D2EAA2 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
+		D9D634B81BA3608900B7B48B /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		D9F31B181AB384EE00715FBF /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = SOURCE_ROOT; };
+		D9F31B1A1AB384FC00715FBF /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Resources/Images.xcassets; sourceTree = SOURCE_ROOT; };
+		D9F31B1B1AB384FC00715FBF /* PlaceholderAvatar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PlaceholderAvatar.png; path = Resources/PlaceholderAvatar.png; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		D99924C71A92B3C7008CC226 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D947C2F11BC1DDDA004BF2E0 /* libz.dylib in Frameworks */,
+				D9D634B91BA3608900B7B48B /* libz.tbd in Frameworks */,
+				D996592C1CBF13C200F12145 /* GoogleAppUtilities.framework in Frameworks */,
+				D996592D1CBF13C200F12145 /* GoogleAuthUtilities.framework in Frameworks */,
+				D996592E1CBF13C200F12145 /* GoogleNetworkingUtilities.framework in Frameworks */,
+				D99925171A92B5BD008CC226 /* GoogleSignIn.framework in Frameworks */,
+				D996592F1CBF13C200F12145 /* GoogleSymbolUtilities.framework in Frameworks */,
+				D99659301CBF13C200F12145 /* GoogleUtilities.framework in Frameworks */,
+				D999250E1A92B54D008CC226 /* AddressBook.framework in Frameworks */,
+				D9D3B1DA1B72A28500D2EAA2 /* SafariServices.framework in Frameworks */,
+				D99925151A92B5A8008CC226 /* SystemConfiguration.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		D99924C11A92B3C7008CC226 = {
+			isa = PBXGroup;
+			children = (
+				D99924CC1A92B3C7008CC226 /* SignInSample */,
+				D999250F1A92B555008CC226 /* Frameworks */,
+				D99924CB1A92B3C7008CC226 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		D99924CB1A92B3C7008CC226 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				D99924CA1A92B3C7008CC226 /* SignInSample.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		D99924CC1A92B3C7008CC226 /* SignInSample */ = {
+			isa = PBXGroup;
+			children = (
+				D99924F31A92B478008CC226 /* AppDelegate.h */,
+				D99924F41A92B478008CC226 /* AppDelegate.m */,
+				D99924F51A92B478008CC226 /* AuthInspectorViewController.h */,
+				D99924F61A92B478008CC226 /* AuthInspectorViewController.m */,
+				D99924F71A92B478008CC226 /* DataPickerState.h */,
+				D99924F81A92B478008CC226 /* DataPickerState.m */,
+				D99924F91A92B478008CC226 /* DataPickerViewController.h */,
+				D99924FA1A92B478008CC226 /* DataPickerViewController.m */,
+				D99924FF1A92B4BC008CC226 /* SignInViewController.h */,
+				D99925001A92B4BC008CC226 /* SignInViewController.m */,
+				D99925011A92B4BC008CC226 /* SignInViewController.xib */,
+				D999250C1A92B4FC008CC226 /* Resources */,
+				D99924CD1A92B3C7008CC226 /* Supporting Files */,
+			);
+			path = SignInSample;
+			sourceTree = "<group>";
+		};
+		D99924CD1A92B3C7008CC226 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				D99925061A92B4DC008CC226 /* SignInSample-Info.plist */,
+				D99925041A92B4D3008CC226 /* main.m */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		D999250C1A92B4FC008CC226 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				D99925081A92B4F0008CC226 /* DataPickerDictionary.plist */,
+				D9F31B1A1AB384FC00715FBF /* Images.xcassets */,
+				D9F31B181AB384EE00715FBF /* LaunchScreen.xib */,
+				D9F31B1B1AB384FC00715FBF /* PlaceholderAvatar.png */,
+				D99925091A92B4F0008CC226 /* refresh.png */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		D999250F1A92B555008CC226 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				D99659271CBF13C200F12145 /* GoogleAppUtilities.framework */,
+				D99659281CBF13C200F12145 /* GoogleAuthUtilities.framework */,
+				D99659291CBF13C200F12145 /* GoogleNetworkingUtilities.framework */,
+				D996592A1CBF13C200F12145 /* GoogleSymbolUtilities.framework */,
+				D996592B1CBF13C200F12145 /* GoogleUtilities.framework */,
+				D947C2F01BC1DDDA004BF2E0 /* libz.dylib */,
+				D9D634B81BA3608900B7B48B /* libz.tbd */,
+				D9D3B1D91B72A28500D2EAA2 /* SafariServices.framework */,
+				D99925161A92B5BD008CC226 /* GoogleSignIn.framework */,
+				D99925191A92BCCD008CC226 /* GoogleSignIn.bundle */,
+				D999250D1A92B54D008CC226 /* AddressBook.framework */,
+				D99925141A92B5A8008CC226 /* SystemConfiguration.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		D99924C91A92B3C7008CC226 /* SignInSample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D99924ED1A92B3C7008CC226 /* Build configuration list for PBXNativeTarget "SignInSample" */;
+			buildPhases = (
+				D99924C61A92B3C7008CC226 /* Sources */,
+				D99924C71A92B3C7008CC226 /* Frameworks */,
+				D99924C81A92B3C7008CC226 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = SignInSample;
+			productName = SignInSample;
+			productReference = D99924CA1A92B3C7008CC226 /* SignInSample.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		D99924C21A92B3C7008CC226 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0610;
+				ORGANIZATIONNAME = "Google Inc";
+				TargetAttributes = {
+					D99924C91A92B3C7008CC226 = {
+						CreatedOnToolsVersion = 6.1.1;
+					};
+				};
+			};
+			buildConfigurationList = D99924C51A92B3C7008CC226 /* Build configuration list for PBXProject "SignInSample" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = D99924C11A92B3C7008CC226;
+			productRefGroup = D99924CB1A92B3C7008CC226 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				D99924C91A92B3C7008CC226 /* SignInSample */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		D99924C81A92B3C7008CC226 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D999251A1A92BCCD008CC226 /* GoogleSignIn.bundle in Resources */,
+				D9F31B1D1AB384FC00715FBF /* PlaceholderAvatar.png in Resources */,
+				D9F31B1C1AB384FC00715FBF /* Images.xcassets in Resources */,
+				D999250B1A92B4F0008CC226 /* refresh.png in Resources */,
+				D99925031A92B4BC008CC226 /* SignInViewController.xib in Resources */,
+				D9F31B191AB384EE00715FBF /* LaunchScreen.xib in Resources */,
+				D999250A1A92B4F0008CC226 /* DataPickerDictionary.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		D99924C61A92B3C7008CC226 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D99925021A92B4BC008CC226 /* SignInViewController.m in Sources */,
+				D99924FE1A92B478008CC226 /* DataPickerViewController.m in Sources */,
+				D99924FD1A92B478008CC226 /* DataPickerState.m in Sources */,
+				D99924FC1A92B478008CC226 /* AuthInspectorViewController.m in Sources */,
+				D99925051A92B4D3008CC226 /* main.m in Sources */,
+				D99924FB1A92B478008CC226 /* AppDelegate.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		D99924EB1A92B3C7008CC226 /* 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;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				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 = 7.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "-ObjC";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		D99924EC1A92B3C7008CC226 /* 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 = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				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 = 7.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				OTHER_LDFLAGS = "-ObjC";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		D99924EE1A92B3C7008CC226 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					..,
+				);
+				INFOPLIST_FILE = "$(SRCROOT)/SignInSample-Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		D99924EF1A92B3C7008CC226 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					..,
+				);
+				INFOPLIST_FILE = "$(SRCROOT)/SignInSample-Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		D99924C51A92B3C7008CC226 /* Build configuration list for PBXProject "SignInSample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D99924EB1A92B3C7008CC226 /* Debug */,
+				D99924EC1A92B3C7008CC226 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D99924ED1A92B3C7008CC226 /* Build configuration list for PBXNativeTarget "SignInSample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D99924EE1A92B3C7008CC226 /* Debug */,
+				D99924EF1A92B3C7008CC226 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = D99924C21A92B3C7008CC226 /* Project object */;
+}
diff --git a/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.h b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.h
new file mode 100644
index 0000000..9c1c487
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.h
@@ -0,0 +1,53 @@
+//
+//  SignInViewController.h
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <UIKit/UIKit.h>
+
+@class GIDSignInButton;
+
+// A view controller for the Google+ sign-in button which initiates a standard
+// OAuth 2.0 flow and provides an access token and a refresh token. A "Sign out"
+// button is provided to allow users to sign out of this application.
+@interface SignInViewController : UITableViewController<UIAlertViewDelegate>
+
+@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
+// A label to display the result of the sign-in action.
+@property(weak, nonatomic) IBOutlet UILabel *signInAuthStatus;
+// A label to display the signed-in user's display name.
+@property(weak, nonatomic) IBOutlet UILabel *userName;
+// A label to display the signed-in user's email address.
+@property(weak, nonatomic) IBOutlet UILabel *userEmailAddress;
+// An image view to display the signed-in user's avatar image.
+@property(weak, nonatomic) IBOutlet UIImageView *userAvatar;
+// A button to sign out of this application.
+@property(weak, nonatomic) IBOutlet UIButton *signOutButton;
+// A button to disconnect user from this application.
+@property(weak, nonatomic) IBOutlet UIButton *disconnectButton;
+// A button to inspect the authorization object.
+@property(weak, nonatomic) IBOutlet UIButton *credentialsButton;
+// A dynamically-created slider for controlling the sign-in button width.
+@property(weak, nonatomic) UISlider *signInButtonWidthSlider;
+
+// Called when the user presses the "Sign out" button.
+- (IBAction)signOut:(id)sender;
+// Called when the user presses the "Disconnect" button.
+- (IBAction)disconnect:(id)sender;
+// Called when the user presses the "Credentials" button.
+- (IBAction)showAuthInspector:(id)sender;
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.m b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.m
new file mode 100644
index 0000000..26b0be2
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.m
@@ -0,0 +1,486 @@
+//
+//  SignInViewController.m
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import "SignInViewController.h"
+
+#import <GoogleSignIn/GoogleSignIn.h>
+
+#import "AuthInspectorViewController.h"
+#import "DataPickerState.h"
+#import "DataPickerViewController.h"
+
+typedef void(^AlertViewActionBlock)(void);
+
+@interface SignInViewController () <GIDSignInDelegate, GIDSignInUIDelegate>
+
+@property (nonatomic, copy) void (^confirmActionBlock)(void);
+@property (nonatomic, copy) void (^cancelActionBlock)(void);
+
+@end
+
+static NSString *const kPlaceholderUserName = @"<Name>";
+static NSString *const kPlaceholderEmailAddress = @"<Email>";
+static NSString *const kPlaceholderAvatarImageName = @"PlaceholderAvatar.png";
+
+// Labels for the cells that have in-cell control elements.
+static NSString *const kGetUserProfileCellLabel = @"Get user Basic Profile";
+static NSString *const kButtonWidthCellLabel = @"Width";
+
+// Labels for the cells that drill down to data pickers.
+static NSString *const kColorSchemeCellLabel = @"Color scheme";
+static NSString *const kStyleCellLabel = @"Style";
+
+// Strings for Alert Views.
+static NSString *const kSignInViewTitle = @"Sign in View";
+static NSString *const kSignOutAlertViewTitle = @"Warning";
+static NSString *const kSignOutAlertCancelTitle = @"Cancel";
+static NSString *const kSignOutAlertConfirmTitle = @"Continue";
+
+// Accessibility Identifiers.
+static NSString *const kCredentialsButtonAccessibilityIdentifier = @"Credentials";
+
+@implementation SignInViewController {
+  // This is an array of arrays, each one corresponding to the cell
+  // labels for its respective section.
+  NSArray *_sectionCellLabels;
+
+  // These sets contain the labels corresponding to cells that have various
+  // types (each cell either drills down to another table view, contains an
+  // in-cell switch, or contains a slider).
+  NSArray *_drillDownCells;
+  NSArray *_switchCells;
+  NSArray *_sliderCells;
+
+  // States storing the current set of selected elements for each data picker.
+  DataPickerState *_colorSchemeState;
+  DataPickerState *_styleState;
+
+  // Map that keeps track of which cell corresponds to which DataPickerState.
+  NSDictionary *_drilldownCellState;
+}
+
+#pragma mark - View lifecycle
+
+- (void)setUp {
+  _sectionCellLabels = @[
+    @[ kColorSchemeCellLabel, kStyleCellLabel, kButtonWidthCellLabel ],
+    @[ kGetUserProfileCellLabel ]
+  ];
+
+  // Groupings of cell types.
+  _drillDownCells = @[
+    kColorSchemeCellLabel,
+    kStyleCellLabel
+  ];
+
+  _switchCells =
+      @[ kGetUserProfileCellLabel ];
+  _sliderCells = @[ kButtonWidthCellLabel ];
+
+  // Initialize data picker states.
+  NSString *dictionaryPath =
+      [[NSBundle mainBundle] pathForResource:@"DataPickerDictionary"
+                                      ofType:@"plist"];
+  NSDictionary *configOptionsDict = [NSDictionary dictionaryWithContentsOfFile:dictionaryPath];
+
+  NSDictionary *colorSchemeDict = [configOptionsDict objectForKey:kColorSchemeCellLabel];
+  NSDictionary *styleDict = [configOptionsDict objectForKey:kStyleCellLabel];
+
+  _colorSchemeState = [[DataPickerState alloc] initWithDictionary:colorSchemeDict];
+  _styleState = [[DataPickerState alloc] initWithDictionary:styleDict];
+
+  _drilldownCellState = @{
+    kColorSchemeCellLabel :   _colorSchemeState,
+    kStyleCellLabel :         _styleState
+  };
+
+  // Make sure the GIDSignInButton class is linked in because references from
+  // xib file doesn't count.
+  [GIDSignInButton class];
+
+  GIDSignIn *signIn = [GIDSignIn sharedInstance];
+  signIn.shouldFetchBasicProfile = YES;
+  signIn.delegate = self;
+  signIn.uiDelegate = self;
+}
+
+- (id)initWithNibName:(NSString *)nibNameOrNil
+               bundle:(NSBundle *)nibBundleOrNil {
+  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+  if (self) {
+    [self setUp];
+    self.title = kSignInViewTitle;
+  }
+  return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder {
+  self = [super initWithCoder:aDecoder];
+  if (self) {
+    [self setUp];
+    self.title = kSignInViewTitle;
+  }
+  return self;
+}
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  self.credentialsButton.accessibilityIdentifier = kCredentialsButtonAccessibilityIdentifier;
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+  [self adoptUserSettings];
+  [self reportAuthStatus];
+  [self updateButtons];
+  [self.tableView reloadData];
+
+  [super viewWillAppear:animated];
+}
+
+#pragma mark - GIDSignInDelegate
+
+- (void)signIn:(GIDSignIn *)signIn
+    didSignInForUser:(GIDGoogleUser *)user
+           withError:(NSError *)error {
+  if (error) {
+    _signInAuthStatus.text = [NSString stringWithFormat:@"Status: Authentication error: %@", error];
+    return;
+  }
+  [self reportAuthStatus];
+  [self updateButtons];
+}
+
+- (void)signIn:(GIDSignIn *)signIn
+    didDisconnectWithUser:(GIDGoogleUser *)user
+                withError:(NSError *)error {
+  if (error) {
+    _signInAuthStatus.text = [NSString stringWithFormat:@"Status: Failed to disconnect: %@", error];
+  } else {
+    _signInAuthStatus.text = [NSString stringWithFormat:@"Status: Disconnected"];
+  }
+  [self reportAuthStatus];
+  [self updateButtons];
+}
+
+- (void)presentSignInViewController:(UIViewController *)viewController {
+  [[self navigationController] pushViewController:viewController animated:YES];
+}
+
+#pragma mark - Helper methods
+
+// Updates the GIDSignIn shared instance and the GIDSignInButton
+// to reflect the configuration settings that the user set
+- (void)adoptUserSettings {
+  // There should only be one selected color scheme
+  for (NSString *scheme in _colorSchemeState.selectedCells) {
+    if ([scheme isEqualToString:@"Light"]) {
+      _signInButton.colorScheme = kGIDSignInButtonColorSchemeLight;
+    } else {
+      _signInButton.colorScheme = kGIDSignInButtonColorSchemeDark;
+    }
+  }
+
+  // There should only be one selected style
+  for (NSString *style in _styleState.selectedCells) {
+    GIDSignInButtonStyle newStyle;
+    if ([style isEqualToString:@"Standard"]) {
+      newStyle = kGIDSignInButtonStyleStandard;
+      self.signInButtonWidthSlider.enabled = YES;
+    } else if ([style isEqualToString:@"Wide"]) {
+      newStyle = kGIDSignInButtonStyleWide;
+      self.signInButtonWidthSlider.enabled = YES;
+    } else {
+      newStyle = kGIDSignInButtonStyleIconOnly;
+      self.signInButtonWidthSlider.enabled = NO;
+    }
+    if (self.signInButton.style != newStyle) {
+      self.signInButton.style = newStyle;
+      self.signInButtonWidthSlider.minimumValue = [self minimumButtonWidth];
+    }
+    self.signInButtonWidthSlider.value = _signInButton.frame.size.width;
+  }
+}
+
+// Temporarily force the sign in button to adopt its minimum allowed frame
+// so that we can find out its minimum allowed width (used for setting the
+// range of the width slider).
+- (CGFloat)minimumButtonWidth {
+  CGRect frame = self.signInButton.frame;
+  self.signInButton.frame = CGRectZero;
+
+  CGFloat minimumWidth = self.signInButton.frame.size.width;
+  self.signInButton.frame = frame;
+
+  return minimumWidth;
+}
+
+- (void)reportAuthStatus {
+  GIDGoogleUser *googleUser = [[GIDSignIn sharedInstance] currentUser];
+  if (googleUser.authentication) {
+    _signInAuthStatus.text = @"Status: Authenticated";
+  } else {
+    // To authenticate, use Google+ sign-in button.
+    _signInAuthStatus.text = @"Status: Not authenticated";
+  }
+
+  [self refreshUserInfo];
+}
+
+// Update the interface elements containing user data to reflect the
+// currently signed in user.
+- (void)refreshUserInfo {
+  if ([GIDSignIn sharedInstance].currentUser.authentication == nil) {
+    self.userName.text = kPlaceholderUserName;
+    self.userEmailAddress.text = kPlaceholderEmailAddress;
+    self.userAvatar.image = [UIImage imageNamed:kPlaceholderAvatarImageName];
+    return;
+  }
+  self.userEmailAddress.text = [GIDSignIn sharedInstance].currentUser.profile.email;
+  self.userName.text = [GIDSignIn sharedInstance].currentUser.profile.name;
+
+  if (![GIDSignIn sharedInstance].currentUser.profile.hasImage) {
+    // There is no Profile Image to be loaded.
+    return;
+  }
+  // Load avatar image asynchronously, in background
+  dispatch_queue_t backgroundQueue =
+      dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
+  __weak SignInViewController *weakSelf = self;
+
+  dispatch_async(backgroundQueue, ^{
+    NSUInteger dimension = round(self.userAvatar.frame.size.width * [[UIScreen mainScreen] scale]);
+    NSURL *imageURL =
+        [[GIDSignIn sharedInstance].currentUser.profile imageURLWithDimension:dimension];
+    NSData *avatarData = [NSData dataWithContentsOfURL:imageURL];
+
+    if (avatarData) {
+      // Update UI from the main thread when available
+      dispatch_async(dispatch_get_main_queue(), ^{
+        SignInViewController *strongSelf = weakSelf;
+        if (strongSelf) {
+          strongSelf.userAvatar.image = [UIImage imageWithData:avatarData];
+        }
+      });
+    }
+  });
+}
+
+// Adjusts "Sign in", "Sign out", and "Disconnect" buttons to reflect
+// the current sign-in state (ie, the "Sign in" button becomes disabled
+// when a user is already signed in).
+- (void)updateButtons {
+  BOOL authenticated = ([GIDSignIn sharedInstance].currentUser.authentication != nil);
+
+  self.signInButton.enabled = !authenticated;
+  self.signOutButton.enabled = authenticated;
+  self.disconnectButton.enabled = authenticated;
+  self.credentialsButton.hidden = !authenticated;
+
+  if (authenticated) {
+    self.signInButton.alpha = 0.5;
+    self.signOutButton.alpha = self.disconnectButton.alpha = 1.0;
+  } else {
+    self.signInButton.alpha = 1.0;
+    self.signOutButton.alpha = self.disconnectButton.alpha = 0.5;
+  }
+}
+
+#pragma mark - IBActions
+
+- (IBAction)signOut:(id)sender {
+  [[GIDSignIn sharedInstance] signOut];
+  [self reportAuthStatus];
+  [self updateButtons];
+}
+
+- (IBAction)disconnect:(id)sender {
+  [[GIDSignIn sharedInstance] disconnect];
+}
+
+- (IBAction)showAuthInspector:(id)sender {
+  AuthInspectorViewController *authInspector = [[AuthInspectorViewController alloc] init];
+  [[self navigationController] pushViewController:authInspector animated:YES];
+}
+
+- (IBAction)checkSignIn:(id)sender {
+  [self reportAuthStatus];
+}
+
+- (void)toggleBasicProfile:(UISwitch *)sender {
+  [GIDSignIn sharedInstance].shouldFetchBasicProfile = sender.on;
+}
+
+- (void)changeSignInButtonWidth:(UISlider *)sender {
+  CGRect frame = self.signInButton.frame;
+  frame.size.width = sender.value;
+  self.signInButton.frame = frame;
+}
+
+#pragma mark - UIAlertView Delegate
+
+- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
+  if (buttonIndex == alertView.cancelButtonIndex) {
+    if (_cancelActionBlock) {
+      _cancelActionBlock();
+    }
+  } else {
+    if (_confirmActionBlock) {
+      _confirmActionBlock();
+      [self refreshUserInfo];
+      [self updateButtons];
+    }
+  }
+
+  _cancelActionBlock = nil;
+  _confirmActionBlock = nil;
+}
+
+#pragma mark - UITableView Data Source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+  return [_sectionCellLabels count];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView
+ numberOfRowsInSection:(NSInteger)section {
+  return [_sectionCellLabels[section] count];
+}
+
+- (NSString *)tableView:(UITableView *)tableView
+    titleForHeaderInSection:(NSInteger)section {
+  if (section == 0) {
+    return @"Sign-in Button Configuration";
+  } else if (section == 1) {
+    return @"Other Configurations";
+  } else {
+    return nil;
+  }
+}
+
+- (BOOL)tableView:(UITableView *)tableView
+    shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
+  // Cells that drill down to other table views should be highlight-able.
+  // The other cells contain control elements, so they should not be selectable.
+  NSString *label = _sectionCellLabels[indexPath.section][indexPath.row];
+  if ([_drillDownCells containsObject:label]) {
+    return YES;
+  } else {
+    return NO;
+  }
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView
+         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+  static NSString * const kDrilldownCell = @"DrilldownCell";
+  static NSString * const kSwitchCell = @"SwitchCell";
+  static NSString * const kSliderCell = @"SliderCell";
+
+  NSString *label = _sectionCellLabels[indexPath.section][indexPath.row];
+  UITableViewCell *cell;
+  NSString *identifier;
+
+  if ([_drillDownCells containsObject:label]) {
+    identifier = kDrilldownCell;
+  } else if ([_switchCells containsObject:label]) {
+    identifier = kSwitchCell;
+  } else if ([_sliderCells containsObject:label]) {
+    identifier = kSliderCell;
+  }
+
+  cell = [tableView dequeueReusableCellWithIdentifier:identifier];
+
+  if (cell == nil) {
+    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
+                                  reuseIdentifier:identifier];
+  }
+  // Assign accessibility labels to each cell row.
+  cell.accessibilityLabel = label;
+
+  if (identifier == kDrilldownCell) {
+    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+    DataPickerState *dataState = _drilldownCellState[label];
+    if (dataState.multipleSelectEnabled) {
+      cell.detailTextLabel.text = @"";
+    } else {
+      cell.detailTextLabel.text = [dataState.selectedCells anyObject];
+    }
+    cell.accessibilityValue = cell.detailTextLabel.text;
+  } else if (identifier == kSwitchCell) {
+    UISwitch *toggle = [[UISwitch alloc] initWithFrame:CGRectZero];
+
+    if ([label isEqualToString:kGetUserProfileCellLabel]) {
+      [toggle addTarget:self
+                    action:@selector(toggleBasicProfile:)
+          forControlEvents:UIControlEventValueChanged];
+      toggle.on = [GIDSignIn sharedInstance].shouldFetchBasicProfile;
+    }
+
+    toggle.accessibilityLabel = [NSString stringWithFormat:@"%@ Switch", cell.accessibilityLabel];
+    cell.accessoryView = toggle;
+  } else if (identifier == kSliderCell) {
+
+    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 150, 0)];
+    slider.minimumValue = [self minimumButtonWidth];
+    slider.maximumValue = 268.0;
+    slider.value = self.signInButton.frame.size.width;
+    slider.enabled = self.signInButton.style != kGIDSignInButtonStyleIconOnly;
+
+    [slider addTarget:self
+                  action:@selector(changeSignInButtonWidth:)
+        forControlEvents:UIControlEventValueChanged];
+
+    slider.accessibilityIdentifier = [NSString stringWithFormat:@"%@ Slider", label];
+    self.signInButtonWidthSlider = slider;
+    cell.accessoryView = slider;
+    [self.signInButtonWidthSlider sizeToFit];
+  }
+
+  cell.textLabel.text = label;
+
+  return cell;
+}
+
+- (void)tableView:(UITableView *)tableView
+    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+  [tableView deselectRowAtIndexPath:indexPath animated:YES];
+  UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
+  NSString *label = selectedCell.textLabel.text;
+
+  DataPickerState *dataState = [_drilldownCellState objectForKey:label];
+  if (!dataState) {
+    return;
+  }
+
+  DataPickerViewController *dataPicker =
+      [[DataPickerViewController alloc] initWithNibName:nil
+                                                 bundle:nil
+                                              dataState:dataState];
+  dataPicker.navigationItem.title = label;
+
+  // Force the back button title to be 'Back'
+  UIBarButtonItem *newBackButton =
+      [[UIBarButtonItem alloc] initWithTitle:@"Back"
+                                       style:UIBarButtonItemStylePlain
+                                      target:nil
+                                      action:nil];
+  [[self navigationItem] setBackBarButtonItem:newBackButton];
+  [self.navigationController pushViewController:dataPicker animated:YES];
+}
+
+@end
diff --git a/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.xib b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.xib
new file mode 100644
index 0000000..13b21f1
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/SignInViewController.xib
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SignInViewController">
+            <connections>
+                <outlet property="credentialsButton" destination="80" id="83"/>
+                <outlet property="disconnectButton" destination="65" id="71"/>
+                <outlet property="signInAuthStatus" destination="72" id="73"/>
+                <outlet property="signInButton" destination="bKH-Ji-uCR" id="aDr-fD-R3x"/>
+                <outlet property="signOutButton" destination="63" id="70"/>
+                <outlet property="userAvatar" destination="60" id="67"/>
+                <outlet property="userEmailAddress" destination="62" id="76"/>
+                <outlet property="userName" destination="61" id="75"/>
+                <outlet property="view" destination="55" id="56"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="55">
+            <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <view key="tableHeaderView" contentMode="scaleToFill" id="57">
+                <rect key="frame" x="0.0" y="0.0" width="320" height="197"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Status: Authenticated" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="72">
+                        <rect key="frame" x="21" y="67" width="280" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="PlaceholderAvatar.png" id="60">
+                        <rect key="frame" x="20" y="8" width="50" height="50"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    </imageView>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="&lt;Name&gt;" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="61">
+                        <rect key="frame" x="78" y="8" width="153" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="&lt;Email&gt;" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="7" id="62">
+                        <rect key="frame" x="78" y="34" width="153" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="63">
+                        <rect key="frame" x="50" y="160" width="77" height="35"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
+                        <state key="normal" title="Sign out">
+                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                        </state>
+                        <connections>
+                            <action selector="signOut:" destination="-1" eventType="touchUpInside" id="64"/>
+                        </connections>
+                    </button>
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="65">
+                        <rect key="frame" x="186" y="160" width="97" height="35"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
+                        <state key="normal" title="Disconnect">
+                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                        </state>
+                        <connections>
+                            <action selector="disconnect:" destination="-1" eventType="touchUpInside" id="66"/>
+                        </connections>
+                    </button>
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoDark" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="80">
+                        <rect key="frame" x="168" y="68" width="22" height="22"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <connections>
+                            <action selector="showAuthInspector:" destination="-1" eventType="touchUpInside" id="82"/>
+                        </connections>
+                    </button>
+                    <view contentMode="scaleToFill" id="bKH-Ji-uCR" customClass="GIDSignInButton">
+                        <rect key="frame" x="20" y="100" width="281" height="39"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <accessibility key="accessibilityConfiguration">
+                            <accessibilityTraits key="traits" button="YES"/>
+                        </accessibility>
+                    </view>
+                </subviews>
+                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+            </view>
+        </tableView>
+    </objects>
+    <resources>
+        <image name="PlaceholderAvatar.png" width="50" height="50"/>
+    </resources>
+</document>
diff --git a/swift/google_signin_sdk_4_0_0/Sample/main.m b/swift/google_signin_sdk_4_0_0/Sample/main.m
new file mode 100644
index 0000000..edb0a02
--- /dev/null
+++ b/swift/google_signin_sdk_4_0_0/Sample/main.m
@@ -0,0 +1,28 @@
+//
+//  main.m
+//
+//  Copyright 2012 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char *argv[]) {
+  @autoreleasepool {
+    return UIApplicationMain(argc, argv, nil,
+        NSStringFromClass([AppDelegate class]));
+  }
+}