# FlowerCore DeviceManagement on GX10 This adopted GX10 app hosts `FlowerCore.DeviceManagement.Web` at `https://devices.iamworkin.lan`. ## Apple MDM Runtime Contract Apple MDM is enabled in NanoHUB mode, but enrollment remains unavailable until the runtime secret contains real Apple-side material. Do not use placeholder values to clear readiness checks. `Secret/fc-devicemgmt-runtime` supports these Apple MDM keys: | Key | Purpose | | --- | --- | | `DEVICE_MANAGEMENT_OPERATOR_API_KEY` | Required operator API key for authenticated REST/MCP write operations, including Android command queueing. | | `DEVICE_MANAGEMENT_ADMIN_API_KEY` | Required admin API key for privileged DeviceManagement operations. | | `NANOHUB_API_KEY` | NanoHUB API password for HTTP Basic user `nanohub`. | | `APPLE_MDM_APNS_TOPIC` | MDM APNs topic returned after uploading the Apple MDM push certificate to NanoHUB/NanoMDM. | | `APPLE_MDM_SCEP_URL` | Live SCEP URL included in the enrollment profile. | | `APPLE_MDM_SCEP_CHALLENGE` | SCEP challenge shared with the SCEP provisioner. | | `APPLE_MDM_PROFILE_SIGNING_CERTIFICATE_PEM` | PEM certificate used to CMS-sign `.mobileconfig` profiles. | | `APPLE_MDM_PROFILE_SIGNING_PRIVATE_KEY_PEM` | PEM private key matching the profile-signing certificate. | | `APPLE_MDM_REQUIRE_MANAGED_WIFI_PAYLOAD` | Set to `true` only when Wi-Fi payload delivery should gate enrollment readiness. | | `APPLE_MDM_MANAGED_WIFI_SSID` | Managed Wi-Fi SSID for the iPad profile. | | `APPLE_MDM_MANAGED_WIFI_PASSWORD` | Managed Wi-Fi password when the network is not open. | Non-secret profile constants stay in GitOps: NanoHUB base URL, MDM server URL, check-in URL, organization/display names, the HTTPS trust anchor certificate, managed Wi-Fi encryption type, auto-join, and MAC-randomization disablement. DeviceManagement auth is enabled on GX10. The deployment maps `DEVICE_MANAGEMENT_OPERATOR_API_KEY` to both `Auth__ApiKey` and `FlowerCore__Auth__ApiKey`; the unprefixed key keeps the MCP API key post-config path aligned with REST auth. Agent enrollment, heartbeat, inventory, command poll, and command-result callbacks remain on the unauthenticated agent channel by application policy; operator write endpoints must use `X-Api-Key`. ## Readiness Check After changing the runtime secret and letting the pod roll, verify: ```bash curl -sk https://devices.iamworkin.lan/api/v1/apple-mdm/enrollment-profile/status ``` Configurator enrollment must wait until this status reports `available=true` and an empty `missingRequirements` array.