<!--
{
  "availability" : [
    "iOS: 17.0.0 - 26.0.0",
    "iPadOS: 17.0.0 - 26.0.0",
    "macCatalyst: 17.0.0 - 26.0.0",
    "macOS: 14.0.0 - 26.0.0",
    "tvOS: 17.0.0 - 26.0.0",
    "visionOS: 1.0.0 - 26.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "GameKit",
  "identifier" : "/documentation/GameKit/GKAchievement/challengeComposeController(withMessage:players:completion:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "GameKit"
    ],
    "preciseIdentifier" : "c:objc(cs)GKAchievement(im)challengeComposeControllerWithMessage:players:completion:"
  },
  "title" : "challengeComposeController(withMessage:players:completion:)"
}
-->

# challengeComposeController(withMessage:players:completion:)

Provides a view controller that you present to the player to issue an achievement challenge.

iOS, iPadOS, Mac Catalyst, tvOS, visionOS:

```
func challengeComposeController(withMessage message: String?, players: [GKPlayer], completion completionHandler: GKChallengeComposeHandler? = nil) -> UIViewController
```

macOS:

```
func challengeComposeController(withMessage message: String?, players: [GKPlayer], completion completionHandler: GKChallengeComposeHandler? = nil) -> NSViewController
```

## Parameters

`message`

The challenge message, which the player can edit before GameKit sends it to other players.

`players`

The players to invite to the challenge.

`completionHandler`

A block that GameKit calls after it displays the view controller.

## Discussion

This method presents the view controller modally from the top view controller. GameKit calls the completion handler block after it displays the view controller and the player sends or cancels the challenge.

---

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)