Skip to content

Apple Profile Service

Apple Profile Service is a special configuration profile whose literal PayloadType is Profile Service. It asks a device to POST selected identifiers to a URL. The request profile may include an opaque Challenge; the device returns that value with the requested attributes and signs the plist response as CMS/PKCS#7 SignedData.

The beta implements that focused exchange:

  1. Your application authenticates a user and creates a one-time challenge.
  2. generateProfile creates the Profile Service plist and optionally signs it.
  3. Your HTTP endpoint serves the returned bytes as application/x-apple-aspen-config.
  4. The device POSTs signed data to the configured URL.
  5. parseProfileServiceResponse checks integrity or an explicit trust chain, compares the expected challenge, parses the plist, and returns typed and raw fields.
  6. Your application authorizes and stores the result.

This is not MDM. It does not establish an APNs-backed management channel, execute commands, perform check-in, orchestrate SCEP, or maintain enrollment state. Those responsibilities would belong to a separate package.

The Profile Service payload uses the common profile fields PayloadIdentifier, PayloadUUID, PayloadVersion, PayloadDisplayName, and optional description/organization, plus a PayloadContent dictionary:

Field Type Library field
URL string URL service.responseUrl
DeviceAttributes array of strings service.deviceAttributes
Challenge string or data service.challenge

Apple’s examples cover UDID, VERSION, PRODUCT, SERIAL, MEID, IMEI, ICCID, and MAC_ADDRESS_EN0 across request and response examples. Hardware/platform availability varies, so request only what you need and decide which values are truly required.

Apple documentation and device behavior are authoritative. The project is independent and not endorsed by Apple.