<!--
{
  "availability" : [
    "iOS: 4.1.0 - 7.0.0",
    "iPadOS: 4.1.0 - 7.0.0",
    "macOS: 10.8.0 - 10.10.0",
    "visionOS: 1.0.0 - 1.0.0",
    "watchOS: 2.0.0 - 2.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "GameKit",
  "identifier" : "/documentation/GameKit/GKAchievement/report(completionHandler:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "GameKit"
    ],
    "preciseIdentifier" : "c:objc(cs)GKAchievement(im)reportAchievementWithCompletionHandler:"
  },
  "title" : "report(completionHandler:)"
}
-->

# report(completionHandler:)

Reports the player’s progress to Game Center.

```
func report(completionHandler: (@Sendable ((any Error)?) -> Void)? = nil)
```

## Parameters

`completionHandler`

A block to be called after the operation completes.

    The block takes the following parameter:

- *error*: If the operation was successful, this value is `nil`; otherwise, this parameter holds an object that describes the problem that occurred.

## Discussion

When the player makes progress towards completing an achievement, your game communicates the player’s progress to Game Center by calling this method. An achievement object is implicitly tied to the local player that was initialized when the object was created; your game should only report progress when the same local player is still on the device.

> Note:
> To avoid using network bandwidth unnecessarily, only report an achievement when the player has made more progress towards completing it.

When the progress is successfully reported, the achievement is made visible if it was previously hidden. The [`percentComplete`](/documentation/GameKit/GKAchievement/percentComplete) and [`lastReportedDate`](/documentation/GameKit/GKAchievement/lastReportedDate) property values stored on Game Center are updated if the new [`percentComplete`](/documentation/GameKit/GKAchievement/percentComplete) value is greater than the value previously stored on Game Center. if the value of the [`percentComplete`](/documentation/GameKit/GKAchievement/percentComplete) property was equal to `100.0`, then the achievement is marked as completed and a banner may be shown to the player.

When this method is called, it creates a new background task to handle the request. The method then returns control to your game. The background task automatically handles network errors, resending the data until the task completes. When the task is complete, Game Kit calls your completion handler. The completion handler is always called on the main thread.

## See Also

[`showsCompletionBanner`](/documentation/GameKit/GKAchievement/showsCompletionBanner)

A Boolean value that indicates whether GameKit displays a banner when the player completes the achievement.

[`isHidden`](/documentation/GameKit/GKAchievement/isHidden)

A Boolean value that indicates whether the system hides this achievement from the player.

[`isCompleted`](/documentation/GameKit/GKAchievement/isCompleted)

A Boolean value that states whether the player has completed the achievement.



---

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)