iOS 27 terminates a running app while MDM converts it to a managed app

We're working on an iOS app distributed through the App Store and installed on an MDM-enrolled device. Our MDM server uses InstallApplication to take management of the already-installed and running app.

On iOS 27 betas 3 and 4, processing this command causes iOS to terminate the app and its extensions with SIGKILL.

The same flow and MDM payload work without terminating the app on earlier iOS versions (iOS <=26).

Environment

  • OS: iOS 27 betas 3 and 4
  • Does not happen: iOS 26 or iOS 16.7.15
  • Device: iPhone SE 2nd Gen
  • Enrollment: MDM-enrolled device
  • Distribution: App Store app
  • App state: Already installed and running when management is requested
  • MDM command: InstallApplication

Minimal MDM command

The MDM server sends an InstallApplication command for the already-installed app:

    Attributes = {
        Removable = false;

    };
    ChangeManagementState = Managed;
    Identifier = "APP_BUNDLE_ID";
    InstallAsManaged = true;
    ManagementFlags = 1;
    RequestType = InstallApplication;

We also tested the equivalent command using iTunesStoreID = APP_STORE_ID instead of Identifier, and removing InstallAsManaged. The targeted running app was terminated in the same way.

Steps to reproduce

  1. Install and launch the App Store app as an unmanaged app.
  2. Enroll the iPhone in MDM.
  3. While the app is running, send the MDM InstallApplication command to take management of the existing installation.
  4. Observe the unified logs for mdmd, appstored, manageddeviced, installcoordinationd, and runningboardd.

The issue can also be reproduced by initiating the same server-side flow while the app is already in the background.

iOS 27 log sequence

The command is accepted and appstored starts the managed-app tasks.

manageddeviced then attempts to mark the app as managed using a null persona (this differs from iOS <26):

The running app has a valid persona. After the failed mapping, installcoordinationd explicitly asks RunningBoard to terminate the app to disassociate that persona:

After termination, removing the valid persona also fails.

The managed-app task later reports success despite the mapping failures and termination.

Earlier iOS comparison

As an example, on iOS 16.7.15, using the same MDM command, **iOS routes the request through dmd with persona: default.

The app remains alive and receives managed-app change notifications.

Expected

The existing installation becomes managed without terminating the running app, consistent with the behavior on earlier iOS versions.

Actual

manageddeviced tries to associate the app with persona (null) and fails with MIInstallerErrorDomain Code 191.

That failure causes installcoordinationd to request termination of the app and its extensions to disassociate their valid persona. runningboardd terminates them with SIGKILL (isUserKill=0). The subsequent removal of the only valid persona fails with Code 242, although the managed-app task later reports success.

Documentation checked

The payload follows the documented InstallApplication flow for taking management of an existing app:

We have not found a malformed field that explains the iOS 27-only failure.

More info

Detailed logs and additional info can be found on the Feedback report.

iOS 27 terminates a running app while MDM converts it to a managed app
 
 
Q