<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.15.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreMotion",
  "identifier" : "/documentation/CoreMotion/CMPedometer/startUpdates(from:withHandler:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Core Motion"
    ],
    "preciseIdentifier" : "c:objc(cs)CMPedometer(im)startPedometerUpdatesFromDate:withHandler:"
  },
  "title" : "startUpdates(from:withHandler:)"
}
-->

# startUpdates(from:withHandler:)

Starts the delivery of recent pedestrian-related data to your app.

```
func startUpdates(from start: Date, withHandler handler: @escaping CMPedometerHandler)
```

## Parameters

`start`

The date from which to start reporting data. You can specify a date in the past to retrieve the data from that time until now. This parameter must not be `nil`.

`handler`

The block to execute when data is available. This block is called repeatedly on a background thread as new data arrives. This parameter must not be `nil`. For information about this block, see [`CMPedometerHandler`](/documentation/CoreMotion/CMPedometerHandler).

## Discussion

Upon calling this method, the pedometer object starts calling your handler block regularly with data. The data passed to your `handler` block represents the cumulative data starting at the specified `start` date and ending at the current time. (You can get the start and end dates from the [`CMPedometerData`](/documentation/CoreMotion/CMPedometerData) object passed to your handler.) This method initiates the event delivery process asynchronously and executes your block on a serial dispatch queue, which ensures that only one copy of the block runs at any given time.

When the app is suspended, the delivery of updates stops temporarily. Upon returning to foreground or background execution, the pedometer object begins updates again.

To stop the delivery of events, call the [`stopUpdates()`](/documentation/CoreMotion/CMPedometer/stopUpdates()) method.

It is safe to start the delivery of events using this method and then perform additional queries using the  [`queryPedometerData(from:to:withHandler:)`](/documentation/CoreMotion/CMPedometer/queryPedometerData(from:to:withHandler:)) method.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)