<!--
{
  "availability" : [
    "iOS: 16.0.0 -",
    "iPadOS: 16.0.0 -",
    "macCatalyst: 16.0.0 -",
    "macOS: 13.3.0 -",
    "watchOS: 9.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CarKey",
  "identifier" : "/documentation/CarKey/CarKeyRemoteControlSession",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "CarKey"
    ],
    "preciseIdentifier" : "s:6CarKey0aB20RemoteControlSessionC"
  },
  "title" : "CarKeyRemoteControlSession"
}
-->

# CarKeyRemoteControlSession

The object that manages communication with the vehicles
you manufacture.

```
class CarKeyRemoteControlSession
```

## Overview

A `CarKeyRemoteControlSession` object coordinates interactions
between your app and your company’s make of vehicles.
This object works with the system to transmit data securely to
and from a vehicle, and to report results back to your app. Use
this object to send commands or data directly to a vehicle, and
to get information about the available vehicles and their current
configuration.

Don’t create this object directly. Instead, call the
[`start(delegate:subscriptionRange:with:)`](/documentation/CarKey/CarKeyRemoteControl/start(delegate:subscriptionRange:with:))
method to create a new session object. When you finish interacting with
the vehicle, call the session’s [`end()`](/documentation/CarKey/CarKeyRemoteControlSession/end())
method to close out the session and prevent further access. You can have
only one active session at a time. If you try to start a second
session, [`start(delegate:subscriptionRange:with:)`](/documentation/CarKey/CarKeyRemoteControl/start(delegate:subscriptionRange:with:))
doesn’t return until the currently active session becomes invalid.

When you configure a new session, provide a delegate object to receive
data from vehicle-initiated transfers. The system also uses your delegate
notify you when the configuration of a vehicle changes. For example,
it lets you know when connectivity to the vehicle changes. The delegate
must adopt the [`CarKeyRemoteControlSessionDelegate`](/documentation/CarKey/CarKeyRemoteControlSessionDelegate) protocol.

> Note: If your app has an active session, the system automatically
> ends that session when your app enters the background. Upon reentering
> the foreground, you must create a new session to communicate with your
> vehicle again.

## Topics

### Performing Vehicle-Related Actions

[`func perform(RemoteKeylessEntryAction) throws -> RemoteKeylessEntryAction.ExecutionRequest`](/documentation/CarKey/CarKeyRemoteControlSession/perform(_:)-8ac0c)

Sends a request to the vehicle to perform a one-time action.

[`func perform(RemoteKeylessEntryEnduringAction) throws -> RemoteKeylessEntryEnduringAction.EnduringExecutionRequest`](/documentation/CarKey/CarKeyRemoteControlSession/perform(_:)-7mpsy)

Sends a request to the vehicle to start an action that has a
separate stopping point.

### Sending Data to the Vehicle

[`func sendPassthroughData(Data, toVehicle: String) throws`](/documentation/CarKey/CarKeyRemoteControlSession/sendPassthroughData(_:toVehicle:))

Sends the specified custom data to the vehicle.

### Closing the Session

[`func end() throws`](/documentation/CarKey/CarKeyRemoteControlSession/end())

Ends the session and stops the delivery of notifications
for all vehicles in the session.

### Getting Vehicle Information

[`var vehicleReports: [VehicleReport]`](/documentation/CarKey/CarKeyRemoteControlSession/vehicleReports)

The configuration details of the provisioned vehicles that
match your company’s make.

[`func isPassiveEntryAvailable(forVehicle: String) throws -> Bool`](/documentation/CarKey/CarKeyRemoteControlSession/isPassiveEntryAvailable(forVehicle:))

Returns a Boolean value that indicates whether passive entry is
currently available for the specified vehicle.

### Structures

[`struct Attestation`](/documentation/CarKey/CarKeyRemoteControlSession/Attestation)

Object representing an attestation and related data

### Instance Methods

[`func perform(RemoteKeylessEntryConfigurableEnduringAction, continuationStrategy: CarKeyRemoteControlSession.ContinuationStrategy) throws -> RemoteKeylessEntryConfigurableEnduringAction.EnduringExecutionRequest`](/documentation/CarKey/CarKeyRemoteControlSession/perform(_:continuationStrategy:))

Sends a request to the vehicle to start an action that has a
separate stopping point, and optionally allows your app to
have control over incoming continuation requests and to
exchange data during the execution of the action.

[`func sign(data: Data, forVehicle: String) throws -> CarKeyRemoteControlSession.Attestation`](/documentation/CarKey/CarKeyRemoteControlSession/sign(data:forVehicle:))

Sign data with the endpoint.SK identified by vehicleIdentifier
as described in the section “OEM App Data Attestation” of
the Car Connectivity Consortium Digital Key Release 3.0 specification.

### Enumerations

[`enum ContinuationStrategy`](/documentation/CarKey/CarKeyRemoteControlSession/ContinuationStrategy)

Strategy to use on reception of a continuation request.

---

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)