Profiles vs. Declarations: Managing Apple Devices the DDM Way

Profiles vs. Declarations in Addigy

Introduction

Welcome, everyone. My name is Mauricio, and I’m the solutions architect conducting today’s webinar. Today we’re talking about profiles versus declarations. If you’ve been with Addigy for a while, you may have noticed that one of the features changed its name from MDM Profiles to Device Settings. Within those device settings, you may have seen a keyword called “declaration.” We’re here to talk about what a declaration actually means, what profiles mean and do, and where they’re located on your machine. If any questions come up as I’m going along, feel free to drop them in the chat. We’ll also have a Q&A at the end.

Apple Defines the Keys, Addigy Delivers Them

Before we get started, we have to understand what these device settings are and what they actually do. Are these keys that Addigy pulls out of thin air? No. These are Apple-defined keys. Apple decides which keys can be managed. Apple defines the settings, the payloads, the declarations, and which operating system version supports each one. Our job at Addigy is to provide the UI and the deployment workflow around what Apple has already built.

Deploying an MDM Profile

If you log in to your Addigy instance and click on your policies, you’ll find Device Settings with several columns’ worth of profiles you can deploy to your machines. Within these profiles there are certain keys. For example, a Software Update profile has certain keys that you point at the machine and manage — the keyword being “managed.”

The first question that typically comes up: why are there two checkboxes? The first checkbox determines whether it’s a managed setting, meaning you, the admin, manage it. The second checkbox is whether you enable or disable that setting. If you do not want the machine to automatically install app updates, you would disable that. If you do not want it to automatically check for updates, you would disable that — case by case, depending on what you and the customer you’re managing are looking for.

You’ll notice that MDM profiles have an installation priority, because it’s based on when the profile lands on the machine. With declarations it’s a bit different, and we’ll see that in a moment.

When I deploy this profile through my policy, it behaves like anything else in my policy hierarchy — it’s inherited. If I add device settings at the top level of my company, they apply to the child policies underneath, like engineering, sales, or support. I can wait for the profile to land on the machine, or I can expedite it by clicking Deploy Now.

Confirming a Profile Landed on the Machine

Where can I review whether this profile has landed on the machine? First, the deployment status. You’re looking at four color codes: green means good; yellow means pending — you’ve pushed the profile but maybe the machine is offline; red means error — maybe you’re doing something redundant, like deploying FileVault to a machine that’s already FileVaulted; and blue is for compatibility — some profiles are only compatible with iOS, most are for macOS, and some cover both.

The key takeaway: device settings enforce a managed setting on the machine. You manage it; the end user can’t do much about it. That applies whether you’re deploying an MDM profile or a declaration.

Another place to review whether the profile made it to the machine is Device Settings > Installed Device Settings. You can also review it in a live terminal using the command sudo profiles list, or look in Library/Preferences. The MDM profile I deployed adjusts the softwareupdate plist there, and only I, the admin, can change it. My end user can’t make changes locally, because the profile is guaranteeing the state of whatever I’m enforcing.

Where Profiles Actually Live

Profiles don’t all live in Library/Preferences. Library/Preferences might show you the results of a setting, but the actual management state lives inside macOS’s own profile system: /private/var/db/ConfigurationProfiles. That is not a directory intended for you to browse with a native utility like defaults read to adjust settings and keys — it’s for the macOS system itself. Don’t assume a setting is missing just because you didn’t find it in Library/Preferences. All settings should be reflected within that ConfigurationProfiles directory, and you can verify with sudo profiles list.

The Anatomy of an MDM Profile

Inside an MDM profile you have keys and values assigned to those keys — again, Apple-defined keys, not something Addigy creates out of thin air. What Addigy does is create and send the profile. macOS registers the profile as an installed configuration, and it’s the profile itself that enforces the setting. When you remove the profile, you remove the instructions. With MDM, Addigy tells the Mac: “install this profile.”

Does DDM for Software Updates Require Device Settings Profiles?

A question from the chat: if we’re using DDM for software updates, do we also need device settings profiles, or are those just an extra level of control? DDM will work without them. In our previous webinar we covered DDM as an update mechanism — it’s asynchronous. You set the instructions, and the machine maintains that state. You do not need any device settings profile associated with it.

