Skip to content

iOS/iPadOS Install software and offer self-service software for Account-based User Enrolled hosts #31138

Description

@marko-lisica

Goal

User story
As an IT admin,
I want to install VPP and in-house (.ipa) apps on iOS and iPadOS hosts that enrolled via Account-based User Enrollment with Managed Apple Account(also via self-service).

Changes

Product

  • UI changes: Figma
  • CLI (fleetctl) usage changes: No changes.
  • YAML changes: No changes.
  • REST API changes:
    • User should be able to install apps on the user-enrolled hosts. Currently, Fleet throws this error: Couldn't install. Currently, software install isn't supported on personal (BYOD) iOS and iPadOS hosts.
  • Fleet's agent (fleetd) changes: No changes.
  • Fleet server configuration changes: No changes.
  • Exposed, public API endpoint changes: No changes.
  • fleetdm.com changes: No changes.
  • GitOps mode UI changes: No changes.
  • GitOps generation changes: No changes.
  • Activity changes: No changes.
  • Permissions changes: No changes.
  • Changes to paid features or tiers: Available in Fleet Premium.
  • My device and fleetdm.com/better changes:
    • Enable self-service for user-enrolled hosts. Currently, Fleet shows that it's not available.
  • Usage statistics: No changes.
  • Other reference documentation changes: No changes.
  • First draft of test plan added
  • Once shipped, requester has been notified
  • Once shipped, dogfooding issue has been filed. Dogfood: iOS/iPadOS Install software and offer self-service software for Account-based User Enrolled hosts #46635

Engineering

  1. vpp_client_users table (sub-issue BAI: Schema for VPP client-user mapping #43999) — maps (vpp_token_id, managed_apple_id) to the Fleet-generated client_user_id and Apple's returned
    apple_user_id. Columns: id, vpp_token_id (FK to vpp_tokens.id ON DELETE CASCADE), managed_apple_id VARCHAR(255), client_user_id VARCHAR(36), apple_user_id
    VARCHAR(255) NULL, status ENUM('pending','registered','retired'), timestamps. Unique constraints on (vpp_token_id, managed_apple_id) and (vpp_token_id,
    client_user_id).
  2. host_mdm.managed_apple_id column (sub-issue BAI: Surface Managed Apple ID for user-enrolled hosts #44001) — ALTER TABLE host_mdm ADD COLUMN managed_apple_id VARCHAR(255) NULL AFTER fleet_enroll_ref. Populated
    from nanomdm's TokenUpdate hook at user-enrollment completion. Confirmed: no managed_apple_id column exists on host_mdm today.
  • This is a premium only feature: Yes

ℹ️  Please read this issue carefully and understand it. Pay special attention to UI wireframes, especially "dev notes".

Risk assessment

Test plan

Make sure to go through the list and consider all events that might be related to this story, so we catch edge cases earlier.

Core flow

  • Make sure that the user can install all iOS/iPadOS apps that are available on the team (including .ipa) on user-enrolled hosts.
  • Make sure that the user can install apps via API on user-enrolled hosts.
  • Make sure the flow is the same for both manually enrolled iOS/iPadOS and user-enrolled iOS/iPadOS. User purchases a license and assigns it to the location (VPP token) that is added to Fleet, then the user can see those apps when adding software to the team.
  • Make sure that end users can use self-service on user-enrolled hosts.
  • Make sure that the setup experience software selected for the iOS and iPadOS hosts installs automatically on enrollment for user-enrolled hosts.

UI

  • Verify that all UI changes specified in the Figma wireframes are correctly implemented
  • Verify expected UI states (loading, empty, error states if applicable)

API

  • Test all API endpoints added or modified in the API changes section of this issue
  • Verify error handling for invalid inputs where applicable

GitOps (generate + run)

  • Configure the feature through the UI and run fleetctl generate-gitops
  • Confirm the generated .yml includes the expected fields (compare with YAML changes in the Product section)
  • Modify the generated .yml and run fleetctl gitops
  • Confirm the configuration updates correctly in Fleet
  • Enable GitOps mode and verify the feature behaves correctly

Permissions

  • Verify role restrictions are applied correctly for global roles
  • Verify role restrictions are applied correctly for fleet-level roles

Edge cases

  • App already installed by end user before Fleet sends install (Apple returns "already installed" error)
  • Host with no Managed Apple ID available (incomplete enrollment data)
  • VPP token with 0 available licenses for user-enrolled host
  • User license at the 5-device-per-user limit
  • Multiple VPP locations for the same Managed Apple ID — which token is selected?
  • Mixed fleet: manually-enrolled + user-enrolled hosts for the same app (regression check)
  • .ipa in-house package install on a user-enrolled host
  • User unenrolls then re-enrolls — VPP client user row should be reused, not duplicated

Supplemental testing

Testing notes

Confirmation

  1. Engineer: Added comment to user story confirming successful completion of test plan (include any special setup, test data, or configuration used during development/testing if applicable).
  2. QA: Added comment to user story confirming successful completion of test plan.

Metadata

Metadata

Assignees

Labels

#g-auto-patchingProduct group focused on auto patching software:help-customersCustomer success issue.customer-figalistoryA user story defining an entire feature~activation-blockerBlocks a customer activation~ios-ipados-byo-mobileProduct maturity category~product-maturityContributes to Fleet's product maturity goals for the current year

Type

No type

Projects

Status
Done
Status
Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions