Hi,
I developed a Platform Single Sign-On extension and a corresponding extension for my IdP, which is Keycloak based. The code for both projects are here:
https://github.com/unioslo/keycloak-psso-extension
and
https://github.com/unioslo/weblogin-mac-sso-extension
I realized that, when using the Secure Enclave as the AuthenticationMethod, and according to Apple's documentation, the Extension doesn’t obtain fresh ID Tokens when they expire if the refresh token is still valid.
When using password as the Authentication Method, it fetches new ID tokens when they expire, without prompting the user for credentials, by using the refresh token.
My suggestion is that the same behavior should be implemented for Secure Enclave keys.
The thing here is that usually, on OIDC flows, the ID/Access tokens are short-lived. It would make sense for the extension to provide fresh ID tokens. It doesn’t seem to make sense for me that, when using passwords, the extension would fetch these tokens, and not when having the Secure Enclave key.
By not doing this, Apple almost forces the developer of an extension to fetch new ID tokens themselves, which doens’t make sense when it clearly provides fresh tokens when using passwords. It almost forces the developers to either implement that logic themselves, or to issue longer tokens, which is not so nice.
How so you deal with this? Do you simply use the refresh token as an authentication token, or do you do some sort of manual refresh on the extension?
Explore the intersection of business and app development. Discuss topics like device management, education, and resources for aspiring app developers.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Issue Description:
We are experiencing MDM profile installation failures specifically on iPhone 17
devices. After extensive testing and comparison between affected and working
devices, we suspect this appears to be a parameter transmission error rather
than device settings.
Technical Analysis:
Device Settings Comparison: No differences found between problematic and
working devices in system settings, indicating this is not a configuration
issue.
Suspected Parameter Transmission Error:
• Device model information appears to be restricted or blocked during profile
download
• User ID and phone number parameters are not being transmitted to the server
• Installation logs show missing login ID and phone number entries
Symptoms:
• During MDM profile installation, the "Apps & Restrictions" section that should
appear is missing
• Profile download parameters are suspected to not be properly transmitted to
the server
• Installation process fails at the profile configuration stage
Critical Finding:
When we cloned a previously working device to create a problematic device
configuration, the cloned device also began experiencing the same installation
failures. This strongly suggests the issue is related to device-specific
parameters or identifiers.
Additional Information:
We continue to receive reports of this issue from our iPhone 17 users, and these
reports are occurring across various iOS versions.
Request for Assistance:
Has anyone encountered similar MDM profile installation issues on iPhone 17? Are
there known limitations or changes in how device parameters are transmitted
during MDM enrollment on this model?
Any guidance on debugging parameter transmission or known workarounds would be
greatly appreciated.
Topic:
Business & Education
SubTopic:
Device Management
We are expering frequent delays recently when associating a device serial with the adamid of an app in our business manager account. I get an event id back when calling the /associate api but when i check the status of that event id is can be sat in a pending state for sometimes several hours. Need to understand why and if its a configuration issue
Topic:
Business & Education
SubTopic:
Device Management
How to test ManagedAppConfigurationProvider without MDM ?
Task { /* Configuration provider task */
for await configuration in configurationProvider.configurations(MyAppConfiguration.self) {
self.configuration = configuration ?? MyAppConfiguration.defaultConfiguration
}
}
Can the existence of a configuration be simulated, e.g. by storing a mocked configuration in UserDefaults? The UserDefaults key "com.apple.configuration.managed" seems not relevant here.
Topic:
Business & Education
SubTopic:
Device Management
Tags:
Frameworks
Managed Settings
Device Management
We are facing an issue with Platform SSO registration on macOS devices for AD-bound user accounts with Microsoft EntraID configuration.
We are using the Platform SSO payload on macOS devices integrated with Entra ID, and it works as expected — registration completes successfully, and the password syncs with the Entra ID password.
However, when we try the same on macOS devices with AD-bound (mobile) user accounts, the registration does not complete. To elaborate, the process successfully completes the initial WebView authentication but fails at the stage where Apple prompts for the password to sync the local macOS user’s password with the Entra ID password.
It does not display any error, and even after entering a valid password, the process does not proceed further. However, when we try the same on a non-AD user account, it works fine.
We have checked with Microsoft, and they confirmed that there are no restrictions on their side for AD-bound accounts. Since the issue appears to occur at the Apple system level, they advised us to reach Apple teams on this.
Could you please check and let us know how we can proceed with this?
Payload used:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>AuthenticationMethod</key>
<string>Password</string>
<key>ExtensionIdentifier</key>
<string>com.microsoft.CompanyPortalMac.ssoextension</string>
<key>PayloadDisplayName</key>
<string>Extensible Single Sign-On Payload</string>
<key>PayloadIdentifier</key>
<string>com.apple.extensiblesso.B408A658-3DAF-41FF-8A5D-AE77B380CB7B</string>
<key>PayloadType</key>
<string>com.apple.extensiblesso</string>
<key>PayloadUUID</key>
<string>D506CAFD-C802-41F2-9C3E-DF5289C315FF</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PlatformSSO</key>
<dict>
<key>AccountDisplayName</key>
<string>EntraID</string>
<key>AuthenticationMethod</key>
<string>Password</string>
<key>EnableCreateUserAtLogin</key>
<true/>
<key>LoginFrequency</key>
<integer>3700</integer>
<key>LoginPolicy</key>
<array>
<string>AttemptAuthentication</string>
</array>
<key>NewUserAuthorizationMode</key>
<string>Admin</string>
<key>UseSharedDeviceKeys</key>
<true/>
<key>UserAuthorizationMode</key>
<string>Admin</string>
</dict>
<key>ScreenLockedBehavior</key>
<string>DoNotHandle</string>
<key>TeamIdentifier</key>
<string>UBF8T346G9</string>
<key>Type</key>
<string>Redirect</string>
<key>URLs</key>
<array>
<string>https://login.microsoftonline.com</string>
<string>https://sts.windows.net</string>
<string>https://login.partner.microsoftonline.cn</string>
<string>https://login.chinacloudapi.cn</string>
<string>https://login.microsoftonline.us</string>
<string>https://login.microsoft.com</string>
<string>https://login-us.microsoftonline.com</string>
</array>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>Platform SSO</string>
<key>PayloadIdentifier</key>
<string>42GBHOLAP04621.1BD5B6D9-640B-4DC3-9275-56DDD191A5FB</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>58548FC6-38D9-4B28-9EDF-BEEAB03BAB23</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
I'm currently testing app updates using the App:Managed declarative device management payload, and I have a question regarding app update status reporting.
Presently, by subscribing to the app.managed.list status item, we can retrieve a list of managed applications along with their installation status. Additionally, we enable automatic updates for managed App Store apps using the UpdateBehavior.AutomaticAppUpdates key.
However, especially when a critical application update is initiated, we frequently find ourselves needing more detailed information about the update process. For instance, having status items similar to softwareupdate.install-state and softwareupdate.failure-reason would be incredibly helpful for user troubleshooting.
My question is: Is there a way to obtain a similar level of detailed, real-time status updates for app updates?
Any insights you might have, or existing methods to achieve this, would be greatly appreciated.
Thank you.
I am trying to find clarification on something. We are seeing strange cases where customer devices seem to unenroll themselves after a period of MDM inactivity. This seems to tie into roughly when their identity certificate has expired. We can't confirm this because the device has since unenrolled.
Is there any case where an Apple device will automatically unenroll if it's identity certificate has expired?
This doesn't always seem to happen - I had a device respond immediately after being switched off for a year - but could this be down to some devices being DEP enrolled and others manually enrolled?
Topic:
Business & Education
SubTopic:
Device Management
Hello guys,
I wanted to reach out to see if any of you have experienced or come across an issue we are facing in our organization. We are encountering a campus-wide problem where Macs are take an unusually long time to delete files on external drives formatted with ExFAT.
We manage these Macs through Jamf Pro, and numerous policies are applied when the devices are enrolled. We have tested the issue in both scenarios—when the Macs are connected to the domain and when they are not—and the slow deletion persists in both cases.
At this point, we are unsure whether the issue lies on our end or if it is related to the operating system itself. If anyone has found a fix or workaround for this problem, we would appreciate your input.
The result Plist for the InstalledApplicationList MDM command is reporting duplicate Application identifiers. Sometimes with different version, other times with the same version.
The device is MacOS 15.5, Enrolled via ABM (Supervised). Here are a couple samples from the returned list.
Duplicate app:
<key>BundleSize</key>
<integer>398051</integer>
<key>Identifier</key>
<string>com.adobe.Acrobat.NativeMessagingHost</string>
<key>Installing</key>
<false/>
<key>Name</key>
<string>NativeMessagingHost</string>
<key>ShortVersion</key>
<string>5.0</string>
<key>Version</key>
<string>5.0</string>
</dict>
<dict>
<key>BundleSize</key>
<integer>398051</integer>
<key>Identifier</key>
<string>com.adobe.Acrobat.NativeMessagingHost</string>
<key>Installing</key>
<false/>
<key>Name</key>
<string>NativeMessagingHost</string>
<key>ShortVersion</key>
<string>5.0</string>
<key>Version</key>
<string>5.0</string>
</dict>
Different Version:
<key>BundleSize</key>
<integer>4197200</integer>
<key>Identifier</key>
<string>com.adobe.adobe_licutil</string>
<key>Installing</key>
<false/>
<key>Name</key>
<string>adobe_licutil</string>
<key>ShortVersion</key>
<string>11.0.0.39</string>
<key>Version</key>
<string>11.0.0.39</string>
</dict>
<dict>
<key>BundleSize</key>
<integer>4443177</integer>
<key>Identifier</key>
<string>com.adobe.AcroLicApp</string>
<key>Installing</key>
<false/>
<key>Name</key>
<string>AcroLicApp</string>
<key>ShortVersion</key>
<string>25.001.20432</string>
<key>Version</key>
<string>25.001.20432</string>
</dict>
<dict>
<key>BundleSize</key>
<integer>7380980</integer>
<key>Identifier</key>
<string>com.adobe.adobe_licutil</string>
<key>Installing</key>
<false/>
<key>Name</key>
<string>adobe_licutil</string>
<key>ShortVersion</key>
<string>10.0.0.274</string>
<key>Version</key>
<string>10.0.0.274</string>
</dict>
Topic:
Business & Education
SubTopic:
Device Management
Tags:
macOS
Apple Business Manager
Device Management
In Device management profile,
VPN.VPN.OnDemandRulesElement
Action->Disconnect
Example payload:
OnDemandEnabled1OnDemandRules
ActionDisconnectInterfaceMatchCellular
When install my vpn payload with above configuration, I was unable to connect vpn manually when i try with wifi interface
Based on the doc, VPN should tear down when i connect with specific type interface(here cellular) i was unable to connec the vpn when i'm in cellular network good but when i connect to wifi still the same is happening. Is this a bug? tried in ios 18
Topic:
Business & Education
SubTopic:
Device Management
Hi,
Is there a method to hide individual items in System Settings that is not Deprecated?
It needs some of the settings set and hidden for the end user. I found the DisabledSystemSettings key however it is marked as Deprecated and does not include all the new items, especially those related to Apple Intelligence.
Is there any method other than “Restrictions” that does not hide and only set individual settings ?
It needs to hide items in system settings :)
Topic:
Business & Education
SubTopic:
Device Management
Tags:
macOS
Managed Settings
Device Management
Hello,
I have an issue with DurationUntilRemoval—it never deletes my profile. I installed it via my MDM server and also tried installing it using Apple Configurator 2. The device is in supervised mode.
Here is my profile:
** DurationUntilRemoval**
** 3600**
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadDescription</key>
<string>Configures restrictions</string>
<key>PayloadDisplayName</key>
<string>Restrictions</string>
<key>PayloadIdentifier</key>
<string>com.apple.applicationaccess.82B4587F-86F6-406B-9D27-03A799379EB5</string>
<key>PayloadType</key>
<string>com.apple.applicationaccess</string>
<key>PayloadUUID</key>
<string>82B4587F-86F6-406B-9D27-03A799379EB5</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>allowActivityContinuation</key>
<true/>
<key>allowAddingGameCenterFriends</key>
<true/>
<key>allowAirPlayIncomingRequests</key>
<true/>
<key>allowAirPrint</key>
<true/>
<key>allowAirPrintCredentialsStorage</key>
<true/>
<key>allowAirPrintiBeaconDiscovery</key>
<true/>
<key>allowAppCellularDataModification</key>
<true/>
<key>allowAppClips</key>
<true/>
<key>allowAppInstallation</key>
<true/>
<key>allowAppRemoval</key>
<true/>
<key>allowApplePersonalizedAdvertising</key>
<true/>
<key>allowAssistant</key>
<true/>
<key>allowAssistantWhileLocked</key>
<true/>
<key>allowAutoCorrection</key>
<true/>
<key>allowAutoUnlock</key>
<true/>
<key>allowAutomaticAppDownloads</key>
<true/>
<key>allowBluetoothModification</key>
<true/>
<key>allowBookstore</key>
<true/>
<key>allowBookstoreErotica</key>
<true/>
<key>allowCamera</key>
<true/>
<key>allowCellularPlanModification</key>
<true/>
<key>allowChat</key>
<true/>
<key>allowCloudBackup</key>
<true/>
<key>allowCloudDocumentSync</key>
<true/>
<key>allowCloudPhotoLibrary</key>
<true/>
<key>allowContinuousPathKeyboard</key>
<true/>
<key>allowDefinitionLookup</key>
<true/>
<key>allowDeviceNameModification</key>
<true/>
<key>allowDeviceSleep</key>
<true/>
<key>allowDictation</key>
<true/>
<key>allowESIMModification</key>
<true/>
<key>allowEnablingRestrictions</key>
<true/>
<key>allowEnterpriseAppTrust</key>
<true/>
<key>allowEnterpriseBookBackup</key>
<true/>
<key>allowEnterpriseBookMetadataSync</key>
<true/>
<key>allowEraseContentAndSettings</key>
<true/>
<key>allowExplicitContent</key>
<true/>
<key>allowFilesNetworkDriveAccess</key>
<true/>
<key>allowFilesUSBDriveAccess</key>
<true/>
<key>allowFindMyDevice</key>
<true/>
<key>allowFindMyFriends</key>
<true/>
<key>allowFingerprintForUnlock</key>
<true/>
<key>allowFingerprintModification</key>
<true/>
<key>allowGameCenter</key>
<true/>
<key>allowGlobalBackgroundFetchWhenRoaming</key>
<true/>
<key>allowInAppPurchases</key>
<true/>
<key>allowKeyboardShortcuts</key>
<true/>
<key>allowManagedAppsCloudSync</key>
<true/>
<key>allowMultiplayerGaming</key>
<true/>
<key>allowMusicService</key>
<true/>
<key>allowNews</key>
<true/>
<key>allowNotificationsModification</key>
<true/>
<key>allowOpenFromManagedToUnmanaged</key>
<true/>
<key>allowOpenFromUnmanagedToManaged</key>
<true/>
<key>allowPairedWatch</key>
<true/>
<key>allowPassbookWhileLocked</key>
<true/>
<key>allowPasscodeModification</key>
<true/>
<key>allowPasswordAutoFill</key>
<true/>
<key>allowPasswordProximityRequests</key>
<true/>
<key>allowPasswordSharing</key>
<true/>
<key>allowPersonalHotspotModification</key>
<true/>
<key>allowPhotoStream</key>
<true/>
<key>allowPredictiveKeyboard</key>
<true/>
<key>allowProximitySetupToNewDevice</key>
<true/>
<key>allowRadioService</key>
<true/>
<key>allowRemoteAppPairing</key>
<true/>
<key>allowRemoteScreenObservation</key>
<true/>
<key>allowSafari</key>
<true/>
<key>allowScreenShot</key>
<true/>
<key>allowSharedStream</key>
<true/>
<key>allowSpellCheck</key>
<true/>
<key>allowSpotlightInternetResults</key>
<true/>
<key>allowSystemAppRemoval</key>
<true/>
<key>allowUIAppInstallation</key>
<true/>
<key>allowUIConfigurationProfileInstallation</key>
<true/>
<key>allowUSBRestrictedMode</key>
<true/>
<key>allowUnpairedExternalBootToRecovery</key>
<false/>
<key>allowUntrustedTLSPrompt</key>
<true/>
<key>allowVPNCreation</key>
<true/>
<key>allowVideoConferencing</key>
<true/>
<key>allowVoiceDialing</key>
<true/>
<key>allowWallpaperModification</key>
<true/>
<key>allowiTunes</key>
<true/>
<key>forceAirDropUnmanaged</key>
<false/>
<key>forceAirPrintTrustedTLSRequirement</key>
<false/>
<key>forceAssistantProfanityFilter</key>
<false/>
<key>forceAuthenticationBeforeAutoFill</key>
<false/>
<key>forceAutomaticDateAndTime</key>
<false/>
<key>forceClassroomAutomaticallyJoinClasses</key>
<false/>
<key>forceClassroomRequestPermissionToLeaveClasses</key>
<false/>
<key>forceClassroomUnpromptedAppAndDeviceLock</key>
<false/>
<key>forceClassroomUnpromptedScreenObservation</key>
<false/>
<key>forceDelayedSoftwareUpdates</key>
<false/>
<key>forceEncryptedBackup</key>
<false/>
<key>forceITunesStorePasswordEntry</key>
<false/>
<key>forceLimitAdTracking</key>
<false/>
<key>forceWatchWristDetection</key>
<false/>
<key>forceWiFiPowerOn</key>
<false/>
<key>forceWiFiWhitelisting</key>
<false/>
<key>ratingApps</key>
<integer>1000</integer>
<key>ratingMovies</key>
<integer>1000</integer>
<key>ratingRegion</key>
<string>us</string>
<key>ratingTVShows</key>
<integer>1000</integer>
<key>safariAcceptCookies</key>
<real>2</real>
<key>safariAllowAutoFill</key>
<true/>
<key>safariAllowJavaScript</key>
<true/>
<key>safariAllowPopups</key>
<true/>
<key>safariForceFraudWarning</key>
<false/>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>papala</string>
<key>PayloadIdentifier</key>
<string>MacBook-Pro-Kyrylo-2.4A2954CA-57A5-44D9-8AD3-546407A0CAD4</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>BEED8448-8866-43EB-AC3C-1C3C652AADE4</string>
<key>PayloadVersion</key>
<integer>1</integer>
it's just test profile, without difficult stuff, but it doesn't work too
What is wrong?
Topic:
Business & Education
SubTopic:
Device Management
Tags:
Apple Business Manager
Device Management
Managed Settings
Im trying to make my own iOS MDM Server with SCEP. I cant send a response to the PKIOperation without the iPad rejecting it. Can someone post the PKIOperation response structure
Topic:
Business & Education
SubTopic:
Device Management
The security configuration updates have been enforced through automatic update policy enabled through an MDM policy. However our end users would like to know when these updates are triggered by the device and installed successfully. We can see on a few devices that even though the automatic updates are enabled there are many devices with config updates pending. Also is there a way to manually install these config updates as the end user cannot see these updates listed in the software update section.
Topic:
Business & Education
SubTopic:
Device Management
I am trying to correctly manage about 20 Mac, iPhones and PC
inside a Wi-Fi network built through
System Settings > Sharing > Internet Sharing
To achieve this task I defined a complete configuration file:
/etc/bootpd.plist
which is used by /usr/libexec/InternetSharing.
But every time /usr/libexec/InternetSharing is starting
the file /etc/bootpd.plist is overwritten by another file and my configuration
is thus fully lost.
How to set a correct /etc/bootps.plist file and avoid its total overwrite
by /usr/libexec/InternetSharing?
Is it necessary to write this bootpd.plist in some other directory for
/usr/libexec/InternetSharing to load it without destroying it?
I got the same configuration total erase on macOS Big Sur and Sequoia.
I'm hoping to make certain in-house apps fail to launch by revoking the in-house certificate that they were built on. This is by way of encouraging users of these apps to download updates built on a new certificate.
How long will it take app built on a now-revoked certificate to no longer launch?
Also, what is Apple's process for checking the validity of an in-house certificate in an app built on that certificate, running on iOS devices?
I understand that provisioning profiles have built-in expiration dates, but will an in-house app that's built on a valid provisioning profile keep running even on a revoked certificate if the revocation happened before the certificate's own expiration date?
Craig Umanoff
Hi There
Our app is used in the hospital field and receives remote APNS via the Notification Service Extension.
We found a scenario where screen is on, our app is in background, if a "Critical" notification is displayed as a banner at the top of the screen, subsequent normal notifications will be suppressed and no sound will play. Only after the user swipes away the critical notification will the normal notification appear and play a sound.
is this as expected? I could not find any document on such case from Apple.
Thanks.
Topic:
Business & Education
SubTopic:
General
During VPP app installation, the app-device asset association event took longer than the usual maximum of 30 seconds to complete, regardless of the number of app licenses involved.
We’ve run into what looks like a gap in how forceAirDropUnmanaged is enforced on iOS devices.
Setup:
Device: iOS 17.x (unsupervised, enrolled in MDM)
MDM Restriction: forceAirDropUnmanaged = true
Managed Open-In restriction also applied (block unmanaged destinations).
Verified: from a managed app, the AirDrop icon is hidden in the share sheet. This part works as expected.
Issue:
When two iOS devices are brought close together, the proximity-initiated AirDrop / NameDrop flow still allows transfer of photos, videos, or files between devices. In this path, forceAirDropUnmanaged does not appear to apply, even though the same restriction works correctly in the standard sharing pane.
What I’d expect: If forceAirDropUnmanaged is enabled, all AirDrop transfer paths (including proximity/NameDrop) should be treated as unmanaged, and thus blocked when “Managed Open-In to unmanaged destinations” is restricted.
What I observe instead:
Share sheet → AirDrop hidden ✅
Proximity/NameDrop → transfer still possible ❌
Questions for Apple / Community:
Is this a known limitation or expected behavior?
Is there a different restriction key (or combination) that also covers proximity-based AirDrop?
If not currently supported, should this be filed as Feedback (FB) to request alignment between share sheet AirDrop and NameDrop enforcement?
This behaviour introduces a compliance gap for organisations relying on MDM to control data exfiltration on unsupervised or user-enrolled devices. Any clarification or guidance would be greatly appreciated.
Topic:
Business & Education
SubTopic:
Device Management
Tags:
Privacy
Apple Business Manager
Device Management
We are having issues working with bypass codes the server creates when initiating Activation Lock through MDM.
We are able to use the device-generated bypass codes without issue.
When using the end point to request activation lock as specified in https://developer.apple.com/documentation/devicemanagement/creating-and-using-bypass-codes/ we get a 200 response. But when using the endpoint to bypass the activation lock, we get a 404 response. If we try to manually input the activation lock bypass code, it also does not work.
Both of these methods work with the device-generated bypass codes.
Just to clarify when testing the server generated codes, we ensured that we did not test the device-generated codes.
All of this was tested on iOS devices.
Created feedback ticket FB21365819 with device specific details.