The analogy I used previously: it’s like an Amazon delivery. With MDM, you have to be home at the time of delivery — meaning the machine has to be reachable when the command arrives. With DDM, it sends the instructions to the machine, and the machine is expected to maintain that state on its own. So the DDM update mechanism is separate from device settings. And whether you deploy a declaration or an MDM profile, both enforce a managed setting.

One attendee also noted: currently, if you’re using version control in DDM and want to control some of the update settings, you’ll still need MDM profiles (device settings) configured. If you use “keep to the latest,” you can replace those settings.

What Is a Declaration?

The main difference is that a declaration is exchanged as JSON. Instead of “install this file,” it’s “define the state that macOS should maintain.” With legacy profiles, the model was “install this profile.” With a declaration, it’s “maintain this state.” The idea is still the same: it enforces a setting.

An MDM profile is more server-driven: “install this configuration profile now.” If something changes, the MDM server generally has to send another command to replace, update, or remove the profile. With a DDM declaration, Addigy tells the Mac: “this is the state I want you to maintain.” The Mac evaluates the declaration, applies it when appropriate, maintains that state, and reports status back to MDM.

Passcode: Legacy vs. Recommended

In your Addigy instance, some profiles now show a “New” tag, meaning a declaration is available for that setting. Passcode is one of them: there’s Passcode (Legacy) and Passcode (Recommended). If you’re still pushing a legacy profile, that’s okay — it’s not going to Thanos-snap off the machine. It will still be there and still enforce.

Under Legacy, there’s still an installation priority, because the priority is tied to the profile being deployed to the machine, not to the setting being configured. Under Recommended, you’ll notice two things. First, a banner: the recommended version is for the current OS — macOS 26 — and any operating system moving forward. Second, there’s no installation priority, because we’re not deploying a .mobileconfig file. DDM doesn’t use a priority order. You’re not telling the Mac “apply this first, then that.” You’re telling the machine — macOS or iOS — “this is my desired end state,” and the machine works toward that state.

Now, what if both a legacy passcode profile and a passcode declaration are applied to the same machine? Did I just break the machine? No. Two passcode profiles can exist on the machine. The rule of thumb is that the declaration should take priority. However, when it comes to conflicts, if the legacy profile is more restrictive than the recommended one, the legacy profile is still the one that gets enforced. Deploying a passcode declaration over a legacy passcode profile doesn’t guarantee the declaration wins — the machine enforces whichever passcode profile is most restrictive.

After deploying the declaration, if I run sudo profiles list, the declaration shows an identifier that looks quite different from the other profiles in the output. Those identifiers are what make DDM declarations unique in the list.

Migration Best Practice

Best practice: always test first. Isolate a machine, preferably in an isolated test policy — throw a VM in there so you can observe the behavior. You can have both the legacy and recommended passcode profiles on the machine at the same time. Once you’ve confirmed the declarative passcode has deployed — in the policy and on the machine — go into your device settings and remove the legacy profile.

This is not urgent. If you’re still deploying the legacy passcode profile, your machine isn’t going to blow up. It’s just something to be cognizant of: some profiles are now recommended to move to declarations, and as the name implies, we recommend moving to the recommended settings. The passcode declaration has been available for a while now — several months at least.

VPN: One or the Other, Not Both

VPN is another profile with a “New” tag: VPN Settings (Legacy) plus the newer options. But the main difference from passcode: the “stricter wins” idea applies to passcode. VPN doesn’t work the same way — you use one or the other, not both.

When would you migrate to a DDM VPN declaration? Always-on VPN, plus some additional options. You’d mainly keep the legacy profile — as the name implies — for older OSes: macOS 14, maybe 15, machines still using legacy VPN. Even if a macOS 26 machine is still receiving legacy, it’s still okay. But moving forward, be aware you’re going to need the recommended version. You could technically have both on the machine, but it can cause conflicts. Apple doesn’t clearly define what happens when both VPN profiles are on the machine, but there may be potential connectivity issues. Deploy one, and once you’re ready to move, remove the one you’re currently using and apply the declaration. Pushing different VPNs is fine — it’s having the same profile deployed at the same policy level that can cause issues.

Passcode and VPN are the two main profiles today with a recommended-versus-legacy choice. Some others are brand new entirely.

AppleSeed vs. Stable

Some profiles — for example, Extensible SSO for platform SSO — now show AppleSeed and Stable options. AppleSeed is primarily for beta testing. It’s not for your production machines. You need AppleSeed for IT enrollment, there’s an agreement you have to sign, and I believe you also need Apple Business to use it. So it won’t be available for everyone, and it’s not for day-to-day management — it’s for testing what’s potentially next.

