![Map showing the My Location button in the corner.](https://developers.google.com/static/maps/documentation/ios-sdk/examples/images/my_location.png)

This example displays the **My Location** button on the map view. When you tap
the button, the map pans to the device's current location.

## Get started

Before you can try the sample code, you must configure your development
environment. For more information, see
[Maps SDK for iOS code samples](https://developers.google.com/maps/documentation/ios-sdk/examples.md.txt).

## View the code


### Swift

```swift
import GoogleMaps
import UIKit

class MyLocationViewController: UIViewController {

  private let cameraLatitude: CLLocationDegrees = -33.868

  private let cameraLongitude: CLLocationDegrees = 151.2086

  private let cameraZoom: Float = 12

  lazy var mapView: GMSMapView = {
    let camera = GMSCameraPosition(
      latitude: cameraLatitude, longitude: cameraLongitude, zoom: cameraZoom)
    return GMSMapView(frame: .zero, camera: camera)
  }()

  var observation: NSKeyValueObservation?
  var location: CLLocation? {
    didSet {
      guard oldValue == nil, let firstLocation = location else { return }
      mapView.camera = GMSCameraPosition(target: firstLocation.coordinate, zoom: 14)
    }
  }

  override func viewDidLoad() {
    super.viewDidLoad()

    mapView.delegate = self
    mapView.settings.compassButton = true
    mapView.settings.myLocationButton = true
    mapView.isMyLocationEnabled = true
    view = mapView

    // Listen to the myLocation property of GMSMapView.
    observation = mapView.observe(\.myLocation, options: [.new]) {
      [weak self] mapView, _ in
      self?.location = mapView.myLocation
    }
  }

  deinit {
    observation?.invalidate()
  }
}

extension MyLocationViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, didTapMyLocation location: CLLocationCoordinate2D) {
    let alert = UIAlertController(
      title: "Location Tapped",
      message: "Current location: <\(location.latitude), \(location.longitude)>",
      preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default))
    present(alert, animated: true)
  }
}
      
```

### Objective-C

```objective-c
#import "GoogleMapsDemos/Samples/MyLocationViewController.h"

#import <GoogleMaps/GoogleMaps.h>

@implementation MyLocationViewController {
  GMSMapView *_mapView;
  BOOL _firstLocationUpdate;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                          longitude:151.2086
                                                               zoom:12];

  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  _mapView.delegate = self;
  _mapView.settings.compassButton = YES;
  _mapView.settings.myLocationButton = YES;

  // Listen to the myLocation property of GMSMapView.
  [_mapView addObserver:self
             forKeyPath:@"myLocation"
                options:NSKeyValueObservingOptionNew
                context:NULL];

  self.view = _mapView;

  // Ask for My Location data after the map has already been added to the UI.
  GMSMapView *mapView = _mapView;
  dispatch_async(dispatch_get_main_queue(), ^{
    mapView.myLocationEnabled = YES;
  });
}

- (void)mapView:(GMSMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location {
  NSString *message = [NSString stringWithFormat:@"My Location Dot Tapped at: [lat: %f, lng: %f]",
                                                 location.latitude, location.longitude];
  UIAlertController *alertController =
      [UIAlertController alertControllerWithTitle:@"Location Tapped"
                                          message:message
                                   preferredStyle:UIAlertControllerStyleAlert];
  UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK"
                                                     style:UIAlertActionStyleDefault
                                                   handler:^(UIAlertAction *action){
                                                   }];
  [alertController addAction:okAction];
  [self presentViewController:alertController animated:YES completion:nil];
}

- (void)dealloc {
  [_mapView removeObserver:self forKeyPath:@"myLocation" context:NULL];
}

#pragma mark - KVO updates

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
  if (!_firstLocationUpdate) {
    // If the first location update has not yet been received, then jump to that location.
    _firstLocationUpdate = YES;
    CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];
    _mapView.camera = [GMSCameraPosition cameraWithTarget:location.coordinate zoom:14];
  }
}

@end
      
```

<br />

## Run the full sample app locally

The Maps SDK for iOS sample app is available as a
[download archive](https://github.com/googlemaps-samples/maps-sdk-for-ios-samples/archive/main.zip)
from [GitHub](https://github.com/googlemaps-samples/maps-sdk-for-ios-samples/tree/main/GoogleMaps).
Follow these steps to install and try the Maps SDK for iOS sample app.

> [!IMPORTANT]
> **Important:** You must remove any existing dependencies added using CocoaPods or manually. See [Step 2 of Set up an Xcode project](https://developers.google.com/maps/documentation/ios-sdk/config.md.txt#swift-package-manager) for instructions.

1. Run `git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git` to clone the samples repository into a local directory.
2. Open a terminal window, navigate to the directory where you cloned the sample files, and
   drill down into the GoogleMaps directory:

   ### Swift

       cd maps-sdk-for-ios-samples/GoogleMaps-Swift
       open GoogleMapsSwiftXCFrameworkDemos.xcodeproj

   ### Objective-C

       cd maps-sdk-for-ios-samples-main/GoogleMaps
       open GoogleMapsDemos.xcodeproj

3. In the Xcode project, go to **File** \> **Add Package Dependencies** . Enter `https://github.com/googlemaps/ios-maps-sdk` as the URL, press **Enter** to pull in the package, and click **Add Package**.
4. In Xcode, press the compile button to [build the app](https://developer.apple.com/documentation/xcode/building-and-running-an-app) with the current scheme. The build produces an error, prompting you to enter your API key in the `SDKConstants.swift` file for Swift or`SDKDemoAPIKey.h` file for Objective-C.
5. [Get an API key](https://developers.google.com/maps/documentation/ios-sdk/get-api-key.md.txt) from your project with the [Maps SDK for iOS enabled](https://developers.google.com/maps/documentation/ios-sdk/cloud-setup#enabling-apis).
6. Edit the `SDKConstants.swift` file for Swift or`SDKDemoAPIKey.h` file for Objective-C and paste your API key into the definition of either the `apiKey` or `kAPIKey` constant. For example:

   ### Swift

   ```swift
   static let apiKey = "YOUR_API_KEY"
   ```

   ### Objective-C

   ```objective-c
   static NSString *const kAPIKey = @"YOUR_API_KEY";
   ```
7. In the `SDKConstants.swift` file (Swift) or`SDKDemoAPIKey.h` file (Objective-C), remove the following line, because it's used to register the user-defined issue:

   ### Swift

   ```swift
   #error (Register for API Key and insert here. Then delete this line.)
   ```

   ### Objective-C

   ```objective-c
   #error Register for API Key and insert here.
   ```
8. Build and run the project. The iOS simulator window appears, showing a list of **Maps SDK Demos**.
9. Choose one of the options displayed, to experiment with a feature of the Maps SDK for iOS.
10. If prompted to allow GoogleMapsDemos to access your location, choose **Allow**.