A service your app discovers on remote devices and can connect to.
You specify the services your app uses in `Info.plist` via a dictionary under the `WiFiAwareServices` key:
- Each _key_ in that dictionary is the full name of a service, and the _value_ is a dictionary of configuration properties for that service.
- If the configuration dictionary contains the `Subscribable` key, the system creates a `WASubscribableService` for that service and makes it available in `WASubscribableService.allServices`.
Members (4)
get · iOS 26.0+
allServices
TypeScript
static get allServices(): Record<string, WASubscribableService>
Swift declaration
static var allServices: [WASubscribableService.ID : WASubscribableService] { get }
A dictionary of all subscribable services declared by your app, indexed by service name.
The system populates the contents of this property from the values under the `Info.plist` key `WiFiAwareServices`, with all entries that specify the `Subscribable` configuration included.
You can select a service from this property using the `serviceName` as the key to pull elements from the dictionary, or by using an extension as follows:
```swift
// Index into the dictionary.
let myService = WASubscribableService.allServices["_example-service._tcp"]!
// Give the service a symbol name.
extension WASubscribableService {
public static var exampleService : WASubscribableService {
allServices["_example-service._tcp"]!
}
}
let myService = .exampleService
```
get · iOS 26.0+
description
TypeScript
get description(): string
Swift declaration
var description: String { get }
A string description of the service.
get · iOS 26.0+
id
TypeScript
get id(): string
Swift declaration
var id: WASubscribableService.ID { get }
A stable ID that can be used to identify this subscribable service.
The ID is stable for a given unique service name.
get · iOS 26.0+
name
TypeScript
get name(): string
Swift declaration
let name: String
The full name of the service, as sent over the air.
To avoid conflicts with other apps and devices that may prevent your app from using
the service, register your service with a unique name in the
[IANA Service Name Registry](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml).
For the service name to be valid, follow the rules located in [RFC 6763](https://datatracker.ietf.org/doc/html/rfc6763#section-4.1.2) and [RFC 6335](https://datatracker.ietf.org/doc/html/rfc6335#section-5.1).
The RFC rules require that the service string have a unique name that conforms to the following rules:
* Only use characters such as `a-z`, `A-Z`, `0 - 9`, and hyphen (`-`).
* Use at least one letter `a-z`, `A-Z`.
* Don't start or end with a hyphen (`-`).
* Don't exceed 15 characters.
The full service name string then:
* Prepends an underscore (`_`) to the name component
* Adds a dot (`.`) separator
* Appends a protocol suffix of `_tcp` or `_udp`
The table below shows some examples:
| Name Component | Protocol Component | Full Service Name string |
|---|---|---|
| `example-service` | `_tcp` | `_example-service._tcp` |
| `example-service` | `_udp` | `_example-service._udp` |
The name in the `Info.plist` must be this full service name, exactly as it's sent over the air. Invalid service names in the `Info.plist` cause the app to crash.