As always, we recommend creating a separate, isolated test policy. That’s where you can deploy AppleSeed device settings, so you’re only touching a controlled set of machines instead of your entire fleet. As one of my colleagues put it: test early and test often. With macOS GoldenGate on the horizon, you should be looking at test groups for those AppleSeed keys. One way to do that: inside a testing flex policy, add a filter for the macOS version you want to test on — for example, macOS version equals 27.0 — point it at your test machines or VMs, and apply your testing there.

Brand-New Profiles: Safari Settings and Passkey Attestation

Some profiles are entirely new. Safari Settings lets you configure things like Safari extensions — and notice the tabs at the top for what’s needed moving forward, including experimental AppleSeed options.

Another new profile folks ask about is Passkey Attestation. A passkey verifies the user; passkey attestation verifies the device it came from. It proves that a passkey was created on a trusted Apple device. You, the admin, specify in the profile which relying parties are allowed to receive attestation — in other words, for which URLs both the user and their machine will be verified and authenticated. It sounds similar to passcode, but they’re different: a passcode profile controls what the password looks like; passkey attestation proves what device the passkey came from.

Using a Script to Identify the Enforcement Source

One thing I want to share: I used Addigy Device AI to create a simple script. This isn’t a scripting webinar — it’s just to show what you can do. For folks migrating from legacy passcode profiles to recommended ones, you can build a “passcode enforcement source” script that reviews the sudo profiles list output and tells you whether the machine is enforcing a declaration or a legacy profile. Run it, check script history, and the output shows the enforcement source — DDM declaration or legacy profile. You could even create a custom fact from a script like this to identify which machines still need to migrate to the recommended profiles.

Apple Intelligence Profiles: External Intelligence and Intelligence Settings

We also have two new declaration types for Apple Intelligence. External Intelligence determines whether Apple Intelligence can reach outside — can Apple Intelligence connect outside of Apple? Hence the name. Just like MDM profiles, the first checkbox makes it managed, and the second checkbox enables or disables it.

Think of Intelligence Settings as internal intelligence: which Apple Intelligence features can users actually use? Things like Writing Tools, Genmoji, Image Playground, and Visual Intelligence. And again — no installation priority, because we’re telling the machine the state we want it in, not deploying a file.

Another chat question: when would you not make a declaration manageable? With a declaration, you’re still managing the setting. It’s not something you have to take care of immediately — it’s something to start preparing for as newer operating systems release. You’ll start noticing the “New” tag on more of these profiles. It started with passcode, and you may see it across other profiles as well. The takeaway: start preparing to move to the recommended forms of managing these settings versus deploying an MDM profile.

Summary: What We Covered

Device settings currently have two options. MDM profiles — like Security & Privacy, Software Updates, System Extensions, Wi-Fi — if you’re using them, you’re fine. They’re not going to be removed from your machines, and they enforce a managed setting. The other type is a declaration, covering newer settings like Math Notes and Safari. PPPC currently stays the same — nothing has changed there yet, though potentially in the future.

Profiles with a “New” tag show either Recommended versus Legacy, or AppleSeed and Stable. As for when settings move to DDM — that’s on Apple. Apple has to define it first, and then we make a profile available to you. I don’t have dates. Just be aware: whenever you log in to your environment, check device settings. You might see a new Wi-Fi profile or a new Security & Privacy profile. Prepare for it.

In summary: new profiles are available. Lean toward using the recommended version of a profile if possible. If you still have legacy, it’s okay — it’s not urgent. Be careful with AppleSeed: great for testing, but that’s exactly what it should be used for — testing, not the devices you manage day to day. All of these still enforce managed settings on the machine.

One more time in live terminal: run sudo profiles list and you’ll notice some profiles look different from the others. Those are your declarations — the identifiers look vastly different from the other profiles. That’s one way of determining whether a profile is a declaration.

Why does this matter? The same settings are there. The same workflow is there. Just be aware there’s a new method of delivering these device settings, and that’s through DDM. Should you start to consider it? Yes — but there is no hard deadline. We’re not going to start removing profiles willy-nilly. One attendee pointed out that Apple has been warning about some of these profiles being deprecated since the last WWDC, and recommended running a report from the Mac Evaluation Utility to find out what’s being reported on everything you’re managing. Thanks for sharing that.

Key points as these migrations start to happen: when you notice new profiles — a new Wi-Fi, a new Security & Privacy, a new Restrictions — the migration will not be automatic. You’ll have to go in and deploy the profile yourself. Not every setting has a DDM equivalent. And most importantly, test on the OS before you deploy. Keep a separate, isolated test policy, deploy all the declarations and profiles there first, and only then move to your day-to-day production machines. The key takeaway: move to DDM gradually and intentionally.

Q&A

Can I access this video with a free Addigy Academy account? Yes — even free accounts can access it. Expect it sometime later today; I have to send it to my marketing team to make it look nice first.

Does Addigy support deploying certificates? Yes, we support deploying certificates and the certificate payloads.

Any guidance or resources for creating Apple VMs for testing? If you’re on Apple Silicon, the free resource I typically recommend is VirtualBuddy. Create a separate test policy, add your VM in there, and do whatever you like — break it, blow it up, remove it, and create another one. It’s entirely free. The caveat is you do need to be on Apple Silicon.

Is there an easy way to tell whether a profile is a declaration? If you deploy a device settings profile and go to its GoLive page under Device Settings, it shows the name you gave it, so there isn’t a truly easy way. You could use sudo profiles list, and there’s another command that dives deeper into each profile: sudo profiles show -type configuration. That gives a deeper look into each line, though I don’t believe it explicitly labels declarations. The one reliable tell is the identifier in sudo profiles list. You could use a script to identify those particular profiles, or simply label your profiles clearly yourself when you create them.

This recording will be available in Addigy Academy so you can review it with your team. If you have follow-up questions, reach out to [email protected] or [email protected]. We’ll be doing more of these webinars, so join us for the next one. Thank you all so much for your time.

Frequently Asked Questions

What is the difference between an MDM profile and a declaration in Addigy?

An MDM profile is server-driven: the MDM server tells the Mac to install a configuration profile, and any change requires the server to send another command. A declaration uses Declarative Device Management (DDM) and is exchanged as JSON: Addigy tells the Mac the state it should maintain, and the Mac applies it, maintains that state on its own, and reports status back. Both enforce a managed setting on the device.

Do I need to migrate from legacy MDM profiles to declarations right away?

No. There is no hard deadline, and legacy profiles will not be removed from your machines — they continue to enforce their settings. Addigy recommends moving to the recommended (declaration) versions gradually and intentionally, testing in an isolated policy first, because new operating systems will increasingly rely on DDM.

Can a legacy passcode profile and a passcode declaration exist on the same Mac?

Yes. Two passcode profiles can coexist without breaking the machine. The declaration typically takes priority, but if the legacy profile is more restrictive, the most restrictive setting is the one enforced. Best practice is to confirm the declaration deployed, then remove the legacy profile.

Should I deploy both the legacy and recommended VPN profiles?

No. Unlike passcode, VPN does not follow a “most restrictive wins” rule — you use one or the other. Having both on a machine can cause conflicts, including potential connectivity issues. Keep legacy VPN for older OS versions, and when you’re ready to move, remove the profile you’re using before applying the declaration.

Why don’t declarations have an installation priority in Addigy?

Installation priority applies to MDM profiles because it’s tied to when a .mobileconfig file lands on the machine. Declarations don’t deploy a file in that sense — they tell the machine its desired end state, and the machine works toward that state — so DDM doesn’t use a priority order.

How can I tell if a Mac is enforcing a declaration or a legacy profile?

Run sudo profiles list in a terminal: declarations show identifiers that look distinctly different from standard MDM profiles. You can also run sudo profiles show -type configuration for a deeper look at each profile, check Installed Device Settings in Addigy, or use a script (or custom fact) that parses the profiles output to report the enforcement source.

What is AppleSeed in Addigy device settings?

AppleSeed options are for beta testing upcoming Apple functionality, not for production machines. Using them requires AppleSeed for IT enrollment, a signed agreement, and Apple Business. Deploy AppleSeed settings only in an isolated test policy so you’re touching a controlled set of machines.

What is passkey attestation?

A passkey verifies the user; passkey attestation verifies the device the passkey came from, proving it was created on a trusted Apple device. In the profile, the admin specifies which relying parties (URLs) are allowed to receive attestation, so both the user and their machine are verified and authenticated.