<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>SS Mac Admin</title>
  <subtitle>Mac Admin</subtitle>
  <link href="https://ssmacadmin.com/feed.xml" rel="self"/>
  <link href="https://ssmacadmin.com"/>
  <updated>2026-05-11T00:00:00Z</updated>
  <id>https://ssmacadmin.com/</id>
  <author>
    <name>SSMacAdmin</name>
  </author>
 
  <entry>
    <title>Why EdgeUpdater Won&#39;t Stop Asking for Permission — and How to Fix It</title>
    <link href="https://ssmacadmin.com/posts/2026-05-11-AllowEdgeUpdater/"/>
    <updated>2026-05-11T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-05-11-AllowEdgeUpdater/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-11-EdgeUpdaterAllowPopup.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Latest talk on the town if you&#39;re managing macOS devices with Intune is likely the scenatio that  your users are getting spammed by a popup saying &lt;strong&gt;&amp;quot;EdgeUpdater would like to access data from other apps&amp;quot;&lt;/strong&gt; — and clicking Allow does absolutely nothing — this post is for you.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;whats-actually-happening&quot; tabindex=&quot;-1&quot;&gt;What&#39;s Actually Happening&lt;/h2&gt;
&lt;p&gt;This is a macOS TCC (Transparency, Consent, and Control) enforcement issue, made worse by the presence of MDM — and it involves two separate TCC services, not one.&lt;/p&gt;
&lt;p&gt;EdgeUpdater — Microsoft&#39;s background updater for Edge, which runs as a separate process from the browser itself — makes two distinct TCC requests on each run:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;kTCCServiceSystemPolicyAllFiles&lt;/code&gt; (Full Disk Access)&lt;/strong&gt; — needed to read and write its own coordination files, including a shared preferences lock (&lt;code&gt;GlobalPrefs&lt;/code&gt;) that synchronises state between its concurrent processes. On MDM-managed devices with a restrictive PPPC profile, this is &lt;strong&gt;silently denied&lt;/strong&gt; — no popup, no prompt, just a blocked syscall.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;kTCCServiceSystemPolicyAppData&lt;/code&gt; (App Data)&lt;/strong&gt; — a more targeted service protecting access to other apps&#39; container data. This is what generates the popup: &lt;em&gt;&amp;quot;EdgeUpdater would like to access data from other apps.&amp;quot;&lt;/em&gt; Because there&#39;s no MDM rule covering this service at all, TCC falls through to prompting the user.&lt;/p&gt;
&lt;p&gt;So the popup isn&#39;t coming from the Full Disk Access denial — that one fails silently. The popup comes from the App Data request, which has no MDM policy either way and therefore asks the user. Clicking Allow still does nothing, because the underlying FDA denial causes EdgeUpdater to crash and respawn immediately, triggering the whole sequence again.&lt;/p&gt;
&lt;p&gt;When FDA access is blocked, the cascade of failures looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It can&#39;t acquire &lt;code&gt;GlobalPrefs&lt;/code&gt; → multiple instances spawn without coordination&lt;/li&gt;
&lt;li&gt;It can&#39;t read its own Keystone compatibility data → version state is lost each run&lt;/li&gt;
&lt;li&gt;It can&#39;t determine which version of itself is &amp;quot;active&amp;quot; → version arbitration fails&lt;/li&gt;
&lt;li&gt;Every new instance hits TCC → every new instance triggers the popup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On MDM-managed devices, TCC decisions for managed services are &lt;strong&gt;authoritative and user-immutable&lt;/strong&gt;. The &lt;code&gt;auth_reason&lt;/code&gt; value in the TCC database will be &lt;code&gt;5&lt;/code&gt; — MDM policy — which means user consent is completely bypassed for the FDA request. The App Data prompt appears, but any Allow response is rendered meaningless by the underlying crash loop caused by the FDA denial.&lt;/p&gt;
&lt;p&gt;Non-enrolled devices don&#39;t have this problem because there&#39;s no MDM policy overriding TCC, so the standard user consent flow works as intended for both services.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;how-we-diagnosed-it&quot; tabindex=&quot;-1&quot;&gt;How We Diagnosed It&lt;/h2&gt;
&lt;h3 id=&quot;step-1-query-the-tcc-database&quot; tabindex=&quot;-1&quot;&gt;Step 1 — Query the TCC database&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; sqlite3 /Library/Application&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt; Support/com.apple.TCC/TCC.db &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token string&quot;&gt;&quot;SELECT client, service, auth_value, auth_reason FROM access WHERE client LIKE &#39;%EdgeUpdater%&#39;;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;com.microsoft.EdgeUpdater|kTCCServiceSystemPolicyAllFiles|0|5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two fields told the whole story:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth_value = 0&lt;/code&gt; → denied&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth_reason = 5&lt;/code&gt; → MDM-enforced, user cannot override&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-2-check-for-an-existing-pppc-profile&quot; tabindex=&quot;-1&quot;&gt;Step 2 — Check for an existing PPPC profile&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; profiles show &lt;span class=&quot;token parameter variable&quot;&gt;-all&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-A&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EdgeUpdater&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Returned nothing. No explicit PPPC entry for &lt;code&gt;com.microsoft.EdgeUpdater&lt;/code&gt; — meaning it was being caught by a blanket restrictive policy with no allowlist entry for EdgeUpdater specifically.&lt;/p&gt;
&lt;h3 id=&quot;step-3-find-the-binary-and-confirm-the-process-storm&quot; tabindex=&quot;-1&quot;&gt;Step 3 — Find the binary and confirm the process storm&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; aux &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; edge&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Revealed EdgeUpdater running from a versioned path under &lt;code&gt;~/Library/Application Support/Microsoft/EdgeUpdater/&lt;/code&gt;, with multiple concurrent instances — &lt;code&gt;--wake&lt;/code&gt;, &lt;code&gt;--server&lt;/code&gt;, &lt;code&gt;--install&lt;/code&gt; — all spawning in a tight loop. Each one hitting TCC, each one triggering a popup.&lt;/p&gt;
&lt;h3 id=&quot;step-4-extract-the-code-requirement&quot; tabindex=&quot;-1&quot;&gt;Step 4 — Extract the code requirement&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;codesign &lt;span class=&quot;token parameter variable&quot;&gt;-dr&lt;/span&gt; - ~/Library/Application&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt; Support/Microsoft/EdgeUpdater/149.0.4019.0/EdgeUpdater.app &lt;span class=&quot;token operator&quot;&gt;&lt;span class=&quot;token file-descriptor important&quot;&gt;2&lt;/span&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token file-descriptor important&quot;&gt;&amp;amp;1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;designated =&amp;gt; identifier &amp;quot;com.microsoft.EdgeUpdater&amp;quot; and anchor apple generic and 
certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and 
certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and 
certificate leaf[subject.OU] = UBF8T346G9
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;UBF8T346G9&lt;/code&gt; is Microsoft&#39;s Apple Developer Team ID. This is the designated requirement string needed for the PPPC payload — without it, the policy can&#39;t cryptographically verify the binary identity.&lt;/p&gt;
&lt;h3 id=&quot;step-5-catch-it-live-with-the-tcc-log-stream&quot; tabindex=&quot;-1&quot;&gt;Step 5 — Catch it live with the TCC log stream&lt;/h3&gt;
&lt;p&gt;To observe TCC decisions in real time, the key is filtering on &lt;code&gt;tccd&lt;/code&gt; — the TCC daemon that makes and logs all decisions — not on the requesting process itself. EdgeUpdater triggers the check, but the log entries are written by &lt;code&gt;tccd&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;log stream &lt;span class=&quot;token parameter variable&quot;&gt;--predicate&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;subsystem == &quot;com.apple.TCC&quot; AND composedMessage CONTAINS &quot;EdgeUpdater&quot;&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--info&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This captured two distinct access requests firing simultaneously when the popup appeared:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Request 1 — Full Disk Access (silent denial):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Handling access request to kTCCServiceSystemPolicyAllFiles
ReqResult(Auth Right: Denied (Service Policy), promptType: 1, DB Action: None)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Denied by MDM policy before any prompt is shown. &lt;code&gt;DB Action: None&lt;/code&gt; means it didn&#39;t even write to the TCC database — the policy short-circuits evaluation entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Request 2 — App Data (generates the popup):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Handling access request to kTCCServiceSystemPolicyAppData
ReqResult(Auth Right: Unknown (Service Policy), promptType: 1, DB Action: None, UpdateVerifierData)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Unknown&lt;/code&gt; means no MDM rule exists for this service, so TCC falls through to the user prompt. The purpose string macOS displays is pulled directly from the system default:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&#39;Keeping app data separate makes it easier to manage your privacy and security.&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also notable: both requests arrive via &lt;code&gt;com.apple.sandboxd&lt;/code&gt; as the requesting process, acting as a broker for the TCC check on EdgeUpdater&#39;s behalf.&lt;/p&gt;
&lt;h3 id=&quot;what-the-edgeupdater-log-confirmed&quot; tabindex=&quot;-1&quot;&gt;What the EdgeUpdater log confirmed&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;updater.log&lt;/code&gt; file at &lt;code&gt;~/Library/Application Support/Microsoft/EdgeUpdater/updater.log&lt;/code&gt; added further context:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Failed to acquire GlobalPrefs&lt;/code&gt;&lt;/strong&gt; — In my logs, it repeated every ~3 minutes through the night, confirming FDA denial was blocking inter-process coordination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CloudPolicyOverridesPlatformPolicy=1&lt;/code&gt;&lt;/strong&gt; — Intune cloud policy is set to override local platform policy, which is why the MDM denial wins unconditionally&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two EdgeUpdater versions in conflict&lt;/strong&gt; — v147 (bundled inside Edge 148) and v149 were both trying to register simultaneously, compounding the lock failure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ECS fetch disabled by policy&lt;/code&gt;&lt;/strong&gt; — Edge Configuration Service fetching is disabled by an Intune policy, expected in a managed environment&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-root-cause&quot; tabindex=&quot;-1&quot;&gt;The Root Cause&lt;/h2&gt;
&lt;p&gt;This is where it gets interesting. The issue occurred in a lab tenant with &lt;strong&gt;no explicit PPPC profile restricting Full Disk Access&lt;/strong&gt; — no allowlist, no deny rules, nothing targeting EdgeUpdater. Yet the TCC database still showed &lt;code&gt;auth_reason=5&lt;/code&gt; (MDM policy) with &lt;code&gt;auth_value=0&lt;/code&gt; (denied). But the same issue also surfaces in tenants where restrictive PPPC profiles &lt;em&gt;are&lt;/em&gt; applied. Did Microsoft pull an oopsie with Edge?&lt;/p&gt;
&lt;p&gt;One probable explanation is that macOS applies a default-deny MDM posture for certain TCC services on enrolled devices, even without an explicit administrator-configured restriction — meaning the absence of an explicit allow rule may be treated as an implicit deny with MDM authority, rather than falling through to the standard user consent flow. This would explain the clean-tenant behaviour, but it&#39;s an inference rather than something Apple formally documents.&lt;/p&gt;
&lt;p&gt;What we can say with confidence is that the fix is the same regardless of which path led here: EdgeUpdater needs to be explicitly allowed, and the absence of a deny rule is not sufficient. Whether that&#39;s because your PPPC profile doesn&#39;t list it, or because MDM enrollment alone triggers the governed posture, the end state is identical — &lt;code&gt;auth_reason=5&lt;/code&gt;, popup storm, clicking Allow does nothing.&lt;/p&gt;
&lt;p&gt;EdgeUpdater doesn&#39;t live in &lt;code&gt;/Applications&lt;/code&gt; and isn&#39;t visible in the standard Privacy &amp;amp; Security UI until it&#39;s already tried (and failed) to get access. It installs itself into the user&#39;s Library under a versioned path, and Microsoft bundles a copy of it inside the Edge app bundle itself as a bootstrapper. There&#39;s no obvious signal that a PPPC entry is needed until users start reporting the popup — and Microsoft&#39;s own Intune deployment documentation doesn&#39;t mention it.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-fix&quot; tabindex=&quot;-1&quot;&gt;The Fix&lt;/h2&gt;
&lt;h3 id=&quot;1-add-edgeupdater-with-mobileconfig&quot; tabindex=&quot;-1&quot;&gt;1. Add EdgeUpdater with mobileconfig&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;SystemPolicyAllFiles&lt;/code&gt; (Full Disk Access) is the only entry required.&lt;/strong&gt; Testing on a device with the FDA PPPC entry applied confirmed no popup appeared, and the TCC log stream showed every FDA request hitting &lt;code&gt;Auth:Allowed (MDM Policy)&lt;/code&gt; — with EdgeUpdater successfully completing version arbitration and cleaning up the older version folder on its own.&lt;/p&gt;
&lt;p&gt;If you deploy PPPC policies with a .mobileconfig or other means, add the following lines under &lt;code&gt;SystemPolicyAllFiles&lt;/code&gt; to allow EdgeUpdater and remove the pop ups.:&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyAllFiles&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.EdgeUpdater&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Comment&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Microsoft EdgeUpdater - Full Disk Access&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.EdgeUpdater&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use &lt;code&gt;bundleID&lt;/code&gt; as the identifier type rather than a path — EdgeUpdater installs under a versioned path that changes with every update, so a path-based identifier would break on each upgrade. Note that this applies whether EdgeUpdater is installed at system scope (&lt;code&gt;/Library/&lt;/code&gt;) or user scope (&lt;code&gt;~/Library/&lt;/code&gt;) — the bundle ID and code requirement are identical in both cases.&lt;/p&gt;
&lt;h3 id=&quot;2-add-edgeupdater-with-intune-template&quot; tabindex=&quot;-1&quot;&gt;2. Add EdgeUpdater with Intune Template:&lt;/h3&gt;
&lt;p&gt;If you deploy PPPC via the &lt;strong&gt;Device Restrictions&lt;/strong&gt; template in Intune rather than a custom mobileconfig, configure the template as follow:
&lt;strong&gt;Name&lt;/strong&gt;: EdgeUpdater &lt;br /&gt;
&lt;strong&gt;IdentifierType&lt;/strong&gt;: BundleID &lt;br /&gt;
&lt;strong&gt;Identifier&lt;/strong&gt;: &lt;code&gt;com.microsoft.EdgeUpdater&lt;/code&gt; &lt;br /&gt;
&lt;strong&gt;Code Requirement:&lt;/strong&gt; &lt;code&gt;identifier &amp;quot;com.microsoft.EdgeUpdater&amp;quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;/code&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;And then set &lt;strong&gt;Full disk access&lt;/strong&gt; to &lt;code&gt;Allow&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-11-Intune-edgeUpdater.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;bonus-a-note-on-psso&quot; tabindex=&quot;-1&quot;&gt;Bonus: A Note on PSSO&lt;/h2&gt;
&lt;p&gt;The updater log also showed this on every single run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Device is MDM enrolled. Checking for Microsoft Corp tenant.
No tenant ID in PSSO device cert.
Microsoft Corp tenant not found via any layer.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;EdgeUpdater actively checks whether the device is enrolled in a Microsoft Corporate tenant via Platform SSO. If you&#39;re planning to roll out PSSO with Intune — or already have it partially configured — it&#39;s worth verifying that the device certificate is correctly scoped to your tenant. This won&#39;t cause the popup issue, but it does affect EdgeUpdater&#39;s ability to use enterprise update channels and Microsoft-side management policies.&lt;/p&gt;
&lt;hr /&gt;
</content>
  </entry>
  
  <entry>
    <title>Simplified Setup for PSSO with Intune</title>
    <link href="https://ssmacadmin.com/posts/2026-05-09-Simplified-Setup-PSSO-Intune/"/>
    <updated>2026-05-09T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-05-09-Simplified-Setup-PSSO-Intune/</id>
    <content type="html">&lt;p&gt;Something I&#39;ve wanted since Platform SSO first landed in Intune and with the release of macOS Tahoe 26, we finally have it. Simplified Setup brings PSSO into the Setup Assistant itself, so the whole thing happens during first boot. No waiting for a popup on the desktop to register, no hunting through System Settings to allow access. Here&#39;s how it flows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The Mac sits in Setup Assistant and waits until Company Portal and the required config profiles have finished installing.&lt;/li&gt;
&lt;li&gt;macOS then kicks off PSSO registration automatically — no user action needed.&lt;/li&gt;
&lt;li&gt;The user signs in with their Entra ID account, and macOS creates the local account based on that identity. Already registered with PSSO from day one.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let&#39;s jump in.&lt;/p&gt;
&lt;h3 id=&quot;configuration-in-intune&quot; tabindex=&quot;-1&quot;&gt;Configuration in Intune&lt;/h3&gt;
&lt;p&gt;First we need to add one thing to the Platform SSO configuration that we deploy to the machines. If you haven&#39;t already implemented Platform SSO yet, create a new Configuration Profile with the Setting Catalog as the Profile Type. Follow the instructions on how to set up the basics from the Microsoft Learn portal how to set it up.&lt;/p&gt;
&lt;p&gt;However - this is where we add the extra delicious sauce that will make this otherwise dry feature really shine.
In the Settings Picker navigate to &lt;strong&gt;Authentication -&amp;gt; Extensible Single Sign On (SSO)&lt;/strong&gt; and find the option for &lt;strong&gt;Enable Registration During Setup&lt;/strong&gt;.
Then you need to &lt;strong&gt;Enable&lt;/strong&gt; this setting. Review and save the profile.
Settings Catalog configuration:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-EnableRegistration.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here&#39;s the other quirk - we need the &lt;strong&gt;latest Beta version of the company portal!&lt;/strong&gt; I tried a LOT with the latest version that&#39;s available from Microsoft&#39;s own download url but it &lt;strong&gt;did not work&lt;/strong&gt; (As of writing this today, 9th of May, the latest version from Microsoft is &lt;strong&gt;5.2603.0&lt;/strong&gt;). You get stuck during the Setup assistant and it will tell you it&#39;s the wrong username or password. You &lt;em&gt;&lt;strong&gt;need&lt;/strong&gt;&lt;/em&gt; the version with version number &lt;strong&gt;5.2604.0&lt;/strong&gt;. Deploy it as a Line of Business app and assign it. You can download 5.2604 from &lt;a href=&quot;https://res.public.onecdn.static.microsoft/mro1cdnstorage/4B2D7701-0A4F-49C8-B4CB-0C2D4043F51F/MacAutoupdate/CompanyPortal_5.2604.0-Upgrade.pkg&quot;&gt;&lt;strong&gt;HERE&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;enrollment-flow&quot; tabindex=&quot;-1&quot;&gt;Enrollment flow&lt;/h3&gt;
&lt;p&gt;You will go through the enrollment with the Setup Assistant normally, with a few screens added. I&#39;ll dump some screenshots of the flow. Some quirks that need to be ironed out but it&#39;s working as intended. But I would keep this out of production until it&#39;s gotten a public release.&lt;/p&gt;
&lt;p&gt;First you start off with your language and region as usual and then prompted for the ADE that your organization will manage the device.
After the initial download of configuration and the creation of a local mac account, you will be greeted with this view:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You then log in with your Entra ID and password.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA-Login.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA-LoginPW.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Which then will start the registration of the device.
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA-DeviceRegister.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You then set up TouchID and other optional steps if it&#39;s enabled in your enrollment profile. Once that&#39;s done, you&#39;ll see the following prompt, click Continue and follow the log in prompts/MFA when asked.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA-EnablePSSO.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-PSSO-SA-EnablePSSO-MFA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once done, your device is now fully prepared for Platform SSO, users don&#39;t need to do anything else on the device regarding SSO and can instantly log on to Outlook, Teams, Edge, etc.&lt;/p&gt;
&lt;p&gt;We can also verify it after enrollment that the user account is PSSO enabled from &lt;strong&gt;System Settings -&amp;gt; Users &amp;amp; Groups&lt;/strong&gt; or run the &lt;code&gt;app-sso platform -s&lt;/code&gt; command in the terminal to verify everything is correct.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-UserSettings.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-05-09-TerminalVerification.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Happy labbin&#39;!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>macOS Firewall in Intune: The Compliance Policy Enforcement Trap</title>
    <link href="https://ssmacadmin.com/posts/2026-04-29-macos-firewall/"/>
    <updated>2026-04-29T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-04-29-macos-firewall/</id>
    <content type="html">&lt;h2 id=&quot;introduction&quot; tabindex=&quot;-1&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The macOS Application Firewall looks simple in the Intune admin portal. A few toggles, some bundle ID fields, a compliance checkbox. Many admins assume the mental model is straightforward: Configuration Profiles configure things, Compliance Policies check things. Set them both up, and you are good to go.&lt;/p&gt;
&lt;p&gt;But time and time again, I see threads on reddit or in Discord channels where it appears the fire is really tearing down the wall - &amp;quot;Why can&#39;t I transfer facetime calls?&amp;quot;, &amp;quot;The users can&#39;t use sidecar with their iPads&amp;quot; or that some other service can&#39;t communicate with the device.&lt;/p&gt;
&lt;p&gt;So here I am giving it a shot to to tell you that the mental model is wrong — and in the specific case of macOS firewall settings, the gap between assumption and reality is wide enough to completely break your security design without leaving a single error message anywhere in the portal.&lt;/p&gt;
&lt;p&gt;This post goes deep on three things that are consistently misunderstood:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What &lt;code&gt;Block all incoming connections&lt;/code&gt; actually does to the macOS Application Firewall at the OS layer — and why it makes your allow-list irrelevant&lt;/li&gt;
&lt;li&gt;Why Intune Compliance Policies do not just &lt;em&gt;check&lt;/em&gt; firewall state — they &lt;em&gt;enforce&lt;/em&gt; it — and exactly what that means for your Configuration Profiles&lt;/li&gt;
&lt;li&gt;How to design a firewall policy in Intune that works as intended, verified at the command line&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-1-the-macos-application-firewall-what-it-actually-is&quot; tabindex=&quot;-1&quot;&gt;Part 1: The macOS Application Firewall — What It Actually Is&lt;/h2&gt;
&lt;p&gt;Before touching Intune, you need a solid mental model of the macOS Application Firewall itself, because the confusion in Intune directly mirrors confusion about how the OS works.&lt;/p&gt;
&lt;h3 id=&quot;two-firewalls-in-macos&quot; tabindex=&quot;-1&quot;&gt;Two firewalls in macOS&lt;/h3&gt;
&lt;p&gt;macOS actually ships with two completely separate firewall subsystems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;socketfilterfw&lt;/code&gt;&lt;/strong&gt; — the Application Firewall. This is what Intune manages. It operates at layer 7 (application layer) and controls whether individual applications can receive incoming connections.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;pf&lt;/code&gt; (Packet Filter)&lt;/strong&gt; — the BSD-level network firewall inherited from OpenBSD. This operates at layer 3/4 (network/transport layer) and is not managed by Intune or the standard macOS firewall UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything in this post is about &lt;code&gt;socketfilterfw&lt;/code&gt;. When the Intune firewall profile or the System Settings &amp;quot;Firewall&amp;quot; toggle is involved, that is the subsystem you are interacting with.&lt;/p&gt;
&lt;h3 id=&quot;two-operational-modes-in-socketfilterfw&quot; tabindex=&quot;-1&quot;&gt;Two operational modes in socketfilterfw&lt;/h3&gt;
&lt;p&gt;This is the most important thing to understand, and the thing that almost every write-up on macOS firewall in Intune gets wrong by omission.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;socketfilterfw&lt;/code&gt; operates in one of two fundamentally different modes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mode 1 — Rule-based (block-all = OFF)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The firewall is active and evaluates incoming connection attempts against a per-application rule table. Each app either has an explicit Allow or Block rule, or defaults to prompting the user. This is where your bundle ID allow/block list lives and where it is evaluated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mode 2 — Block-all (block-all = ON)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The firewall ignores the per-application rule table entirely for inbound connection decisions. It short-circuits to &amp;quot;deny&amp;quot; before any rule lookup happens. Your allow-list is still stored — it has not been deleted — but it is never consulted. The state transitions look like this in the &lt;code&gt;socketfilterfw&lt;/code&gt; binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--setblockall on   → Block-all mode  (rule table ignored for inbound)
--setblockall off  → Rule-based mode (rule table evaluated for inbound)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is not a matter of priority or precedence. When &lt;code&gt;block-all&lt;/code&gt; is active, the firewall is operating in a categorically different way. Think of it like disabling AV real-time scanning: your AV rules still exist, but the engine that evaluates them is off.&lt;/p&gt;
&lt;h3 id=&quot;what-block-all-incoming-connections-actually-allows-through&quot; tabindex=&quot;-1&quot;&gt;What Block All Incoming Connections actually allows through&lt;/h3&gt;
&lt;p&gt;Even in block-all mode, macOS keeps a handful of essential network services alive. Specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DHCP&lt;/strong&gt; — so the device can obtain/renew an IP address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bonjour / mDNS&lt;/strong&gt; — so local service discovery works&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPSec&lt;/strong&gt; — so VPN tunnels using IPSec can be established&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything else — screen sharing, remote management, AirDrop, Apple Remote Desktop, file sharing, and any listening socket your VPN client or remote support tool might need — is blocked. No exceptions. No way to create exceptions while this mode is active.&lt;/p&gt;
&lt;h3 id=&quot;verifying-firewall-state-at-the-command-line&quot; tabindex=&quot;-1&quot;&gt;Verifying firewall state at the command line&lt;/h3&gt;
&lt;p&gt;This is something every Mac admin should have in their toolkit. The definitive way to check what the Application Firewall is actually doing on a device — regardless of what the portal says — is:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token parameter variable&quot;&gt;--getglobalstate&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token parameter variable&quot;&gt;--getblockall&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token parameter variable&quot;&gt;--getallowsigned&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token parameter variable&quot;&gt;--getstealthmode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sample output on a device in block-all mode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Firewall is enabled. (State = 1)
Block all ENABLED
Automatically allow signed built-in software ENABLED
Automatically allow downloaded signed software DISABLED
Stealth mode ENABLED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;Block all ENABLED&lt;/code&gt; is the output, your allow-list is irrelevant until you change that. You can also dump the full app-level rule table to confirm your bundle ID rules are present (but not being evaluated):&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token parameter variable&quot;&gt;--listapps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command is the ground truth. Not the Intune portal. Not a profile deployment status page. Run this on the device.&lt;/p&gt;
&lt;h3 id=&quot;the-macos-sequoia-change-you-need-to-know-about&quot; tabindex=&quot;-1&quot;&gt;The macOS Sequoia change you need to know about&lt;/h3&gt;
&lt;p&gt;Starting with macOS 15 (Sequoia), Apple made a significant change: &lt;strong&gt;Application Firewall settings are no longer stored in &lt;code&gt;/Library/Preferences/com.apple.alf.plist&lt;/code&gt;&lt;/strong&gt;. If you have any scripts, tools, or monitoring workflows that read or write to that plist directly, they will stop working. The canonical interface is now &lt;code&gt;socketfilterfw&lt;/code&gt; exclusively. Apple also deprecated the &lt;code&gt;EnableLogging&lt;/code&gt; and &lt;code&gt;LoggingOption&lt;/code&gt; keys in the Firewall MDM payload, as application firewall logging is now enabled by default for the &lt;code&gt;socketfilterfw&lt;/code&gt; process.&lt;/p&gt;
&lt;p&gt;If your firewall compliance scripts or configuration validators read &lt;code&gt;com.apple.alf.plist&lt;/code&gt;, audit and update them now.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-2-the-intune-policy-landscape-where-things-can-go-wrong&quot; tabindex=&quot;-1&quot;&gt;Part 2: The Intune Policy Landscape — Where Things Can Go Wrong&lt;/h2&gt;
&lt;h3 id=&quot;three-places-in-intune-where-you-can-touch-the-firewall&quot; tabindex=&quot;-1&quot;&gt;Three places in Intune where you can touch the firewall&lt;/h3&gt;
&lt;p&gt;Administrators can interact with macOS firewall settings from three different surfaces in the Intune admin center:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Configuration Profile → Endpoint Protection template&lt;/strong&gt;
Path: &lt;code&gt;Devices &amp;gt; Configuration &amp;gt; Create &amp;gt; macOS &amp;gt; Endpoint Protection&lt;/code&gt;
Payload deployed: &lt;code&gt;com.apple.security.firewall&lt;/code&gt;
Capabilities: Full control — enable/disable firewall, block-all toggle, stealth mode, per-app allow/block rules via bundle ID&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Settings Catalog&lt;/strong&gt;
Path: &lt;code&gt;Devices &amp;gt; Configuration &amp;gt; Create &amp;gt; macOS &amp;gt; Settings Catalog → Firewall&lt;/code&gt;
Payload deployed: &lt;code&gt;com.apple.security.firewall&lt;/code&gt;
Capabilities: Same as above, with more granular key-level control including &lt;code&gt;Automatically allow built-in software&lt;/code&gt; and &lt;code&gt;Automatically allow downloaded signed software&lt;/code&gt; (macOS 12.3+)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Compliance Policy → Device Security&lt;/strong&gt;
Path: &lt;code&gt;Devices &amp;gt; Compliance &amp;gt; Create policy &amp;gt; macOS → System Security → Device Security&lt;/code&gt;
Settings available: Firewall enabled/disabled, Block all incoming connections, Stealth mode&lt;/p&gt;
&lt;p&gt;The critical difference between surfaces 1/2 and surface 3 is not visible in the UI — and that invisibility is the root cause of most firewall misconfiguration stories in the Mac admin community.&lt;/p&gt;
&lt;h3 id=&quot;the-payload-comapplesecurityfirewall&quot; tabindex=&quot;-1&quot;&gt;The payload: com.apple.security.firewall&lt;/h3&gt;
&lt;p&gt;All three surfaces ultimately interact with the same Apple MDM payload type. According to Apple&#39;s platform deployment documentation, the &lt;code&gt;com.apple.security.firewall&lt;/code&gt; payload:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Has payload identifier &lt;code&gt;com.apple.security.firewall&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Supports macOS device channel&lt;/li&gt;
&lt;li&gt;Supports Device Enrollment and Automated Device Enrollment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allows duplicates: True&lt;/strong&gt; — more than one Firewall payload can be delivered to a device simultaneously&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last point — duplicates allowed — is architecturally significant and we will come back to it.&lt;/p&gt;
&lt;h3 id=&quot;what-happens-when-two-firewall-payloads-are-installed&quot; tabindex=&quot;-1&quot;&gt;What happens when two Firewall payloads are installed&lt;/h3&gt;
&lt;p&gt;When multiple &lt;code&gt;com.apple.security.firewall&lt;/code&gt; payloads are installed on a Mac simultaneously (which is possible and happens in practice when both a Configuration Profile and a Compliance Policy address firewall settings), macOS processes both. The question is: how does it resolve conflicting values?&lt;/p&gt;
&lt;p&gt;Apple&#39;s general documented behavior for duplicate payloads is that they are matched by &lt;code&gt;PayloadUUID&lt;/code&gt;. If two payloads have different UUIDs (which a Configuration Profile and a Compliance Policy remediation payload will), they are treated as independent, additive payloads. For security-related boolean settings like &lt;code&gt;BlockAllIncoming&lt;/code&gt;, &lt;strong&gt;the most restrictive value across all installed profiles wins&lt;/strong&gt;. If any installed profile has &lt;code&gt;BlockAllIncoming = true&lt;/code&gt;, block-all mode is active — regardless of what another profile says.&lt;/p&gt;
&lt;p&gt;This is not a Compliance Policy &amp;quot;overriding&amp;quot; the Configuration Profile in a strict policy hierarchy sense. It is Apple&#39;s firewall logic taking the most restrictive applicable setting across all installed profiles. The practical result is the same, but understanding the mechanism matters for troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-3-why-compliance-policies-are-not-read-only&quot; tabindex=&quot;-1&quot;&gt;Part 3: Why Compliance Policies Are Not Read-Only&lt;/h2&gt;
&lt;p&gt;This is the question that trips up Intune admins and causes confusion beyond belief: why does a Compliance Policy &lt;em&gt;change&lt;/em&gt; the firewall setting instead of just &lt;em&gt;checking&lt;/em&gt; it?&lt;/p&gt;
&lt;h3 id=&quot;the-conceptual-model-vs-reality&quot; tabindex=&quot;-1&quot;&gt;The conceptual model vs. reality&lt;/h3&gt;
&lt;p&gt;The expected model in most device management systems:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Configuration Policies  →  actively configure device state
Compliance Policies     →  passively read and evaluate device state
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice in Intune, this model does not hold for macOS firewall settings. Microsoft&#39;s own documentation states it directly: &lt;strong&gt;&amp;quot;Compliance policies verify the device settings you configure and can remediate some settings that aren&#39;t compliant.&amp;quot;&lt;/strong&gt; And further: &lt;strong&gt;&amp;quot;If there are configuration settings that conflict between compliance policies and other policies, then the compliance policy takes precedence.&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is not ambiguous. Compliance Policies in Intune are not passive observers for all settings. For certain settings — macOS firewall included — they are enforcement agents.&lt;/p&gt;
&lt;h3 id=&quot;the-remediation-mechanism&quot; tabindex=&quot;-1&quot;&gt;The remediation mechanism&lt;/h3&gt;
&lt;p&gt;When Intune evaluates a macOS device against a Compliance Policy and finds that &lt;code&gt;Block all incoming connections&lt;/code&gt; is required but not active, the Intune management agent does not simply mark the device non-compliant and wait for user action. For this class of settings, it pushes a &lt;code&gt;com.apple.security.firewall&lt;/code&gt; payload to bring the device into the required state.&lt;/p&gt;
&lt;p&gt;This means the sequence on the device is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configuration Profile is installed during enrollment → deploys &lt;code&gt;com.apple.security.firewall&lt;/code&gt; with &lt;code&gt;BlockAllIncoming = false&lt;/code&gt; and an allow-list&lt;/li&gt;
&lt;li&gt;Compliance Policy evaluates device → finds &lt;code&gt;BlockAllIncoming = false&lt;/code&gt; when it requires &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Intune pushes a compliance remediation payload → &lt;code&gt;com.apple.security.firewall&lt;/code&gt; with &lt;code&gt;BlockAllIncoming = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Both payloads are now installed simultaneously&lt;/li&gt;
&lt;li&gt;macOS resolves the conflict → most restrictive value wins → block-all mode active&lt;/li&gt;
&lt;li&gt;Your allow-list is now irrelevant at the OS layer&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Step 6 happens silently. The Intune portal will show the Configuration Profile as successfully deployed. The firewall profile&#39;s per-app rules will appear correctly configured. Nothing shows as an error. Apps just stop being able to receive inbound connections.&lt;/p&gt;
&lt;h3 id=&quot;why-some-settings-remediate-and-others-do-not&quot; tabindex=&quot;-1&quot;&gt;Why some settings remediate and others do not&lt;/h3&gt;
&lt;p&gt;A useful contrast: OS version requirements in a Compliance Policy do not remediate. If you require macOS 14.0 and a device is running 13.7, Intune marks the device non-compliant and that is it. It does not push a software update — it cannot. That setting is genuinely read-only in compliance.&lt;/p&gt;
&lt;p&gt;Firewall settings are different. Because Intune &lt;em&gt;can&lt;/em&gt; push the required state via MDM payload, it does. This is a product design decision by Microsoft — they chose to make certain security posture settings auto-remediating in compliance rather than purely evaluative. The firewall is in that category.&lt;/p&gt;
&lt;h3 id=&quot;why-this-is-not-well-documented&quot; tabindex=&quot;-1&quot;&gt;Why this is not well documented&lt;/h3&gt;
&lt;p&gt;Frankly, the Intune documentation at the policy-level is sparse on this distinction. The Learn docs page for macOS Compliance settings uses language like &amp;quot;Block — Block all incoming network connections&amp;quot; in the firewall section without explicitly flagging that this will push enforcement, not just evaluate. The key phrase is buried in the general macOS getting started guide, not in the compliance settings reference. Most admins only discover this behavior after troubleshooting broken remote support tools or VPN connections post-policy deployment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-4-designing-a-firewall-policy-that-works-as-intended&quot; tabindex=&quot;-1&quot;&gt;Part 4: Designing a Firewall Policy That Works as Intended&lt;/h2&gt;
&lt;p&gt;With the above as background, the design choices become clear. There are two coherent models, and exactly one incoherent one that is unfortunately easy to accidentally configure.&lt;/p&gt;
&lt;h3 id=&quot;model-a-controlled-allow-list-recommended-for-most-environments&quot; tabindex=&quot;-1&quot;&gt;Model A: Controlled Allow-List (Recommended for Most Environments)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Firewall is active, all unsolicited inbound connections are blocked by default, but specific applications can receive inbound connections via an explicit allow-list.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration Profile (Settings Catalog or Endpoint Protection template):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enable Firewall&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block all incoming connections&lt;/td&gt;
&lt;td&gt;Not configured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatically allow built-in software&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatically allow downloaded signed software&lt;/td&gt;
&lt;td&gt;No (review per environment)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable stealth mode&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apps allowed (bundle IDs)&lt;/td&gt;
&lt;td&gt;&lt;em&gt;your allow-list here&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Compliance Policy → Device Security:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Firewall&lt;/td&gt;
&lt;td&gt;Enable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incoming Connections&lt;/td&gt;
&lt;td&gt;Not configured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stealth mode&lt;/td&gt;
&lt;td&gt;Not configured&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The key is the Compliance Policy: set Firewall to &lt;code&gt;Enable&lt;/code&gt; so you get the compliance check that the firewall is on, but leave &lt;code&gt;Incoming Connections&lt;/code&gt; and &lt;code&gt;Stealth mode&lt;/code&gt; at &lt;code&gt;Not configured&lt;/code&gt;. This avoids the compliance policy pushing any &lt;code&gt;BlockAllIncoming&lt;/code&gt; payload that would conflict with your Configuration Profile&#39;s allow-list model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify on device:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token parameter variable&quot;&gt;--getblockall&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Expected: Firewall has block all state set to disabled.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token parameter variable&quot;&gt;--listapps&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Expected: Your allowed bundle IDs listed with ALLOW rules&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Settings Catalog configuration:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-04-29_Firewall-Settings.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Compliance Policy Configuration:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-04-29_Firewall-Compliance.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Results on device:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-04-29_Firewall-Status.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;model-b-maximum-inbound-restriction-high-security-air-gapped-posture&quot; tabindex=&quot;-1&quot;&gt;Model B: Maximum Inbound Restriction (High-Security / Air-Gapped Posture)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; All unsolicited inbound connections blocked, no exceptions. Appropriate for high-security endpoints where remote management tools and sharing services are not used.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration Profile:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enable Firewall&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block all incoming connections&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable stealth mode&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Compliance Policy → Device Security:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Firewall&lt;/td&gt;
&lt;td&gt;Enable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incoming Connections&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stealth mode&lt;/td&gt;
&lt;td&gt;Enable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In this model, both policies are aligned. There is no allow-list — because you understand that no allow-list will be evaluated while block-all is active. This model is appropriate for endpoints that are not managed via screen sharing or remote MDM tools that require inbound connections, and where the device posture requirement is strict.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify on device:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token parameter variable&quot;&gt;--getblockall&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Expected: Firewall is blocking all non-essential incoming connections.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;the-incoherent-model-what-to-avoid&quot; tabindex=&quot;-1&quot;&gt;The Incoherent Model — What to Avoid&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Configuration Profile:&lt;/strong&gt; Firewall enabled, Block all incoming = &lt;strong&gt;No&lt;/strong&gt;, allow-list defined with remote support tool bundle IDs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compliance Policy:&lt;/strong&gt; Firewall = Enable, Incoming Connections = &lt;strong&gt;Block&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the trap. It looks intentional in the portal — you appear to have a nuanced Configuration Profile with a proper allow-list, and a Compliance Policy enforcing a required baseline. In reality, the Compliance Policy&#39;s &lt;code&gt;Block&lt;/code&gt; setting pushes a &lt;code&gt;BlockAllIncoming = true&lt;/code&gt; payload that makes your allow-list irrelevant. Your remote support tool cannot receive inbound connections. Screen sharing is broken. Nothing in the portal indicates a conflict.&lt;/p&gt;
&lt;p&gt;The diagnostic command tells you immediately:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;/usr/libexec/ApplicationFirewall/socketfilterfw &lt;span class=&quot;token parameter variable&quot;&gt;--getblockall&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Actual output: Block all ENABLED   ← not what your config profile says&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-5-practical-allow-list-reference&quot; tabindex=&quot;-1&quot;&gt;Part 5: Practical Allow-List Reference&lt;/h2&gt;
&lt;p&gt;When you are running Model A and need to build an allow-list, keep it minimal. Here are the bundle IDs most commonly needed in enterprise Mac environments:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remote support and management:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Application&lt;/th&gt;
&lt;th&gt;Bundle ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Remote Desktop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.microsoft.rdc.macos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TeamViewer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.teamviewer.TeamViewer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AnyDesk&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.philandro.anydesk&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zoom (host/remote control)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;us.zoom.xos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;VPN clients:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Application&lt;/th&gt;
&lt;th&gt;Bundle ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cisco AnyConnect&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.cisco.anyconnect.gui&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GlobalProtect&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.paloaltonetworks.GlobalProtect.client&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zscaler Client Connector&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.zscaler.tray&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Developer tooling (scope to dev device groups only):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Application&lt;/th&gt;
&lt;th&gt;Bundle ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Docker Desktop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.docker.docker&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Finding bundle IDs for unlisted apps:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;osascript &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;id of app &quot;AppName&quot;&#39;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Or:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;mdls &lt;span class=&quot;token parameter variable&quot;&gt;-name&lt;/span&gt; kMDItemCFBundleIdentifier /Applications/AppName.app&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A few important notes on allow-list accuracy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bundle ID errors are silent.&lt;/strong&gt; If you enter an incorrect bundle ID, the rule is installed but never matches any process. Nothing in the portal flags this. Verify bundle IDs from the device itself using the commands above, not from the internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code-signed apps may not need explicit rules.&lt;/strong&gt; &lt;code&gt;Automatically allow built-in software&lt;/code&gt; and &lt;code&gt;Automatically allow downloaded signed software&lt;/code&gt; in the Settings Catalog cover a lot of standard Apple and enterprise apps. Explicitly listing apps via bundle ID is most important for apps that are either unsigned, have non-standard signing, or where you need explicit control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The allow-list is app-level, not port-level.&lt;/strong&gt; If you need to control specific ports or protocols, that requires &lt;code&gt;pf&lt;/code&gt; (the BSD packet filter), which is outside the scope of the Intune Firewall profile.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;summary-key-takeaways&quot; tabindex=&quot;-1&quot;&gt;Summary: Key Takeaways&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;On the macOS Application Firewall:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;socketfilterfw&lt;/code&gt; has two modes: rule-based and block-all. These are not degrees of the same thing — they are categorically different operating states.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Block all incoming connections = true&lt;/code&gt; disables per-app rule evaluation entirely. Your allow-list still exists on the device; it is simply not consulted.&lt;/li&gt;
&lt;li&gt;Ground truth for firewall state is &lt;code&gt;socketfilterfw --getblockall&lt;/code&gt; on the device, not the Intune portal.&lt;/li&gt;
&lt;li&gt;macOS 15 (Sequoia) deprecated &lt;code&gt;com.apple.alf.plist&lt;/code&gt;. Audit any scripts reading that file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;On Intune Compliance Policies:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compliance Policies for macOS firewall settings are not read-only. Microsoft explicitly documents that they can remediate settings, and that compliance takes precedence over configuration policies when there is a conflict.&lt;/li&gt;
&lt;li&gt;The mechanism is payload delivery: Intune pushes a &lt;code&gt;com.apple.security.firewall&lt;/code&gt; MDM payload as remediation, not a separate enforcement channel.&lt;/li&gt;
&lt;li&gt;When a Compliance Policy sets &lt;code&gt;Block all incoming connections = Block&lt;/code&gt;, it installs a payload alongside any existing firewall Configuration Profile. macOS resolves the conflict by taking the most restrictive value across all installed payloads.&lt;/li&gt;
&lt;li&gt;This happens silently. Both the Configuration Profile and Compliance Policy appear successfully deployed in the portal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;On policy design:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choose one model and be consistent between Configuration Profile and Compliance Policy.&lt;/li&gt;
&lt;li&gt;For allow-list model: keep &lt;code&gt;Incoming Connections&lt;/code&gt; at &lt;code&gt;Not configured&lt;/code&gt; in the Compliance Policy.&lt;/li&gt;
&lt;li&gt;For block-all model: accept that no exceptions exist and design your management workflows around that constraint.&lt;/li&gt;
&lt;li&gt;Community recommendation and practical guidance from practitioners is to leave firewall settings in the Compliance Policy at &lt;code&gt;Not configured&lt;/code&gt; and manage firewall state exclusively through Configuration Profiles or the Settings Catalog, unless your organisation explicitly wants compliance-driven enforcement.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;further-reading&quot; tabindex=&quot;-1&quot;&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://support.apple.com/guide/deployment/firewall-payload-settings-dep8d306275f/web&quot;&gt;Apple Platform Deployment — Firewall payload settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.apple.com/documentation/devicemanagement/firewall&quot;&gt;Apple Developer Documentation — Firewall payload keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/intune/intune-service/protect/compliance-policy-create-mac-os&quot;&gt;Microsoft Learn — macOS compliance policy settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/intune/intune-service/protect/endpoint-protection-macos&quot;&gt;Microsoft Learn — Configure endpoint protection on macOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/intune/solutions/end-to-end-guides/macos-endpoints-get-started&quot;&gt;Microsoft Learn — Get started with macOS endpoints in Intune&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
</content>
  </entry>
  
  <entry>
    <title>DDM, Intune and You</title>
    <link href="https://ssmacadmin.com/posts/2026-03-31-DDM-Intune-And-You/"/>
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-03-31-DDM-Intune-And-You/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Last updated:&lt;/strong&gt; March 2026&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you&#39;ve been managing Apple devices in Intune for any length of time, you&#39;ve probably noticed new DDM-related settings appearing in the Settings Catalog over the past couple of years. Maybe you&#39;ve configured managed software updates and wondered what was actually happening under the hood. Or perhaps you just got the memo that MDM-based software update commands are deprecated in Apple OS 26 and you need to figure out what that means for your organisation.&lt;/p&gt;
&lt;p&gt;This post covers everything — how DDM works architecturally, what settings are available today, how to configure them in Intune, what works on BYOD versus supervised devices, and where Apple is heading with all of this. It&#39;s a long one, so use the headings to jump to what you need.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;table-of-contents&quot; tabindex=&quot;-1&quot;&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#1-why-ddm-matters-right-now&quot;&gt;Why DDM matters right now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#2-how-ddm-works-the-architecture&quot;&gt;How DDM works — the architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#3-the-three-pillars-of-ddm&quot;&gt;The three pillars of DDM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#4-declaration-types-explained&quot;&gt;Declaration types explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#5-what-ddm-settings-exist-today&quot;&gt;What DDM settings exist today&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#6-platform-and-os-version-support-matrix&quot;&gt;Platform and OS version support matrix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#7-byod-vs-supervised-what-actually-works&quot;&gt;BYOD vs. Supervised — what actually works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#8-how-to-configure-ddm-in-intune&quot;&gt;How to configure DDM in Intune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#9-ddm-and-legacy-profiles-coexistence-and-conflict&quot;&gt;DDM and legacy profiles — coexistence and conflict&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#10-troubleshooting-ddm-on-device&quot;&gt;Troubleshooting DDM on-device&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssmacadmin.com/#11-whats-coming-next&quot;&gt;What&#39;s coming next&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-why-ddm-matters-right-now&quot; tabindex=&quot;-1&quot;&gt;1. Why DDM matters right now&lt;/h2&gt;
&lt;p&gt;DDM has been in Apple&#39;s device management protocol since WWDC 2021, but for a long time it was easy to treat it as an &amp;quot;eventually&amp;quot; problem — something to pay attention to when your MDM vendor got around to supporting it. That window is now closed.&lt;/p&gt;
&lt;p&gt;At WWDC 2025, Apple announced that &lt;strong&gt;MDM-based software update commands are deprecated&lt;/strong&gt; in Apple OS 26. This means the legacy &lt;code&gt;ScheduleOSUpdate&lt;/code&gt; and &lt;code&gt;OSUpdateStatus&lt;/code&gt; MDM commands — the ones Intune has relied on to push iOS, iPadOS, and macOS updates — are going away on devices running iOS 26, iPadOS 26, and macOS Tahoe and later. If your organisation hasn&#39;t migrated software update management to DDM, you will lose the ability to enforce OS updates on those devices.&lt;/p&gt;
&lt;p&gt;Microsoft responded quickly. Intune&#39;s August 2025 release added real-time DDM-based software update reporting, and the guidance from the Intune product team is unambiguous: migrate now, not later.&lt;/p&gt;
&lt;p&gt;But software updates are just the start. Apple has explicitly stated that the focus of all future protocol development will be DDM. Legacy MDM profiles aren&#39;t disappearing overnight, but every new management capability Apple ships will land in DDM first — or exclusively. Understanding DDM is no longer optional for anyone managing Apple devices professionally.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-how-ddm-works-the-architecture&quot; tabindex=&quot;-1&quot;&gt;2. How DDM works — the architecture&lt;/h2&gt;
&lt;p&gt;To understand DDM, it helps to first understand exactly what was wrong with the traditional MDM model — because DDM was designed specifically to address those limitations.&lt;/p&gt;
&lt;h3 id=&quot;the-old-way-reactive-mdm&quot; tabindex=&quot;-1&quot;&gt;The old way: reactive MDM&lt;/h3&gt;
&lt;p&gt;Traditional MDM is a command-and-response protocol. The server sends a command (install this update, apply this profile, report your OS version), the device executes it and sends back an acknowledgment, and the server then decides what to do next. For the server to know the current state of a device, it has to ask. This creates a few real-world problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;State is always potentially stale.&lt;/strong&gt; Between polls, a user could uninstall an app, change a setting, or install a system update. The server doesn&#39;t know until the next check-in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scale is expensive.&lt;/strong&gt; Managing a fleet of 10,000 devices means 10,000 devices checking in and being polled on a schedule. The server is doing a lot of work just to maintain a current picture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline devices fall behind.&lt;/strong&gt; If a device is offline when a command is sent, it misses it. Catch-up logic adds complexity on the server side.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update enforcement is clunky.&lt;/strong&gt; The server sends an update command, polls for status, polls again, sends a reminder — it&#39;s a multi-turn conversation just to install a software update.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-new-way-declarative-ddm&quot; tabindex=&quot;-1&quot;&gt;The new way: declarative DDM&lt;/h3&gt;
&lt;p&gt;DDM flips this model. Instead of the server issuing commands and waiting for responses, the server declares the desired state — &amp;quot;this device should be running iOS 18.4, enforced by November 15th&amp;quot; — and sends that declaration to the device. The device then takes ownership of achieving and maintaining that state, entirely on its own.&lt;/p&gt;
&lt;p&gt;The key shift is where the intelligence lives. In legacy MDM, the server drives everything. In DDM, the device drives its own compliance. The server just defines what &amp;quot;compliant&amp;quot; looks like.&lt;/p&gt;
&lt;p&gt;This has several practical implications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Devices self-heal.&lt;/strong&gt; If a user somehow removes a managed configuration, the device detects the drift and re-applies it without waiting for the server to notice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Status is proactive.&lt;/strong&gt; Instead of the server asking &amp;quot;what&#39;s your OS version?&amp;quot;, the device sends a status report the moment something changes. Intune knows in near-real-time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Works offline.&lt;/strong&gt; Declarations are stored on the device. If connectivity is lost, the device continues enforcing policy. When connectivity resumes, it reports status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server load drops significantly.&lt;/strong&gt; No more polling. The server receives status updates only when something actually changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The diagram below shows these two flows side by side.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/01-mdm-vs-ddm-flow.png&quot; alt=&quot;Diagram: Legacy MDM reactive flow (left) vs DDM proactive flow (right), showing the reduction in round-trips and the addition of self-healing and proactive status reporting.&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📊 &lt;em&gt;Diagram: Legacy MDM reactive flow (left) vs DDM proactive flow (right), showing the reduction in round-trips and the addition of self-healing and proactive status reporting.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;how-ddm-is-enabled&quot; tabindex=&quot;-1&quot;&gt;How DDM is enabled&lt;/h3&gt;
&lt;p&gt;DDM doesn&#39;t replace the MDM channel — it extends it. When an MDM server (like Intune) sends a &lt;code&gt;DeclarativeManagement&lt;/code&gt; command to a device, the DDM channel is activated alongside the existing MDM channel. Both continue to function. Existing MDM profiles keep working. The device just gains a new, smarter management layer on top.&lt;/p&gt;
&lt;p&gt;You enable DDM by sending a special MDM command to the device. In practice, Intune does this automatically for eligible devices — you don&#39;t flip a switch. Once enabled, the device begins exchanging declarations and status reports with the MDM server through the DDM channel, while legacy MDM commands continue to work normally on the same device.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-the-three-pillars-of-ddm&quot; tabindex=&quot;-1&quot;&gt;3. The three pillars of DDM&lt;/h2&gt;
&lt;p&gt;Apple describes DDM as built on three foundational concepts: &lt;strong&gt;Declarations&lt;/strong&gt;, &lt;strong&gt;Status Channel&lt;/strong&gt;, and &lt;strong&gt;Extensibility&lt;/strong&gt;. These aren&#39;t marketing categories — they map directly to how the protocol actually works.&lt;/p&gt;
&lt;!-- DIAGRAM 2: Three pillars / DDM architecture — &quot;ddm_three_pillars_architecture&quot; --&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/02-ddm-three-pillars.png&quot; alt=&quot;Diagram: Intune at the top sending declarations down and receiving status reports up, with the Device container showing Pillar 1 (Declarations), Pillar 2 (Status Channel), and Pillar 3 (Extensibility).&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📊 &lt;em&gt;Diagram: Intune at the top sending declarations down and receiving status reports up, with the Device container showing Pillar 1 (Declarations), Pillar 2 (Status Channel), and Pillar 3 (Extensibility).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;declarations&quot; tabindex=&quot;-1&quot;&gt;Declarations&lt;/h3&gt;
&lt;p&gt;Declarations are the core of DDM. They are JSON objects (not PLISTs, like old-style MDM profiles) that the server sends to the device to define desired state. There are four types, covered in detail in the next section.&lt;/p&gt;
&lt;p&gt;The important thing to understand about declarations is that they are &lt;strong&gt;stateful and modular&lt;/strong&gt;. A declaration isn&#39;t a one-shot command — it represents an ongoing desired state. The device stores it locally, evaluates it against the current system state, applies it if conditions are met, and keeps it applied. If a declaration is updated on the server, only the changed parts need to be synced.&lt;/p&gt;
&lt;p&gt;Declarations are also &lt;strong&gt;composable&lt;/strong&gt;. An Activation can reference multiple Configurations. A Configuration can reference an Asset (like a certificate). The same Asset can be used by multiple Configurations. This many-to-many model means you can update a certificate in one place and every configuration that uses it automatically picks up the change.&lt;/p&gt;
&lt;h3 id=&quot;status-channel&quot; tabindex=&quot;-1&quot;&gt;Status channel&lt;/h3&gt;
&lt;p&gt;The status channel is a new communication path where the device proactively pushes information to the server. The server subscribes to specific status items — OS version, app install status, battery health, account configuration state — and receives updates whenever those items change.&lt;/p&gt;
&lt;p&gt;This replaces the polling model entirely for subscribed items. Intune knows a device has updated its OS not because it asked, but because the device told it, at the moment it happened.&lt;/p&gt;
&lt;p&gt;Status items are also the foundation for &lt;strong&gt;predicates&lt;/strong&gt; (covered below). A device can apply a declaration conditionally based on its own status — for example, only apply a configuration if the device&#39;s OS version meets a minimum requirement — without needing to consult the server.&lt;/p&gt;
&lt;h3 id=&quot;extensibility&quot; tabindex=&quot;-1&quot;&gt;Extensibility&lt;/h3&gt;
&lt;p&gt;Extensibility is baked into the DDM protocol design. New declaration types and status items can be added by Apple without breaking existing implementations. When a device receives a declaration type it doesn&#39;t understand, it reports it as unrecognised rather than failing silently or erroring out the whole channel.&lt;/p&gt;
&lt;p&gt;This means Apple can ship new DDM capabilities in new OS releases — and Intune can start using those capabilities — without needing to redesign the underlying protocol. It&#39;s why Apple described DDM as &amp;quot;designed for the present and the future&amp;quot; when they announced it.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-declaration-types-explained&quot; tabindex=&quot;-1&quot;&gt;4. Declaration types explained&lt;/h2&gt;
&lt;p&gt;There are four types of declarations. Think of them as a layered system where each type plays a specific role.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/03-declaration-types.png&quot; alt=&quot;Diagram: The four declaration types (Activations → Configurations → Assets, plus Management) with their many-to-many relationships and example use cases for each.&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📊 &lt;em&gt;Diagram: The four declaration types (Activations → Configurations → Assets, plus Management) with their many-to-many relationships and example use cases for each.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;activations&quot; tabindex=&quot;-1&quot;&gt;Activations&lt;/h3&gt;
&lt;p&gt;Activations are the deployment logic layer. They define which configurations get applied to a device, and optionally under what conditions. An Activation references one or more Configurations and can include an optional &lt;strong&gt;predicate&lt;/strong&gt; — a logical condition that must be true for the Activation to apply.&lt;/p&gt;
&lt;p&gt;Predicates can reference status items. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;Only apply this configuration if &lt;code&gt;device.os.version&lt;/code&gt; is at least 17.0&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Only apply this configuration if &lt;code&gt;device.model.family&lt;/code&gt; is iPhone&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Apply this stricter policy if the device is not at an approved network location&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This conditional logic runs &lt;strong&gt;entirely on the device&lt;/strong&gt;, without a round-trip to the server. The device evaluates the predicate against its own status, applies or withholds the referenced configurations accordingly, and reports the outcome back via the status channel.&lt;/p&gt;
&lt;h3 id=&quot;configurations&quot; tabindex=&quot;-1&quot;&gt;Configurations&lt;/h3&gt;
&lt;p&gt;Configurations are the settings layer — the equivalent of a payload in a traditional MDM profile, but delivered as a JSON object. This is where the actual management settings live: software update enforcement targets, passcode requirements, account configurations, disk management settings, and so on.&lt;/p&gt;
&lt;p&gt;One key difference from MDM profiles: a Configuration is a standalone object that can be referenced by multiple Activations. You don&#39;t have to duplicate settings across multiple profiles. Define the configuration once, reference it wherever needed.&lt;/p&gt;
&lt;h3 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;Assets&lt;/h3&gt;
&lt;p&gt;Assets are data objects that Configurations reference. Common examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X.509 certificates (for authentication, signing, or trust)&lt;/li&gt;
&lt;li&gt;User-specific data sourced from an identity provider (username, email address)&lt;/li&gt;
&lt;li&gt;Custom configuration files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The power of Assets is &lt;strong&gt;reusability and independent update&lt;/strong&gt;. If a root certificate needs to be rotated, you update the Asset on the server. Every Configuration that references that Asset picks up the change automatically — without needing to update or re-push the Configurations themselves.&lt;/p&gt;
&lt;h3 id=&quot;management-declarations&quot; tabindex=&quot;-1&quot;&gt;Management declarations&lt;/h3&gt;
&lt;p&gt;Management declarations serve two purposes. First, they can wrap &lt;strong&gt;legacy MDM configuration profiles&lt;/strong&gt; as DDM objects — this is the migration path for existing profiles. The profile itself doesn&#39;t change; it&#39;s just delivered via the DDM channel instead of the traditional MDM channel. Second, they allow setting &lt;strong&gt;custom management properties&lt;/strong&gt; — integer, string, or boolean values that can be referenced in Activation predicates as custom logic conditions.&lt;/p&gt;
&lt;p&gt;The legacy profile wrapping capability is what makes the transition to DDM gradual rather than a cliff. You can start delivering existing profiles via DDM today without rewriting any settings.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-what-ddm-settings-exist-today&quot; tabindex=&quot;-1&quot;&gt;5. What DDM settings exist today&lt;/h2&gt;
&lt;p&gt;This section covers the native DDM configuration declarations available as of early 2026. There&#39;s an important distinction to make upfront that isn&#39;t always clear in documentation:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apple&#39;s DDM schema&lt;/strong&gt; defines the full set of declarations that the protocol supports at the OS level. This is what Apple ships and what any MDM vendor &lt;em&gt;could&lt;/em&gt; implement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intune&#39;s Settings Catalog&lt;/strong&gt; is the subset of those declarations that Microsoft has actually built UI and backend support for. Not every Apple DDM declaration is available in Intune yet — some exist at the protocol level but aren&#39;t surfaced in the catalog. Microsoft adds new DDM settings with each monthly service release, so the gap narrows over time.&lt;/p&gt;
&lt;p&gt;The interactive table below maps every current DDM declaration to its Intune availability status. Click any row to expand details and the Settings Catalog path.&lt;/p&gt;
&lt;!-- DIAGRAM 6: DDM settings availability table (interactive React component) --&gt;
&lt;div x-data=&quot;ddmTable()&quot; class=&quot;not-prose font-sans text-sm&quot;&gt;
  &lt;div class=&quot;flex flex-wrap gap-2 mb-4&quot;&gt;
    &lt;template x-for=&quot;f in filters&quot; :key=&quot;f.key&quot;&gt;
      &lt;button @click=&quot;activeFilter = f.key&quot; :class=&quot;activeFilter === f.key ? &#39;border-gray-500 bg-gray-100 font-medium text-gray-800&#39; : &#39;border-gray-200 text-gray-400 hover:border-gray-400&#39;&quot; class=&quot;flex items-center gap-2 px-3 py-1.5 rounded-full text-xs border transition-all&quot;&gt;
        &lt;span class=&quot;w-2 h-2 rounded-full&quot; :class=&quot;f.dot&quot;&gt;&lt;/span&gt;
        &lt;span x-text=&quot;f.label + &#39; (&#39; + count(f.key) + &#39;)&#39;&quot;&gt;&lt;/span&gt;
      &lt;/button&gt;
    &lt;/template&gt;
  &lt;/div&gt;
  &lt;div class=&quot;border border-gray-200 rounded-lg overflow-hidden&quot;&gt;
    &lt;div class=&quot;grid grid-cols-12 bg-gray-50 text-xs font-medium text-gray-500 px-3 py-2 border-b border-gray-200&quot;&gt;
      &lt;div class=&quot;col-span-4&quot;&gt;Declaration&lt;/div&gt;
      &lt;div class=&quot;col-span-3&quot;&gt;Intune status&lt;/div&gt;
      &lt;div class=&quot;col-span-3&quot;&gt;Min OS&lt;/div&gt;
      &lt;div class=&quot;col-span-2&quot;&gt;Platform&lt;/div&gt;
    &lt;/div&gt;
    &lt;template x-for=&quot;cat in visibleCategories()&quot; :key=&quot;cat.category&quot;&gt;
      &lt;div&gt;
        &lt;div class=&quot;px-3 py-1.5 bg-gray-50 border-b border-gray-200 text-xs font-semibold text-gray-400 uppercase tracking-wide&quot; x-text=&quot;cat.category&quot;&gt;&lt;/div&gt;
        &lt;template x-for=&quot;(item, idx) in cat.items&quot; :key=&quot;cat.category + idx&quot;&gt;
          &lt;div&gt;
            &lt;div @click=&quot;toggle(cat.category + idx)&quot; class=&quot;grid grid-cols-12 px-3 py-2.5 border-b border-gray-100 cursor-pointer hover:bg-gray-50 transition-colors&quot;&gt;
              &lt;div class=&quot;col-span-4 pr-2&quot;&gt;
                &lt;div class=&quot;font-medium text-gray-900&quot; x-text=&quot;item.name&quot;&gt;&lt;/div&gt;
                &lt;div class=&quot;text-xs text-gray-400 font-mono mt-0.5 truncate&quot; x-text=&quot;item.declaration&quot;&gt;&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;col-span-3 flex items-center&quot;&gt;
                &lt;span class=&quot;inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium&quot; :class=&quot;statusStyle(item.status).badge&quot;&gt;
                  &lt;span class=&quot;w-1.5 h-1.5 rounded-full&quot; :class=&quot;statusStyle(item.status).dot&quot;&gt;&lt;/span&gt;
                  &lt;span x-text=&quot;statusStyle(item.status).label&quot;&gt;&lt;/span&gt;
                &lt;/span&gt;
              &lt;/div&gt;
              &lt;div class=&quot;col-span-3 flex items-center text-xs text-gray-500&quot; x-text=&quot;item.minOS&quot;&gt;&lt;/div&gt;
              &lt;div class=&quot;col-span-2 flex items-center justify-between&quot;&gt;
                &lt;span class=&quot;text-xs text-gray-500&quot; x-text=&quot;item.platform&quot;&gt;&lt;/span&gt;
                &lt;span class=&quot;text-gray-300 text-xs ml-1&quot; x-text=&quot;expanded === (cat.category + idx) ? &#39;▲&#39; : &#39;▼&#39;&quot;&gt;&lt;/span&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            &lt;div x-show=&quot;expanded === (cat.category + idx)&quot; x-transition=&quot;&quot; class=&quot;px-4 py-3 bg-gray-50 border-b border-gray-200 text-xs text-gray-600 space-y-2&quot;&gt;
              &lt;p x-text=&quot;item.note&quot;&gt;&lt;/p&gt;
              &lt;template x-if=&quot;item.status === &#39;intune&#39; &amp;&amp; item.path !== &#39;Not available in Intune&#39;&quot;&gt;
                &lt;p class=&quot;font-medium text-gray-700&quot;&gt;Settings Catalog path: &lt;span class=&quot;font-mono text-gray-500&quot; x-text=&quot;item.path&quot;&gt;&lt;/span&gt;&lt;/p&gt;
              &lt;/template&gt;
              &lt;template x-if=&quot;item.link&quot;&gt;
                &lt;a :href=&quot;item.link&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot; class=&quot;inline-block text-blue-600 hover:underline&quot; @click.stop=&quot;&quot;&gt;Microsoft docs&lt;/a&gt;
              &lt;/template&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/template&gt;
      &lt;/div&gt;
    &lt;/template&gt;
  &lt;/div&gt;
  &lt;p class=&quot;text-xs text-gray-400 mt-3&quot;&gt;Status as of March 2026. Apple only = supported at the DDM protocol level but not yet a native DDM configuration in Intune. Click any row to expand. Microsoft adds new DDM settings each monthly service release.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;-available-now-in-intunes-settings-catalog&quot; tabindex=&quot;-1&quot;&gt;✅ Available now in Intune&#39;s Settings Catalog&lt;/h3&gt;
&lt;p&gt;These are the declarations you can configure today under &lt;strong&gt;Declarative Device Management (DDM)&lt;/strong&gt; in the Intune Settings Catalog:&lt;/p&gt;
&lt;h4 id=&quot;software-update-macos-14-iosipados-17&quot; tabindex=&quot;-1&quot;&gt;Software Update &lt;em&gt;(macOS 14 · iOS/iPadOS 17+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;softwareupdate.enforcement.specific&lt;/code&gt;&lt;/strong&gt; — The most critical one right now. This is how you enforce a specific OS version by a hard deadline. The device handles everything: downloading, preparing, notifying the user, and installing. Configure it in Intune via &lt;strong&gt;Settings Catalog → DDM → Software Update&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Key behaviours:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If multiple enforcement declarations target different versions, the one with the &lt;strong&gt;earliest deadline for a newer-than-current version&lt;/strong&gt; is processed first&lt;/li&gt;
&lt;li&gt;If the target version matches or is older than what&#39;s installed, the device returns an error in the status report — it will not downgrade&lt;/li&gt;
&lt;li&gt;Once a DDM update declaration is active, &lt;strong&gt;legacy MDM software update commands return errors&lt;/strong&gt; on that device — you can&#39;t mix the two approaches&lt;/li&gt;
&lt;li&gt;User notifications come from the OS itself (not Intune) — Apple owns that UX. The &lt;code&gt;Notifications&lt;/code&gt; key lets you adjust the default behaviour, e.g. showing only a 1-hour warning instead of extended reminders&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Type&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;com.apple.configuration.softwareupdate.enforcement.specific&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Identifier&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;com.example.update.ios18&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Payload&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;TargetOSVersion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;18.4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;TargetLocalDateTime&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2025-11-15T22:00:00&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;DetailsURL&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://intranet.example.com/it/updates&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Intune also supports a &lt;strong&gt;&amp;quot;Software Update Enforce Latest&amp;quot;&lt;/strong&gt; mode (introduced in service release 2503) — instead of specifying a target version manually, you define a deferral period in days and an enforcement time, and Intune automatically targets the latest eligible release for each device model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;softwareupdate.settings&lt;/code&gt;&lt;/strong&gt; — Controls update deferral windows, Rapid Security Response behaviour, and whether standard users can manually trigger updates. This is the DDM replacement for the old software update restrictions and is recommended over legacy MDM equivalents since August 2024. Configure it in Intune via &lt;strong&gt;Settings Catalog → DDM → Software Update Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;passcode-macos-14-iosipados-17&quot; tabindex=&quot;-1&quot;&gt;Passcode &lt;em&gt;(macOS 14 · iOS/iPadOS 17+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;passcode.settings&lt;/code&gt;&lt;/strong&gt; — The DDM-native passcode declaration. Covers minimum length, complexity requirements, maximum failed attempts, and auto-lock. This replaces the legacy passcode MDM payload and is available cross-platform. Configure via &lt;strong&gt;Settings Catalog → DDM → Passcode&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;safari-extension-settings-macos-15-iosipados-18&quot; tabindex=&quot;-1&quot;&gt;Safari Extension Settings &lt;em&gt;(macOS 15 · iOS/iPadOS 18+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;safari.extensions.settings&lt;/code&gt;&lt;/strong&gt; — Manage Safari extensions across managed devices: allow specific extensions, block others, or lock down the extension ecosystem entirely. Previously required workarounds via App Store VPP assignment or blunt restriction payloads. Configure via &lt;strong&gt;Settings Catalog → DDM → Safari Extension Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;disk-management-settings-macos-15-only&quot; tabindex=&quot;-1&quot;&gt;Disk Management Settings &lt;em&gt;(macOS 15+ only)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;diskmanagement.settings&lt;/code&gt;&lt;/strong&gt; — Controls whether devices can connect to external USB storage and network-attached storage. A long-requested capability for Mac admins that previously required third-party tools or kernel extension workarounds. Configure via &lt;strong&gt;Settings Catalog → DDM → Disk Management&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;math-settings-macos-15-iosipados-18&quot; tabindex=&quot;-1&quot;&gt;Math Settings &lt;em&gt;(macOS 15 · iOS/iPadOS 18+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;math.settings&lt;/code&gt;&lt;/strong&gt; — Configures the Math Notes and Calculator apps. Most relevant in education environments. Configure via &lt;strong&gt;Settings Catalog → DDM → Math Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;-rolling-out-recently-added&quot; tabindex=&quot;-1&quot;&gt;⏳ Rolling out / recently added&lt;/h3&gt;
&lt;h4 id=&quot;audio-accessory-settings-macos-26-iosipados-26&quot; tabindex=&quot;-1&quot;&gt;Audio Accessory Settings &lt;em&gt;(macOS 26 · iOS/iPadOS 26+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;audioaccessory.settings&lt;/code&gt;&lt;/strong&gt; — New in OS 26, announced in the Intune March 2026 release notes. Manages audio accessory connections and permissions. Rolling out to all customers through late March 2026.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;-apple-protocol-only-not-yet-in-intunes-settings-catalog&quot; tabindex=&quot;-1&quot;&gt;🔵 Apple protocol only — not yet in Intune&#39;s Settings Catalog&lt;/h3&gt;
&lt;p&gt;These declarations are fully supported at the Apple DDM protocol level, but Microsoft has not yet built the backend to deliver them. It&#39;s worth being precise about what that means in practice, because the answer differs by declaration type.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on custom profiles and workarounds:&lt;/strong&gt; For declarations that are &lt;em&gt;DDM-native&lt;/em&gt; (background tasks, screen sharing), there is no functional Intune workaround today. These are JSON DDM declarations — the device expects them to arrive over the DDM channel with the DDM protocol. A custom configuration profile in Intune is a PLIST payload delivered over the legacy MDM channel. The device won&#39;t interpret a PLIST as a DDM declaration, and Intune doesn&#39;t have the backend to translate and route it correctly. The profile may deploy without an error, but the declaration won&#39;t be applied. This is a protocol gap, not a syntax problem — and it&#39;s a common source of confusion.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;background-tasks-macos-15-only&quot; tabindex=&quot;-1&quot;&gt;Background Tasks &lt;em&gt;(macOS 15+ only)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;services.background-tasks&lt;/code&gt;&lt;/strong&gt; — Manages launchd agents and daemons in a tamper-resistant, managed location. Previously, Mac admins handled this with scripts, MDM-deployed packages, or tools like Outset. Apple now offers a first-class DDM declaration for it — but Intune can&#39;t deliver it yet. &lt;strong&gt;No functional workaround in Intune.&lt;/strong&gt; If background task management via DDM is a requirement, you currently need a DDM-capable MDM (Jamf, Kandji, Mosyle, etc.). Until Intune adds support, the existing approach of deploying launch agents via pkg or script remains the practical path.&lt;/p&gt;
&lt;h4 id=&quot;screen-sharing-connection-macos-14&quot; tabindex=&quot;-1&quot;&gt;Screen Sharing Connection &lt;em&gt;(macOS 14+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;screensharing.connection&lt;/code&gt;&lt;/strong&gt; — Manages screen sharing connection groups. In Apple&#39;s DDM schema but not deliverable through Intune. &lt;strong&gt;No functional workaround in Intune&lt;/strong&gt; — same protocol gap as above.&lt;/p&gt;
&lt;h4 id=&quot;account-configurations-macos-14-iosipados-17&quot; tabindex=&quot;-1&quot;&gt;Account Configurations &lt;em&gt;(macOS 14 · iOS/iPadOS 17+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;This one is different. Apple has DDM declarations for managed accounts (CalDAV, CardDAV, Exchange ActiveSync, Google, LDAP, Mail, subscribed calendars) — but Intune doesn&#39;t need DDM to deliver account configurations, because it already supports them via legacy MDM profile templates (Exchange, Email, etc.) that have worked for years. The MDM channel handles these just fine. What you lose is DDM-quality benefits: proactive status reporting on account state, self-healing if the account config is removed, and the cleaner JSON structure. &lt;strong&gt;Practical path:&lt;/strong&gt; continue using Intune&#39;s existing account configuration profile templates — they work. The gap is quality of management, not functionality.&lt;/p&gt;
&lt;h4 id=&quot;app-management-iosipados-17&quot; tabindex=&quot;-1&quot;&gt;App Management &lt;em&gt;(iOS/iPadOS 17+)&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;app.managed&lt;/code&gt;&lt;/strong&gt; — The DDM declaration for app lifecycle management. Apple&#39;s schema and status channel already support DDM-native app install reporting. In practice, Intune manages apps through its own established channel (VPP, managed apps, required/available assignments) — so this isn&#39;t a hard blocker the way background tasks is. But native DDM app management would bring better install status granularity and self-healing deployments. One to watch for future Intune releases.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;legacy-profile-declarations&quot; tabindex=&quot;-1&quot;&gt;Legacy profile declarations&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;com.apple.configuration.legacy&lt;/code&gt;&lt;/strong&gt; — Available in Intune where supported. This wrapper type lets you deliver any existing MDM configuration profile through the DDM channel. The profile content (PLIST) is unchanged; DDM handles delivery and status reporting. This is the migration path for settings that don&#39;t have a native DDM equivalent yet — and it unlocks better status reporting for those profiles as a side benefit. Note: passcode profiles cannot be delivered this way; use the native DDM passcode declaration instead.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;6-platform-and-os-version-support-matrix&quot; tabindex=&quot;-1&quot;&gt;6. Platform and OS version support matrix&lt;/h2&gt;
&lt;p&gt;DDM support has expanded significantly since the initial iOS-only launch in 2021. The table below shows the minimum OS versions required for DDM by platform.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;iOS/iPadOS&lt;/th&gt;
&lt;th&gt;tvOS&lt;/th&gt;
&lt;th&gt;watchOS&lt;/th&gt;
&lt;th&gt;visionOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DDM protocol (base)&lt;/td&gt;
&lt;td&gt;13 Ventura&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software update enforcement&lt;/td&gt;
&lt;td&gt;14 Sonoma&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software update settings (deferral)&lt;/td&gt;
&lt;td&gt;14 Sonoma&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passcode settings&lt;/td&gt;
&lt;td&gt;14 Sonoma&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Account configurations&lt;/td&gt;
&lt;td&gt;14 Sonoma&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk management settings&lt;/td&gt;
&lt;td&gt;15 Sequoia&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background tasks&lt;/td&gt;
&lt;td&gt;15 Sequoia&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari extension management&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery health status item&lt;/td&gt;
&lt;td&gt;14.4 (Apple Silicon)&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared iPad support&lt;/td&gt;
&lt;td&gt;14 Sonoma&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &amp;quot;DDM protocol (base)&amp;quot; refers to the ability to receive declarations and use the status channel. Individual declaration types have their own OS minimums — a device can support DDM but not support a specific newer declaration type if the OS is too old.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;7-byod-vs-supervised-what-actually-works&quot; tabindex=&quot;-1&quot;&gt;7. BYOD vs. Supervised — what actually works&lt;/h2&gt;
&lt;p&gt;This is probably the most nuanced section in the post, and the one that changes most frequently. The short summary: supervision still gates the most powerful capabilities, but DDM has meaningfully expanded what&#39;s available for user-enrolled and BYOD devices — particularly for software updates.&lt;/p&gt;
&lt;h3 id=&quot;what-supervision-actually-means-in-this-context&quot; tabindex=&quot;-1&quot;&gt;What supervision actually means in this context&lt;/h3&gt;
&lt;p&gt;A &amp;quot;supervised&amp;quot; device in Apple&#39;s model is a device enrolled via Automated Device Enrollment (ADE) through Apple Business Manager or Apple School Manager. Supervision is applied during initial setup and grants the MDM server a significantly broader set of management capabilities — including locking the MDM enrollment profile to the device, controlling activation lock, preventing the user from removing MDM, and restricting actions that are otherwise user-controlled.&lt;/p&gt;
&lt;p&gt;BYOD in most enterprise contexts means one of two things: a personal device enrolled via the Company Portal app (Device Enrollment, with or without User Enrollment), or a device using App Protection Policies without full MDM enrollment at all.&lt;/p&gt;
&lt;h3 id=&quot;the-historical-pattern&quot; tabindex=&quot;-1&quot;&gt;The historical pattern&lt;/h3&gt;
&lt;p&gt;Apple has historically tightened supervision requirements over time — moving capabilities from &amp;quot;available to all enrolled devices&amp;quot; to &amp;quot;supervised only&amp;quot; as the capabilities became more sensitive. This trend led many admins to assume DDM would follow the same pattern, with the strongest DDM features requiring supervision.&lt;/p&gt;
&lt;h3 id=&quot;whats-actually-available-today&quot; tabindex=&quot;-1&quot;&gt;What&#39;s actually available today&lt;/h3&gt;
&lt;p&gt;The situation as of early 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Declaration / Capability&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Supervised (ADE)&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;User Enrolled BYOD&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Account-Driven Enrolment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DDM protocol (base)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software update enforcement (core keys)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software update settings (deferral)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;⚠️ Limited&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;⚠️ Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passcode settings&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Account configurations&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk management settings (macOS)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background tasks (macOS)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari extension management&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;⚠️&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legacy profile declarations&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅ (profile restrictions apply)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status channel (all items)&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;Subset&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;Subset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;the-software-update-story-for-byod&quot; tabindex=&quot;-1&quot;&gt;The software update story for BYOD&lt;/h3&gt;
&lt;p&gt;This is worth calling out specifically because it surprised a lot of people in the community. At WWDC 2024, Apple&#39;s presentation described DDM software update enforcement as supervised-only. The documentation at that time supported this reading.&lt;/p&gt;
&lt;p&gt;As of mid-2025, the picture changed. The basic DDM software update keys — &lt;code&gt;TargetOSVersion&lt;/code&gt;, &lt;code&gt;TargetBuildVersion&lt;/code&gt;, &lt;code&gt;TargetLocalDateTime&lt;/code&gt;, and &lt;code&gt;OfferPrograms&lt;/code&gt; — are available for unsupervised devices enrolled via Device Enrollment or ADE without supervision. In practice, this means you can use DDM to push iOS updates to BYOD devices enrolled in Intune via the Company Portal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The important caveat:&lt;/strong&gt; the &lt;em&gt;enforcement&lt;/em&gt; experience differs. On supervised devices, the OS enforces the deadline without user override beyond the countdown window. On unsupervised devices, users may still need to agree to terms and conditions before the update installs. This is an Apple-controlled behaviour, not something Intune can override.&lt;/p&gt;
&lt;p&gt;If you&#39;re running BYOD iOS in your environment and haven&#39;t tried DDM update policies yet — this is worth testing. It&#39;s a significant capability improvement over the old MDM-based path for BYOD.&lt;/p&gt;
&lt;h3 id=&quot;what-byod-still-cant-do&quot; tabindex=&quot;-1&quot;&gt;What BYOD still can&#39;t do&lt;/h3&gt;
&lt;p&gt;To be realistic about the limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BYOD devices can&#39;t have MDM enrollment locked — users can remove management at any time&lt;/li&gt;
&lt;li&gt;Activation lock bypass is supervised-only&lt;/li&gt;
&lt;li&gt;Certain restriction payloads only apply under supervision (kiosk mode, single-app mode, restricting App Store access)&lt;/li&gt;
&lt;li&gt;The full set of status items isn&#39;t available on user-enrolled devices — certain hardware and system properties are scoped to device-channel only&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;8-how-to-configure-ddm-in-intune&quot; tabindex=&quot;-1&quot;&gt;8. How to configure DDM in Intune&lt;/h2&gt;
&lt;p&gt;Intune surfaces DDM in a few different places depending on which declaration type you&#39;re configuring. Here&#39;s how to find and use each one.&lt;/p&gt;
&lt;h3 id=&quot;software-updates-via-ddm&quot; tabindex=&quot;-1&quot;&gt;Software updates via DDM&lt;/h3&gt;
&lt;p&gt;The primary entry point for DDM-based software update management in Intune is the &lt;strong&gt;Settings Catalog&lt;/strong&gt; under device configuration policies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For iOS/iPadOS:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Intune admin center → &lt;strong&gt;Devices&lt;/strong&gt; → &lt;strong&gt;Configuration&lt;/strong&gt; → &lt;strong&gt;Create&lt;/strong&gt; → &lt;strong&gt;New Policy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Platform: &lt;strong&gt;iOS/iPadOS&lt;/strong&gt;, Profile type: &lt;strong&gt;Settings catalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;&amp;quot;Declarative Device Management&amp;quot;&lt;/strong&gt; — you&#39;ll find the Software Update category&lt;/li&gt;
&lt;li&gt;Configure &lt;code&gt;Target OS Version&lt;/code&gt;, &lt;code&gt;Target Local Date Time&lt;/code&gt;, and optionally &lt;code&gt;Details URL&lt;/code&gt; for an information page users see during the update process&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;For macOS:&lt;/strong&gt;
The path is the same. The DDM software update settings appear in the Settings Catalog alongside the traditional Software Update payload settings — they are distinct items. Make sure you&#39;re configuring the DDM variants if you&#39;re on macOS 14+ devices.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/04-software-update-lifecycle.png&quot; alt=&quot;Diagram: End-to-end lifecycle from Intune sending a declaration through to deadline enforcement, with proactive status reports at each stage and key behavioural gotchas.&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📊 &lt;em&gt;Diagram: End-to-end lifecycle from Intune sending a declaration through to deadline enforcement, with proactive status reports at each stage and key behavioural gotchas.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key settings to know:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Target OS Version&lt;/strong&gt; — the minimum OS version you want the device to reach. Use the full version string (e.g., &lt;code&gt;18.4&lt;/code&gt; or &lt;code&gt;15.3.1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target Build Version&lt;/strong&gt; — optional, but allows targeting a specific build including supplemental security responses. Get current build strings from &lt;code&gt;https://gdmf.apple.com/v2/pmv&lt;/code&gt; (the Apple Software Lookup Service).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target Local Date Time&lt;/strong&gt; — the enforcement deadline in the device&#39;s local time zone. Note: DDM enforcement always uses &lt;strong&gt;device local time&lt;/strong&gt;, not UTC or a server-defined time zone. Plan accordingly if you have users across multiple time zones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notifications&lt;/strong&gt; — controls the user-facing notification behaviour leading up to the deadline.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Once a DDM software update declaration is active on a device, the device will return errors for certain legacy MDM software update commands. Don&#39;t mix DDM and legacy MDM update policies targeting the same devices.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;restricting-update-visibility-deferral&quot; tabindex=&quot;-1&quot;&gt;Restricting update visibility (deferral)&lt;/h3&gt;
&lt;p&gt;If you want to delay when an update becomes visible to users — useful for giving IT a testing window — configure a deferral restriction in the Settings Catalog separately from the enforcement declaration. This is the &lt;code&gt;com.apple.configuration.softwareupdate.settings&lt;/code&gt; equivalent in Intune, and it works by setting a number of days after Apple releases an update before it appears in the device&#39;s Software Update UI.&lt;/p&gt;
&lt;h3 id=&quot;other-ddm-settings-in-the-settings-catalog&quot; tabindex=&quot;-1&quot;&gt;Other DDM settings in the Settings Catalog&lt;/h3&gt;
&lt;p&gt;Most native DDM configurations are accessible via the Settings Catalog. When browsing the catalog, look for items tagged &lt;strong&gt;&amp;quot;Declarative Device Management&amp;quot;&lt;/strong&gt; in the category column — this distinguishes them from equivalent legacy MDM payload settings.&lt;/p&gt;
&lt;p&gt;For macOS disk management and background tasks (Sequoia and later), these appear under their respective categories in the catalog. Check the &lt;strong&gt;&amp;quot;Supported Platforms&amp;quot;&lt;/strong&gt; note for each setting to confirm the minimum OS version before deploying.&lt;/p&gt;
&lt;h3 id=&quot;legacy-profiles-via-ddm-delivery&quot; tabindex=&quot;-1&quot;&gt;Legacy profiles via DDM delivery&lt;/h3&gt;
&lt;p&gt;If you have existing configuration profiles and want to deliver them via the DDM channel (for better status reporting and self-healing), some MDM vendors including Intune support wrapping profiles as legacy profile declarations. In the Intune admin center, check profile delivery options under the configuration profile settings — the option to install via DDM is available for most legacy profiles (with the exception of passcode policies, which have a native DDM equivalent).&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;9-ddm-and-legacy-profiles-coexistence-and-conflict&quot; tabindex=&quot;-1&quot;&gt;9. DDM and legacy profiles — coexistence and conflict&lt;/h2&gt;
&lt;p&gt;A question that comes up constantly: if I have existing MDM configuration profiles deployed, what happens when I also start deploying DDM declarations for the same settings? Do they conflict?&lt;/p&gt;
&lt;h3 id=&quot;the-coexistence-model&quot; tabindex=&quot;-1&quot;&gt;The coexistence model&lt;/h3&gt;
&lt;p&gt;DDM and legacy MDM profiles &lt;strong&gt;coexist on the same device&lt;/strong&gt;. Apple designed the transition this way deliberately. You don&#39;t have to rip out all your existing profiles before adopting DDM. The DDM channel sits alongside the existing MDM channel; both are active and both can deliver settings to the device simultaneously.&lt;/p&gt;
&lt;h3 id=&quot;conflict-resolution&quot; tabindex=&quot;-1&quot;&gt;Conflict resolution&lt;/h3&gt;
&lt;p&gt;When both a legacy MDM profile and a DDM declaration configure the same setting, the &lt;strong&gt;most restrictive value wins&lt;/strong&gt;. This applies to both directions — it doesn&#39;t matter whether the MDM profile or the DDM declaration is stricter, the device enforces the stricter setting.&lt;/p&gt;
&lt;p&gt;Example: if an MDM profile sets a software update deferral of 7 days and a DDM declaration sets 14 days, the device enforces 14 days. If both set passcode minimum length but to different values, the higher value applies.&lt;/p&gt;
&lt;p&gt;There is one important exception: &lt;strong&gt;software update and app configurations deployed via DDM take precedence over equivalent MDM commands&lt;/strong&gt;. This isn&#39;t about strictness — it&#39;s a protocol-level priority. Once a DDM software update declaration is active, the MDM software update commands are effectively ignored.&lt;/p&gt;
&lt;h3 id=&quot;the-migration-path&quot; tabindex=&quot;-1&quot;&gt;The migration path&lt;/h3&gt;
&lt;p&gt;Apple provides a formal migration path for legacy profiles using the &lt;code&gt;com.apple.configuration.legacy&lt;/code&gt; declaration type. This wraps an existing MDM profile as a DDM object, allowing the MDM server to take ownership of the profile and deliver it via the DDM channel.&lt;/p&gt;
&lt;p&gt;The advantage: you get DDM-quality status reporting (proactive, real-time) for profiles that don&#39;t yet have a native DDM equivalent. The profile itself doesn&#39;t change — it&#39;s the same PLIST payload — but it&#39;s now delivered and tracked through DDM infrastructure.&lt;/p&gt;
&lt;p&gt;In practical terms for Intune: for the majority of existing configuration profiles, you can opt into DDM delivery without changing the settings themselves.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;10-troubleshooting-ddm-on-device&quot; tabindex=&quot;-1&quot;&gt;10. Troubleshooting DDM on-device&lt;/h2&gt;
&lt;p&gt;Debugging DDM configuration issues requires knowing where to look, because DDM declarations don&#39;t appear in the same places as traditional MDM profiles.&lt;/p&gt;
&lt;h3 id=&quot;finding-declarations-on-macos&quot; tabindex=&quot;-1&quot;&gt;Finding declarations on macOS&lt;/h3&gt;
&lt;p&gt;On macOS Sequoia (15) and later, DDM-deployed settings are visible at:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System Settings → General → Device Management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Locate your organisation&#39;s MDM enrollment profile in the list and double-click it. Scroll to the bottom of the profile detail window — you&#39;ll see a &lt;strong&gt;&amp;quot;Device Declarations&amp;quot;&lt;/strong&gt; section. This is where all active DDM declarations are listed with their current state.&lt;/p&gt;
&lt;p&gt;If you&#39;re deploying a software update plan, it appears here. If you&#39;re deploying legacy profile declarations via DDM, they appear under a &amp;quot;Profiles&amp;quot; subsection within Device Declarations.&lt;/p&gt;
&lt;h3 id=&quot;checking-software-update-state-from-the-command-line-macos&quot; tabindex=&quot;-1&quot;&gt;Checking software update state from the command line (macOS)&lt;/h3&gt;
&lt;p&gt;As of macOS Tahoe 26, there&#39;s no official CLI tool for reading DDM declaration state, but Apple writes software update declaration state to a readable plist:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/var/db/softwareupdate/SoftwareUpdateDDMStatePersistence.plist
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can read this with &lt;code&gt;PlistBuddy&lt;/code&gt; or &lt;code&gt;defaults read&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;defaults &lt;span class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; /var/db/softwareupdate/SoftwareUpdateDDMStatePersistence.plist&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This shows the applied target version, enforcement deadline, and current update status as the device sees it — useful for verifying that the correct declaration is in effect on a specific Mac.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is undocumented by Apple and could change in a future OS release. Use it for diagnostics, not as a production monitoring solution.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;finding-declarations-on-iosipados&quot; tabindex=&quot;-1&quot;&gt;Finding declarations on iOS/iPadOS&lt;/h3&gt;
&lt;p&gt;On iOS/iPadOS 17 and later:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Settings → General → VPN &amp;amp; Device Management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tap your MDM enrollment profile. Scroll down to see active declarations. This surfaces the same information as the macOS path — active configurations, their current state, and any errors.&lt;/p&gt;
&lt;h3 id=&quot;verifying-ddm-status-in-intune&quot; tabindex=&quot;-1&quot;&gt;Verifying DDM status in Intune&lt;/h3&gt;
&lt;p&gt;In the Intune admin center, DDM-enabled devices report update status through the standard device update reports. For DDM-managed software updates, you&#39;ll see granular per-device status including download progress and installation state without needing to wait for a scheduled check-in.&lt;/p&gt;
&lt;p&gt;For other DDM declarations, check the device configuration profile status under &lt;strong&gt;Devices → [device] → Device configuration&lt;/strong&gt;. DDM-delivered configurations report success, error, and pending states similar to traditional profiles.&lt;/p&gt;
&lt;h3 id=&quot;common-issues&quot; tabindex=&quot;-1&quot;&gt;Common issues&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Declaration not applying&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check the predicate if one is configured — the condition may not be met on the device&lt;/li&gt;
&lt;li&gt;Verify the device OS meets the minimum version for that declaration type&lt;/li&gt;
&lt;li&gt;Check whether a conflicting MDM command is interfering (especially for software updates)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Software update not enforcing on deadline&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confirm the &lt;code&gt;TargetLocalDateTime&lt;/code&gt; is in the device&#39;s local time zone, not UTC&lt;/li&gt;
&lt;li&gt;Check if the device is on the target version or newer — DDM will not downgrade&lt;/li&gt;
&lt;li&gt;User Terms and Conditions acceptance may be required on unsupervised devices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Legacy profile declaration not appearing&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not all legacy profiles can be delivered via DDM in Intune — passcode is a known exception&lt;/li&gt;
&lt;li&gt;Confirm the device has the DDM channel active (requires at least one check-in after enrollment)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;11-whats-coming-next&quot; tabindex=&quot;-1&quot;&gt;11. What&#39;s coming next&lt;/h2&gt;
&lt;p&gt;Apple&#39;s direction with DDM is clear: this is the management protocol for the next decade of Apple devices. Every new management capability Apple announces will be DDM-first or DDM-only.&lt;/p&gt;
&lt;p&gt;A few areas worth watching:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App management via DDM&lt;/strong&gt;
The &lt;code&gt;com.apple.configuration.app.managed&lt;/code&gt; declaration is in Apple&#39;s schema. App lifecycle management — installing, removing, and monitoring managed apps — transitioning to DDM would bring much better real-time install status and self-healing app deployments. Intune has already begun surfacing DDM app status items.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deeper compliance integration&lt;/strong&gt;
The status channel is a natural fit for compliance evaluation. Rather than Intune polling devices for compliance state, devices could proactively push compliance-relevant status items the moment something changes — triggering Conditional Access decisions in near real-time. This is directionally where the platform is heading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expanded status items&lt;/strong&gt;
Battery health reporting is already in DDM (macOS 14.4+, iOS 17+). Expect more hardware health, security posture, and configuration state items to be added as status items over future OS releases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intune&#39;s DDM roadmap&lt;/strong&gt;
Microsoft has committed to DDM as the forward path for Apple management in Intune. Expect the Settings Catalog to gain more native DDM declaration types as Apple adds them, and continued retirement of legacy MDM command equivalents on the Intune side.&lt;/p&gt;
&lt;p&gt;The practical advice for Intune admins today:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Migrate software updates to DDM now&lt;/strong&gt; — the MDM path is deprecated on OS 26 devices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start delivering existing profiles via DDM delivery&lt;/strong&gt; where Intune supports it — you get better status reporting for free&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test predicates&lt;/strong&gt; if you have heterogeneous fleets — the conditional logic capability is underused and genuinely powerful&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor Apple&#39;s device management schema releases&lt;/strong&gt; after each WWDC — that&#39;s where new DDM capabilities show up first before MDM vendor implementations follow&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;wrapping-up&quot; tabindex=&quot;-1&quot;&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;DDM isn&#39;t a replacement for everything you know about Apple device management — it&#39;s an evolution built on top of it. Your existing profiles still work. Your existing Intune policies still apply. The transition is designed to be gradual.&lt;/p&gt;
&lt;p&gt;But the direction is unambiguous. Apple is putting their engineering investment into DDM, and the deprecation of MDM software updates on OS 26 is the first concrete forcing function for the enterprise. If you&#39;re managing Apple devices in Intune and haven&#39;t started thinking about DDM, now is the time.&lt;/p&gt;
&lt;p&gt;Got questions or something to add? Hit me up on linkedin and I&#39;ll try to get back to you as soon as possible.&lt;/p&gt;
&lt;hr /&gt;
</content>
  </entry>
  
  <entry>
    <title>Meet Apple Business</title>
    <link href="https://ssmacadmin.com/posts/2026-03-24-Apple-Business/"/>
    <updated>2026-03-24T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-03-24-Apple-Business/</id>
    <content type="html">&lt;h2 id=&quot;apple-consolidates-its-business-portals-into-one-meet-apple-business&quot; tabindex=&quot;-1&quot;&gt;Apple Consolidates Its Business Portals Into One: Meet Apple Business&lt;/h2&gt;
&lt;p&gt;If you&#39;ve been juggling Apple Business Manager, Apple Business Connect, and Apple Business Essentials, Apple just made your life simpler. On March 24, Apple announced &lt;strong&gt;Apple Business&lt;/strong&gt; — a single unified platform that replaces all three portals. It launches on &lt;strong&gt;April 14, 2026&lt;/strong&gt;, and it&#39;s free.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;three-portals-one-platform&quot; tabindex=&quot;-1&quot;&gt;Three Portals, One Platform&lt;/h2&gt;
&lt;p&gt;For years, managing Apple devices in an enterprise or SMB environment meant navigating a fragmented set of portals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apple Business Manager (ABM)&lt;/strong&gt; — the backbone for zero-touch deployment, Managed Apple Accounts, and app/book purchasing. Available globally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apple Business Connect&lt;/strong&gt; — the newer brand and location management tool for controlling how your business appears across Maps, Mail, Wallet, and Siri.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apple Business Essentials&lt;/strong&gt; — Apple&#39;s MDM subscription service, launched in beta in late 2021 off the back of Apple&#39;s 2020 acquisition of Fleetsmith — a well-regarded Mac MDM startup known for its zero-touch deployment approach. It was Apple&#39;s first foray into owning the full MDM stack, bundling device management, iCloud storage, and AppleCare+ for Business. It never expanded beyond the US, and with Apple Business it&#39;s now being folded into the broader platform — free, and available globally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Apple Business rolls all of this into one unified experience. When the platform goes live on April 14, all three portals will be retired. Existing ABM data and Business Connect location data will automatically migrate — no action required on your end.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;whats-new-beyond-the-consolidation&quot; tabindex=&quot;-1&quot;&gt;What&#39;s New (Beyond the Consolidation)&lt;/h2&gt;
&lt;p&gt;The announcement isn&#39;t just a rebranding exercise. There are genuinely new capabilities worth paying attention to.&lt;/p&gt;
&lt;h3 id=&quot;built-in-mdm-with-blueprints&quot; tabindex=&quot;-1&quot;&gt;Built-In MDM with Blueprints&lt;/h3&gt;
&lt;p&gt;Apple Business includes native MDM — previously only available as a paid subscription through Essentials in the US. Now it&#39;s built in and free globally. The standout new feature here is &lt;strong&gt;Blueprints&lt;/strong&gt;: preconfigured bundles of settings and apps that can be assigned to device groups, enabling consistent zero-touch deployment out of the box. Think of it as Apple&#39;s own take on configuration profiles and enrollment groups, built directly into the platform.&lt;/p&gt;
&lt;p&gt;Managed Apple Accounts also get an upgrade — automated provisioning is now supported through identity providers including &lt;strong&gt;Microsoft Entra ID&lt;/strong&gt; and Google Workspace, which is a meaningful improvement for organisations already invested in the Microsoft stack.&lt;/p&gt;
&lt;h3 id=&quot;mail-calendar-and-directory&quot; tabindex=&quot;-1&quot;&gt;Mail, Calendar, and Directory&lt;/h3&gt;
&lt;p&gt;Apple Business now offers integrated email, calendar, and directory services with custom domain support. Businesses can bring an existing domain or purchase a new one through the platform. There&#39;s calendar delegation and a company directory with contact cards — essentially a lightweight Google Workspace or Microsoft 365 alternative for smaller businesses. Worth noting: these features require &lt;strong&gt;iOS 26, iPadOS 26, or macOS 26&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;expanded-globally&quot; tabindex=&quot;-1&quot;&gt;Expanded Globally&lt;/h3&gt;
&lt;p&gt;Perhaps the biggest headline for organisations outside the US: the full Apple Business platform — including MDM — is now available in &lt;strong&gt;200+ countries and regions&lt;/strong&gt;. Apple Business Essentials was never available outside the US, so this is a significant expansion. Feature availability does vary by region (the UK gets most features including Managed Apple Accounts, Get Apps, Get Books, and Tap to Pay on iPhone), but the core device management capabilities are broadly available.&lt;/p&gt;
&lt;h3 id=&quot;ads-on-apple-maps-coming-summer-2026&quot; tabindex=&quot;-1&quot;&gt;Ads on Apple Maps (Coming Summer 2026)&lt;/h3&gt;
&lt;p&gt;For businesses that also manage customer-facing operations, Apple Business will introduce paid advertising in Apple Maps starting this summer in the US and Canada. Ads will appear at the top of search results and in a new &amp;quot;Suggested Places&amp;quot; experience. Apple maintains its privacy stance here — ad interactions are not tied to a user&#39;s Apple Account, and personal data stays on device.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;what-happens-to-your-existing-setup&quot; tabindex=&quot;-1&quot;&gt;What Happens to Your Existing Setup?&lt;/h2&gt;
&lt;p&gt;If you&#39;re currently using Apple Business Manager, your transition should be seamless — data migrates automatically. If you were paying for Apple Business Essentials, your subscription charges stop on April 14. The built-in MDM is now free.&lt;/p&gt;
&lt;p&gt;The companion &lt;strong&gt;Apple Business app&lt;/strong&gt; (for employees to install work apps, find colleagues, and request support) will require iOS 26 or macOS 26 when it ships.&lt;/p&gt;
&lt;p&gt;Optional paid add-ons remain for US customers: additional iCloud storage starts at $0.99/user/month, and AppleCare+ for Business starts at $6.99/device/month.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-bottom-line-for-mac-admins&quot; tabindex=&quot;-1&quot;&gt;The Bottom Line for Mac Admins&lt;/h2&gt;
&lt;p&gt;Apple Business is a meaningful step forward — particularly the global MDM expansion and Entra ID integration. For smaller organisations without a dedicated MDM solution, Apple now offers a compelling native option that didn&#39;t exist a year ago. For larger orgs already running Intune or Jamf, the interesting question is how Apple Business&#39;s built-in MDM positions itself as either a complement or a simpler alternative over time.&lt;/p&gt;
&lt;p&gt;Keep an eye on April 14 for the full launch details and any migration documentation Apple publishes.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Sources: &lt;a href=&quot;https://www.apple.com/newsroom/2026/03/introducing-apple-business-a-new-all-in-one-platform-for-businesses-of-all-sizes/&quot;&gt;Apple Newsroom&lt;/a&gt;, &lt;a href=&quot;https://support.apple.com/en-gb/126603&quot;&gt;Apple Support — Available features by region&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Building a Zero-Config ESP Framework for macOS and Microsoft Intune</title>
    <link href="https://ssmacadmin.com/posts/2026-03-10-IntuneESPSwiftDialog/"/>
    <updated>2026-03-10T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-03-10-IntuneESPSwiftDialog/</id>
    <content type="html">&lt;p&gt;If you&#39;ve managed macOS devices with Microsoft Intune for any length of time, you&#39;ve probably run into this scenario: a user completes ADE enrollment, hits the desktop, and immediately starts poking around before their required apps have finished installing. Defender isn&#39;t running yet. Company Portal is halfway through. Teams hasn&#39;t even started. And now you&#39;ve got a support ticket.&lt;/p&gt;
&lt;p&gt;Windows has a built-in Enrollment Status Page that blocks the desktop until device setup is complete. macOS doesn&#39;t. And this was also something that came up when I was having a session at Experts Live in Denmark last month. So I started to build something that&#39;s easy to set up.&lt;/p&gt;
&lt;h2 id=&quot;the-problem-with-existing-approaches&quot; tabindex=&quot;-1&quot;&gt;The Problem With Existing Approaches&lt;/h2&gt;
&lt;p&gt;Most ESP-style solutions for macOS rely on the same pattern: a script deployed per-app via Intune that fires a SwiftDialog update when that specific app finishes installing, or drop information in a specific folder which need to be specified. It works, but it has some drawbacks.&lt;/p&gt;
&lt;p&gt;You need a separate script for every tracked app. Install order is non-deterministic in Intune, so you need to handle race conditions. Native MDM apps — Microsoft 365, Defender, Edge — don&#39;t go through the Intune Management Extension at all, so they never trigger IME-based scripts. And maintaining the whole thing as your app catalogue grows becomes a headache.&lt;/p&gt;
&lt;p&gt;I wanted something different: deploy one PKG, configure a list of apps, done. No per-app scripts. No race conditions. No maintenance overhead per app.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; tabindex=&quot;-1&quot;&gt;How It Works&lt;/h2&gt;
&lt;p&gt;The framework is built around two components that communicate through a shared JSON state file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The LaunchDaemon&lt;/strong&gt; runs as root from the moment the device enrolls. It polls for each tracked app every 10 seconds using &lt;code&gt;mdfind&lt;/code&gt; — Spotlight&#39;s bundle ID index — which works for every install type including native MDM apps that never touch &lt;code&gt;IntuneMDMDaemon.log&lt;/code&gt;. When all required apps are detected, it updates the state file and signals the UI to enable the Continue button.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The LaunchAgent&lt;/strong&gt; runs in the user&#39;s session. It waits for the daemon to signal ready, launches SwiftDialog with a live-updating app list, and polls the state file every 3 seconds to pipe updates through SwiftDialog&#39;s command file interface. When the user clicks Continue, it archives the logs and tears everything down cleanly.&lt;/p&gt;
&lt;p&gt;The key insight that makes this work — and that took some real digging to validate — is that native MDM-deployed apps like Microsoft 365, Defender, and Edge &lt;strong&gt;never appear in IntuneMDMDaemon.log&lt;/strong&gt;. They go through &lt;code&gt;mdmclient&lt;/code&gt; instead. Any solution that only watches the IME log will silently miss them. &lt;code&gt;mdfind&lt;/code&gt; doesn&#39;t care how an app was installed. It just checks whether it&#39;s there.&lt;/p&gt;
&lt;p&gt;Is daemons and agents overkill? Perhaps, but I like to think about the future where we can deploy agents and daemons during ESP, set install order of applications and Intune have an equivalent of PreStaging? What a dream... Therefore I think this is a way to go.&lt;/p&gt;
&lt;h2 id=&quot;the-detection-strategy&quot; tabindex=&quot;-1&quot;&gt;The Detection Strategy&lt;/h2&gt;
&lt;p&gt;Each tracked app gets three detection attempts in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spotlight&lt;/strong&gt; (&lt;code&gt;mdfind kMDItemCFBundleIdentifier == &#39;com.microsoft.Word&#39;&lt;/code&gt;) — the primary method, works for all install types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path check&lt;/strong&gt; (&lt;code&gt;-e /Applications/Microsoft Word.app&lt;/code&gt;) — fallback if the Spotlight index hasn&#39;t caught up yet during early enrollment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PKG receipt&lt;/strong&gt; (&lt;code&gt;pkgutil --pkg-info&lt;/code&gt;) — second fallback, same method Intune uses internally&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This three-layer approach means apps get detected correctly whether they came in through the native MDM stack, the Intune Management Extension, or were already present on the device.&lt;/p&gt;
&lt;h2 id=&quot;lets-configure&quot; tabindex=&quot;-1&quot;&gt;Let&#39;s configure!&lt;/h2&gt;
&lt;p&gt;Start by dropping by the &lt;a href=&quot;https://github.com/SSMacAdmin/Scripts/tree/main/SwiftDialogESP&quot;&gt;GitHub&lt;/a&gt; and download the zip file. When unwrapped it should look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ESP-SwiftDialog/
├── build.sh
├── esp-daemon.sh
├── esp-agent.sh
├── esp-util.sh
├── com.intune.esp.daemon.plist
├── com.intune.esp.agent.plist
├── postinstall
├── SwiftDialog.pkg      ← you provide this
├── logo.png             ← optional
└── banner.png           ← optional
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We only need to touch two files - the &lt;code&gt;esp-daemon.sh&lt;/code&gt; and &lt;code&gt;esp-agent.sh&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;setting-apps-to-track-required-vs-optional-apps&quot; tabindex=&quot;-1&quot;&gt;Setting apps to track, Required vs Optional Apps&lt;/h2&gt;
&lt;p&gt;Let&#39;s set up what applications we want to track in our ESP, open up &lt;strong&gt;&lt;code&gt;esp-daemon.sh&lt;/code&gt;&lt;/strong&gt; and look at lines starting from 62. It should look like this:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-daemon_appconfig.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Not every app should block the user from getting to their desktop. The framework supports a &lt;code&gt;required&lt;/code&gt; flag per app:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;declare&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;TRACKED_APPS&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Microsoft 365 Apps|com.microsoft.Word|/Applications/Microsoft Word.app|true&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Microsoft Teams|com.microsoft.teams2|/Applications/Microsoft Teams.app|true&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Slack|com.tinyspeck.slackmacgap|/Applications/Slack.app|false&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Required apps (&lt;code&gt;true&lt;/code&gt;) hold the Continue button until installed. Optional apps (&lt;code&gt;false&lt;/code&gt;) show up in the list with their real-time status but don&#39;t block the user. The daemon only enables the button when all required apps are confirmed present.&lt;/p&gt;
&lt;p&gt;When you&#39;ve set up the applications you want to track, there&#39;s nothing else to configure here - we can head over to the cosmetics how it will visually look.&lt;/p&gt;
&lt;h2 id=&quot;branding-and-customisation&quot; tabindex=&quot;-1&quot;&gt;Branding and Customisation&lt;/h2&gt;
&lt;p&gt;Everything visual is configured in a single block at the top of &lt;code&gt;esp-agent.sh&lt;/code&gt;, starting at line 33:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-agent_cosmetics.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;ORG_NAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Contoso&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;LOGO_PATH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/Library/ESP/logo.png&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;LOGO_FALLBACK&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;SF=building.2,colour=#3b82f6&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_BANNER_IMAGE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/Library/ESP/banner.png&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_TITLE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Setting up your Mac&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_POSITION&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;centre&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_FULLSCREEN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;BLUR_SCREEN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_IGNORE_DND&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_LIST_FONTSIZE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;small&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_WIDTH&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;740&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;DIALOG_HEIGHT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;500&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Drop your logo (512×512px PNG) and banner (1800×300px, 6:1 ratio) in the repo root before building and they get bundled automatically. No need to add an actual path in the settings for them, just drop them in the folder and be happy. Don&#39;t forget to name them banner.png or logo.png.&lt;/p&gt;
&lt;p&gt;Set &lt;code&gt;DIALOG_FULLSCREEN=&amp;quot;true&amp;quot;&lt;/code&gt; for a hard kiosk experience where the user can&#39;t interact with anything else, or &lt;code&gt;BLUR_SCREEN=&amp;quot;true&amp;quot;&lt;/code&gt; for a softer version that blurs the desktop behind the dialog.&lt;/p&gt;
&lt;p&gt;One setting worth calling out: &lt;code&gt;DIALOG_IGNORE_DND=&amp;quot;true&amp;quot;&lt;/code&gt; should always be on in production. If a user has Focus mode active at first login, SwiftDialog won&#39;t appear without it.&lt;/p&gt;
&lt;p&gt;When you have set the configuration you like and added your logo and/or banner and the structure look like the image below, it&#39;s time to build!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-folderstructure.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When testing locally on your device when configuring the cosmetics I advice not to use the Blur or Fullscreen experience as it might be quite hard to exit out of.&lt;/p&gt;
&lt;h2 id=&quot;lets-build-what-gets-deployed&quot; tabindex=&quot;-1&quot;&gt;Lets build - What Gets Deployed&lt;/h2&gt;
&lt;p&gt;Everything ships in a single PKG built with macOS&#39;s built-in &lt;code&gt;pkgbuild&lt;/code&gt; — no third party tools required.&lt;/p&gt;
&lt;p&gt;Start up your terminal and trail to the folder where all the files are located.
Type &lt;code&gt;./Build.sh&lt;/code&gt; to initiate the PKG-building. It will give you a complete log of what was build.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-buildpkg.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You should now have a folder named &amp;quot;build&amp;quot; in your project.
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-build-result.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The payload contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;esp-daemon.sh&lt;/code&gt; — the root-level monitor&lt;/li&gt;
&lt;li&gt;&lt;code&gt;esp-agent.sh&lt;/code&gt; — the user-level UI controller&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SwiftDialog.pkg&lt;/code&gt; — bundled and installed by the postinstall script&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logo.png&lt;/code&gt; / &lt;code&gt;banner.png&lt;/code&gt; — optional org branding, auto-detected by the build script&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;postinstall&lt;/code&gt; script installs SwiftDialog first, sets directory permissions correctly so the user-context agent can write logs, creates the log archive directory, and bootstraps the LaunchDaemon. The LaunchAgent loads automatically at first login — which on a real ADE enrollment is exactly when you want it.&lt;/p&gt;
&lt;p&gt;Now let&#39;s head to Intune to deploy!&lt;/p&gt;
&lt;h2 id=&quot;intune-deployment&quot; tabindex=&quot;-1&quot;&gt;Intune Deployment&lt;/h2&gt;
&lt;p&gt;Stat out by going to &lt;strong&gt;Apps -&amp;gt; macOS -&amp;gt; Create -&amp;gt; macOS App (PKG)&lt;/strong&gt; and click Select. This allow us to deploy applications that&#39;s not signed.&lt;/p&gt;
&lt;p&gt;Click on &amp;quot;&lt;strong&gt;Select app package file&lt;/strong&gt; and upload the &lt;strong&gt;ESP-Framework-1.0.pkg&lt;/strong&gt; we created in our last step with out build script. Click OK and Next to proceed.&lt;/p&gt;
&lt;p&gt;Select the name you would like to have, this is only for cosmetics in Intune for your eyes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-intune-appinfo.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detection rule&lt;/strong&gt;: App bundle ID &lt;code&gt;au.csiro.dialog&lt;/code&gt;, Ignore app version: &lt;strong&gt;Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since macOS PKG detection in Intune only supports bundle IDs (no file path option like Windows), you need an actual &lt;code&gt;.app&lt;/code&gt; bundle to detect against. SwiftDialog is the only app your PKG installs, so its bundle ID is the natural choice. Setting Ignore app version to Yes means you&#39;re not locked to a specific SwiftDialog release every time you update the PKG.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assignment&lt;/strong&gt;: Required, to a Device group you want to deploy to.&lt;/p&gt;
&lt;p&gt;Save and create the application. You&#39;re now done! Yay!&lt;/p&gt;
&lt;p&gt;What it looks like when running on a device:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2026-03-10_esp-completewindow.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The daemon waits up to 120 seconds for &lt;code&gt;IntuneMdmDaemon&lt;/code&gt; to appear before proceeding anyway — on a real ADE enrollment the agent typically starts within 30–60 seconds of the user session. The 30-minute overall timeout means even slow deployments get handled gracefully, with the Continue button enabling automatically if the wait exceeds the limit.&lt;/p&gt;
&lt;h2 id=&quot;cleanup&quot; tabindex=&quot;-1&quot;&gt;Cleanup&lt;/h2&gt;
&lt;p&gt;When the user clicks Continue to Desktop the agent doesn&#39;t just close SwiftDialog and exit. It:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Archives the daemon log, agent log, and final state snapshot to &lt;code&gt;/Library/Logs/ESP/&lt;/code&gt; with a timestamp&lt;/li&gt;
&lt;li&gt;Touches a &lt;code&gt;.cleanup_requested&lt;/code&gt; marker file&lt;/li&gt;
&lt;li&gt;The daemon (running as root) picks up the marker on its next poll, removes both plists, wipes &lt;code&gt;/Library/ESP/&lt;/code&gt;, and unloads itself&lt;/li&gt;
&lt;li&gt;The agent unloads itself last&lt;/li&gt;
&lt;li&gt;Logs are stored in &lt;code&gt;/Library/Logs/ESP&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After a successful ESP run the only thing left on the device is the archived logs — useful for troubleshooting without cluttering the filesystem.&lt;/p&gt;
&lt;h2 id=&quot;the-utility-script&quot; tabindex=&quot;-1&quot;&gt;The Utility Script&lt;/h2&gt;
&lt;p&gt;Testing and maintenance are covered by &lt;code&gt;esp-util.sh&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; esp-util.sh clean     &lt;span class=&quot;token comment&quot;&gt;# full teardown, ready for fresh install&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; esp-util.sh unlock    &lt;span class=&quot;token comment&quot;&gt;# force-enable Continue button&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; esp-util.sh status    &lt;span class=&quot;token comment&quot;&gt;# pretty-print current state&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; esp-util.sh logs      &lt;span class=&quot;token comment&quot;&gt;# tail both logs live&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; esp-util.sh restart   &lt;span class=&quot;token comment&quot;&gt;# bounce daemon and reload agent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;unlock&lt;/code&gt; command is particularly useful during testing — it bypasses the app detection and enables the button immediately so you can test the full flow without waiting for apps to install.&lt;/p&gt;
&lt;h2 id=&quot;get-it&quot; tabindex=&quot;-1&quot;&gt;Get It&lt;/h2&gt;
&lt;p&gt;The full framework is available on &lt;a href=&quot;https://github.com/SSMacAdmin/Scripts/tree/main/SwiftDialogESP&quot;&gt;GitHub&lt;/a&gt;. Download the zip-file, unwrap, drop in your &lt;code&gt;SwiftDialog.pkg&lt;/code&gt; and optional branding assets, update &lt;code&gt;TRACKED_APPS&lt;/code&gt; for your environment, and run &lt;code&gt;./build.sh&lt;/code&gt;. That&#39;s it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ESP-SwiftDialog/
├── build.sh
├── esp-daemon.sh
├── esp-agent.sh
├── esp-util.sh
├── com.intune.esp.daemon.plist
├── com.intune.esp.agent.plist
├── postinstall
├── SwiftDialog.pkg      ← you provide this
├── logo.png             ← optional
└── banner.png           ← optional
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you deploy this in your environment I&#39;d love to hear how it goes!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>macOS Defender Check</title>
    <link href="https://ssmacadmin.com/posts/2026-02-06-macOS Defender Check/"/>
    <updated>2026-02-06T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-02-06-macOS Defender Check/</id>
    <content type="html">&lt;p&gt;If you manage Microsoft Defender for Endpoint (MDE) on macOS devices, you know how critical it is to verify that security features are actually working as intended. Today, I&#39;m sharing a new toolkit I&#39;ve developed to help IT admins and security professionals validate MDE configurations on macOS.&lt;/p&gt;
&lt;h2 id=&quot;what-is-macos-defender-check&quot; tabindex=&quot;-1&quot;&gt;What is macOS Defender Check?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;macOS Defender Check&lt;/strong&gt; is a comprehensive bash/shell script testing suite for Microsoft Defender for Endpoint on macOS.&lt;/p&gt;
&lt;h2 id=&quot;why-i-built-this&quot; tabindex=&quot;-1&quot;&gt;Why I Built This&lt;/h2&gt;
&lt;p&gt;While managing MDE deployments across macOS fleets, I found myself repeatedly running manual tests to verify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is Tamper Protection actually preventing unauthorized changes?&lt;/li&gt;
&lt;li&gt;Are web protection features blocking malicious URLs?&lt;/li&gt;
&lt;li&gt;Is SmartScreen working correctly across different browsers?&lt;/li&gt;
&lt;li&gt;Are my custom URL Indicators being enforced?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of running these checks manually, I wanted an automated, comprehensive testing toolkit that works natively on macOS without requiring PowerShell or additional dependencies.&lt;/p&gt;
&lt;h2 id=&quot;what-it-tests&quot; tabindex=&quot;-1&quot;&gt;What It Tests&lt;/h2&gt;
&lt;p&gt;The toolkit includes two main scripts:&lt;/p&gt;
&lt;h3 id=&quot;1-tamper-protection-testing-defendercheck-tpsh&quot; tabindex=&quot;-1&quot;&gt;1. Tamper Protection Testing (&lt;code&gt;defendercheck-tp.sh&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MDE installation and health verification&lt;/li&gt;
&lt;li&gt;Real-Time Protection status&lt;/li&gt;
&lt;li&gt;Tamper Protection configuration&lt;/li&gt;
&lt;li&gt;Actual tampering prevention tests&lt;/li&gt;
&lt;li&gt;System Extension approval status&lt;/li&gt;
&lt;li&gt;MDM profile deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-web-protection-testing-defendercheck-wpsh&quot; tabindex=&quot;-1&quot;&gt;2. Web Protection Testing (&lt;code&gt;defendercheck-wp.sh&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Defender SmartScreen&lt;/li&gt;
&lt;li&gt;Network Protection&lt;/li&gt;
&lt;li&gt;Custom URL Indicators (CSV import)&lt;/li&gt;
&lt;li&gt;Web Content Filtering (WCF)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-browser testing&lt;/strong&gt; (Chrome, Edge, Safari)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;quick-start&quot; tabindex=&quot;-1&quot;&gt;Quick Start&lt;/h2&gt;
&lt;p&gt;Download the files from my &lt;a href=&quot;https://github.com/SSMacAdmin/macOS_DefenderCheck&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Download and make executable&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;chmod&lt;/span&gt; +x defendercheck-tp.sh defendercheck-wp.sh&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test Tamper Protection&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-tp.sh&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test Web Protection (all browsers)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-wp.sh&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test specific browser only&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-wp.sh &lt;span class=&quot;token parameter variable&quot;&gt;-b&lt;/span&gt; edge&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test with custom URL Indicators&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-wp.sh &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; your_urls.csv&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test Web Content Filtering&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-wp.sh &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt; AdultContent&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;real-world-use-cases&quot; tabindex=&quot;-1&quot;&gt;Real-World Use Cases&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pre-Deployment Validation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before rolling out MDE to your entire fleet, use these scripts to validate that all security features work correctly on your test devices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-Deployment Verification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After deploying MDE, run the tests to confirm that Tamper Protection, Network Protection, and other features are properly enabled.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compliance Auditing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Generate test reports to demonstrate that security controls are functioning as required by your security policies or compliance frameworks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When users report that legitimate sites are being blocked (or malicious sites aren&#39;t being blocked), use the URL Indicators test to validate your allow/block lists.&lt;/p&gt;
&lt;h2 id=&quot;example-testing-url-indicators&quot; tabindex=&quot;-1&quot;&gt;Example: Testing URL Indicators&lt;/h2&gt;
&lt;p&gt;One of the most useful features is testing custom URL Indicators. Create a CSV file with your blocked/allowed URLs:&lt;/p&gt;
&lt;pre class=&quot;language-csv&quot;&gt;&lt;code class=&quot;language-csv&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token value&quot;&gt;IndicatorValue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token value&quot;&gt;https://demo.smartscreen.msft.net/phishingdemo.html&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token value&quot;&gt;https://github.com&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token value&quot;&gt;https://malicious-site.example.com&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token value&quot;&gt;https://microsoft.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then run:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ./defendercheck-wp.sh &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; urls.csv&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script will test each URL and generate a detailed CSV report showing which URLs were blocked/allowed, with timestamps and connection details.&lt;/p&gt;
&lt;h2 id=&quot;browser-support-private-mode&quot; tabindex=&quot;-1&quot;&gt;Browser Support &amp;amp; Private Mode&lt;/h2&gt;
&lt;p&gt;A unique feature is automatic private/incognito mode for testing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chrome:&lt;/strong&gt; Automatic incognito mode (&lt;code&gt;--incognito&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge:&lt;/strong&gt; Automatic InPrivate mode (&lt;code&gt;--inprivate&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safari:&lt;/strong&gt; Opens in regular mode (private mode must be enabled manually)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This ensures test URLs don&#39;t pollute browser history and provides a clean testing environment.&lt;/p&gt;
&lt;h2 id=&quot;what-makes-it-different&quot; tabindex=&quot;-1&quot;&gt;What Makes It Different?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Compared to manual testing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automated and repeatable&lt;/li&gt;
&lt;li&gt;Tests multiple browsers simultaneously&lt;/li&gt;
&lt;li&gt;Generates detailed logs and CSV reports&lt;/li&gt;
&lt;li&gt;Saves hours of manual validation work&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Whether you&#39;re deploying MDE to a handful of Macs or managing thousands of macOS devices, having a reliable testing toolkit is essential. macOS Defender Check gives you the confidence that your security configurations are working as intended.&lt;/p&gt;
&lt;p&gt;Give it a try and let me know what you think!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Automated iOS/macOS Compliance Policy</title>
    <link href="https://ssmacadmin.com/posts/2026-01-14-Automate macOS Compliance Policies with Azure Automation/"/>
    <updated>2026-01-14T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2026-01-14-Automate macOS Compliance Policies with Azure Automation/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;Updated April 2026 — now with iOS/iPadOS support and two deployment options&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-manual-grind&quot; tabindex=&quot;-1&quot;&gt;The manual grind&lt;/h2&gt;
&lt;p&gt;If you&#39;re managing macOS devices in Intune, you&#39;ve probably been in this situation: Apple releases macOS 26.3, and you need to update the &lt;code&gt;osMinimumVersion&lt;/code&gt; field in your compliance policy to require 26.1 (or whatever version makes sense for your org). You open Intune, navigate to the compliance policy, update the minimum OS version, save, and you&#39;re done.&lt;/p&gt;
&lt;p&gt;A week later, macOS 26.4 drops. Repeat. And if you&#39;re also managing iOS/iPadOS, you&#39;re doing this dance twice.&lt;/p&gt;
&lt;p&gt;This gets old fast. And let&#39;s be honest — we forget to do it sometimes.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;what-this-does&quot; tabindex=&quot;-1&quot;&gt;What this does&lt;/h2&gt;
&lt;p&gt;This solution automatically keeps the &lt;code&gt;osMinimumVersion&lt;/code&gt; field in your Intune compliance policies current, for both macOS and iOS/iPadOS. It pulls the latest version data from the &lt;a href=&quot;https://sofa.macadmins.io/&quot;&gt;SOFA feed&lt;/a&gt; (the MacAdmins community standard — updated every 6 hours directly from Apple), calculates your target minimum based on your versioning strategy, and patches the policy via the Graph API if anything has changed.&lt;/p&gt;
&lt;p&gt;It runs on Azure Automation, costs basically nothing (well within the free tier), and once it&#39;s set up you never touch it again.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;version-strategies&quot; tabindex=&quot;-1&quot;&gt;Version strategies&lt;/h2&gt;
&lt;p&gt;Before getting into setup, it&#39;s worth understanding how the versioning logic works — this is the part that makes it actually useful rather than just &amp;quot;latest minus one.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Track major versions&lt;/strong&gt; — stay N major versions behind the latest release.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MACOS_VERSIONS_BELOW = 2
# Latest: macOS 26 → requires macOS 24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Pin to major version&lt;/strong&gt; — lock to a specific major and track minor releases within it. This is the one I&#39;d recommend for most environments.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MACOS_PIN_TO_MAJOR_VERSION = 26
MACOS_VERSIONS_BELOW       = 2
# Latest 26.x is 26.7 → requires 26.5
# Ignores macOS 27.x entirely
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Track minor versions&lt;/strong&gt; — stay N minor versions behind within the same major.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MACOS_USE_MINOR_VERSIONS = True
MACOS_VERSIONS_BELOW     = 2
# Latest 26.7 → requires 26.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The same strategies apply to iOS/iPadOS using the &lt;code&gt;IOS_&lt;/code&gt; prefix.&lt;/p&gt;
&lt;p&gt;Pinning to a major version is particularly useful when you want to test the next major OS on a pilot group while keeping production on the current one. You set up two compliance policies, point this automation at each, and let it handle the rest.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;two-deployment-options&quot; tabindex=&quot;-1&quot;&gt;Two deployment options&lt;/h2&gt;
&lt;p&gt;Since v4, you can choose how to deploy this:&lt;/p&gt;
&lt;h3 id=&quot;separate-runbooks&quot; tabindex=&quot;-1&quot;&gt;Separate Runbooks&lt;/h3&gt;
&lt;p&gt;Two independent runbooks — one for macOS, one for iOS/iPadOS. Each has its own schedule, variables, and diagnostics. A failure in one platform doesn&#39;t affect the other. Good if your team manages platforms independently or needs them on different update schedules.&lt;/p&gt;
&lt;p&gt;You end up with 4 runbooks total (2 main + 2 diagnostics), but they&#39;re fully isolated.&lt;/p&gt;
&lt;h3 id=&quot;unified-runbook&quot; tabindex=&quot;-1&quot;&gt;Unified Runbook&lt;/h3&gt;
&lt;p&gt;A single runbook handles both platforms in one execution. Each platform is independently enabled/disabled via &lt;code&gt;ENABLE_MACOS&lt;/code&gt; and &lt;code&gt;ENABLE_IOS&lt;/code&gt; variables, so you can start with just macOS and flip iOS on later without any runbook changes.&lt;/p&gt;
&lt;p&gt;7 variables. 2 runbooks. One scheduled job. That&#39;s the whole thing (Managed Identity, both platforms enabled).&lt;/p&gt;
&lt;p&gt;For most environments the Unified Runbook is the right choice — simpler to manage, fewer moving parts.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;authentication-managed-identity&quot; tabindex=&quot;-1&quot;&gt;Authentication: Managed Identity&lt;/h2&gt;
&lt;p&gt;The whole solution runs on Managed Identity — no client secrets, no expiry dates, no calendar reminders. The Automation Account authenticates directly to Graph as itself.&lt;/p&gt;
&lt;p&gt;You only need one Graph permission: &lt;code&gt;DeviceManagementConfiguration.ReadWrite.All&lt;/code&gt;. It covers both macOS and iOS policies.&lt;/p&gt;
&lt;p&gt;The setup is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable System-Assigned Identity on your Automation Account (Identity → System assigned → On)&lt;/li&gt;
&lt;li&gt;Copy the Object (principal) ID&lt;/li&gt;
&lt;li&gt;Run this in Azure Cloud Shell:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Connect-MgGraph&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Scopes &lt;span class=&quot;token string&quot;&gt;&quot;Application.Read.All&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;AppRoleAssignment.ReadWrite.All&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$managedIdentityId&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;PASTE-YOUR-OBJECT-ID-HERE&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$graphAppId&lt;/span&gt;        = &lt;span class=&quot;token string&quot;&gt;&quot;00000003-0000-0000-c000-000000000000&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$graphSP&lt;/span&gt;    = &lt;span class=&quot;token function&quot;&gt;Get-MgServicePrincipal&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;Filter&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;appId eq &#39;&lt;span class=&quot;token variable&quot;&gt;$graphAppId&lt;/span&gt;&#39;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$permission&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$graphSP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AppRoles &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Where-Object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Value &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;DeviceManagementConfiguration.ReadWrite.All&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;New-MgServicePrincipalAppRoleAssignment&lt;/span&gt; `&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;ServicePrincipalId &lt;span class=&quot;token variable&quot;&gt;$managedIdentityId&lt;/span&gt; `&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;PrincipalId        &lt;span class=&quot;token variable&quot;&gt;$managedIdentityId&lt;/span&gt; `&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;ResourceId         &lt;span class=&quot;token variable&quot;&gt;$graphSP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Id `&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;AppRoleId          &lt;span class=&quot;token variable&quot;&gt;$permission&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Id&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Done. That single permission covers both platforms.&lt;/p&gt;
&lt;p&gt;If you prefer a Service Principal (useful for running the scripts locally or in CI/CD), that&#39;s supported too — see the standalone usage guide in the repo.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;diagnostics&quot; tabindex=&quot;-1&quot;&gt;Diagnostics&lt;/h2&gt;
&lt;p&gt;Each deployment option includes a diagnostics runbook that runs a 5-step pre-flight check before you schedule anything: variables, authentication, Graph API permissions, policy access, and SOFA feed connectivity. Run these first. They&#39;ll catch misconfigured variables, wrong policy IDs, and auth issues before they become a silent failure at 2 AM.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;what-the-output-looks-like&quot; tabindex=&quot;-1&quot;&gt;What the output looks like&lt;/h2&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Success&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;AuthMethod&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Managed Identity&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Duration&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6.8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;Results&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;macOS&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;Platform&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;macOS&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;PreviousVersion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;26.3.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;NewVersion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;26.4.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;Updated&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;iOS&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;Platform&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;iOS/iPadOS&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;PreviousVersion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;18.3.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;NewVersion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;18.3.2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token property&quot;&gt;&quot;Updated&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If nothing needs updating, it says so and exits cleanly. All job history is in Azure Automation.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;get-it&quot; tabindex=&quot;-1&quot;&gt;Get it&lt;/h2&gt;
&lt;p&gt;Everything is on GitHub — scripts, setup guides, standalone usage docs, and a migration guide if you&#39;re coming from a Service Principal setup:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/SSMacAdmin/Apple_ComplianceVersion_Updater&quot;&gt;&lt;strong&gt;SSMacAdmin/Apple_ComplianceVersion_Updater&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set it up once, forget about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have fun and good luck!&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
</content>
  </entry>
  
  <entry>
    <title>iOS26 New apps removal</title>
    <link href="https://ssmacadmin.com/posts/2025-09-20-iOS26-New-Apps/"/>
    <updated>2025-09-20T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2025-09-20-iOS26-New-Apps/</id>
    <content type="html">&lt;h2 id=&quot;ios26&quot; tabindex=&quot;-1&quot;&gt;iOS26&lt;/h2&gt;
&lt;p&gt;I just want to show a quick and easy way to remove/restrict some native Applications for iOS. This will also apply to iPads since they also got the Phone application as default in iPadOS26.
The new apps are &lt;strong&gt;Games and Preview&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&quot;the-settings&quot; tabindex=&quot;-1&quot;&gt;The settings&lt;/h1&gt;
&lt;p&gt;So we will need to create a new Policy with the Device Restriction template. Navigate to &lt;strong&gt;Devices -&amp;gt; iOS/iPadOS -&amp;gt; Configuration -&amp;gt; Create -&amp;gt; New Policy&lt;/strong&gt; and then choose profile type &lt;strong&gt;Templates&lt;/strong&gt; and select Device Restriction.&lt;/p&gt;
&lt;p&gt;First we can set a name, give it a great one 😎 Next, we want to look for the section &lt;strong&gt;Restricted Apps&lt;/strong&gt;. This will allow us to hide the app and it will also not allow other applications to open or interact with them. The app can&#39;t be installed from the App Store either if that&#39;s something you want to enforce.&lt;/p&gt;
&lt;p&gt;So we need to find the Bundle ID&#39;s for the applications and they can be found on Apple&#39;s website here: &lt;a href=&quot;https://support.apple.com/en-gb/guide/deployment/depece748c41/web&quot;&gt;https://support.apple.com/en-gb/guide/deployment/depece748c41/web&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then we can start to add the Bundle&#39;s in our configuration policy, it should look something like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/Restricted_apps.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When you&#39;re happy with the configuration. Save it and assign it to your organization!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Advanced uBlock Config</title>
    <link href="https://ssmacadmin.com/posts/2025-07-20-Advanced uBlock/"/>
    <updated>2025-07-20T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2025-07-20-Advanced uBlock/</id>
    <content type="html">&lt;h2 id=&quot;configure&quot; tabindex=&quot;-1&quot;&gt;Configure&lt;/h2&gt;
&lt;p&gt;With uBlock deployed to the orgainzation from the last post. We can also dive deeper in configuring uBlock with the help of some PowerShell and we will utilize remediation scripts in Intune to have a way check in with devices from time to time if changes has been made or if we want to update some configurations.&lt;/p&gt;
&lt;p&gt;Got the chance to do this because a customer wanted to whitelist a couple of websites for Google analytics. It&#39;s not really that convenient to ask 3000+ employees to whitelist 10+ websites manually. The best solution for us was to create the remediation.
These detect and remediate scripts also allow you to change filterlists. If you know your way around Powershell, it shouldn&#39;t be hard to add even more configurations that&#39;s available on uBlock&#39;s Wiki-page.&lt;/p&gt;
&lt;h3 id=&quot;detect&quot; tabindex=&quot;-1&quot;&gt;Detect&lt;/h3&gt;
&lt;p&gt;Let us configure the Detection part first.&lt;/p&gt;
&lt;p&gt;First we need to set the location to the rigstry key that contain all information about the extension. Then we run a detection how we want the settings to be as our baseline. If it doesn&#39;t match, the remediation will kick in and set the parameters we would like.&lt;/p&gt;
&lt;p&gt;We will mainly touch the part of the script that includes &amp;quot;trustedSiteDirectives&amp;quot;. This is where the whitelisting of websites that&#39;s not going to be touched by uBlock will be put. This part need to be identical in both the Detect and Remediate part, since we want to find out if something has been changed from our baseline. This setting do not interfere with the manual whitelists users might have done on their own with the extension.&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Detect&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;[int32]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$SkipRemediate&lt;/span&gt; = 0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;[int32]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Remediate&lt;/span&gt; = 1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;HKLM:&#92;Software&#92;Policies&#92;Microsoft&#92;Edge&#92;3rdparty&#92;Extensions&#92;odfafepnkmbhccpbejgmiehpchacaeak&#92;policy&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Expected userSettings&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token variable&quot;&gt;$userSettings&lt;/span&gt; = @&lt;span class=&quot;token string&quot;&gt;&#39;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;[&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    [&quot;contextMenuEnabled&quot;, &quot;true&quot;],&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    [&quot;showIconBadge&quot;, &quot;true&quot;]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;]&lt;/span&gt;&lt;br /&gt;&#39;&lt;/span&gt;@&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Expected toOverwrite&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token variable&quot;&gt;$toOverwrite&lt;/span&gt; = @&lt;span class=&quot;token string&quot;&gt;&#39;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &quot;filterLists&quot;: [&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;user-filters&quot;, &quot;ublock-filters&quot;, &quot;ublock-badware&quot;, &quot;ublock-privacy&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;ublock-abuse&quot;, &quot;ublock-unbreak&quot;, &quot;easylist&quot;, &quot;easyprivacy&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;urlhaus-1&quot;, &quot;adguard-annoyance&quot;, &quot;ublock-annoyances&quot;, &quot;plowe-0&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    ],&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &quot;trustedSiteDirectives&quot;: [&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;about-scheme&quot;, &quot;chrome-extension-scheme&quot;, &quot;chrome-scheme&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;edge-scheme&quot;, &quot;moz-extension-scheme&quot;, &quot;opera-scheme&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;vivaldi-scheme&quot;, &quot;wyciwyg-scheme&quot;, &quot;website1.dk&quot;, &quot;website2.no&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;website3.se&quot;, &quot;chrome-extension-scheme&quot;, &quot;another.one.com&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;moz-extension-scheme&quot;, &quot;macos.rules.com&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    ]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&#39;&lt;/span&gt;@&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-Not&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Test-Path&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Path &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;ErrorAction SilentlyContinue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Remediate. uBlock whitelist missing.&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$Remediate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# Get registry values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token variable&quot;&gt;$policyValues&lt;/span&gt; = &lt;span class=&quot;token function&quot;&gt;Get-ItemProperty&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Path &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# Save for troubleshooting&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token variable&quot;&gt;$policyValues&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Out-File&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;FilePath &lt;span class=&quot;token variable&quot;&gt;$RemediateWhitelistOnDomains&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Force&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# Check if userSettings matches&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token variable&quot;&gt;$currentUserSettings&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$policyValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;userSettings&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token variable&quot;&gt;$currentToOverwrite&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$policyValues&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;toOverwrite&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$currentUserSettings&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$userSettings&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-or&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$currentToOverwrite&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$toOverwrite&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Remediate. uBlock whitelist update required.&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$Remediate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Skip Remediate. uBlock whitelist match.&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$SkipRemediate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Exception&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Message&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$Remediate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;remediate&quot; tabindex=&quot;-1&quot;&gt;Remediate&lt;/h3&gt;
&lt;p&gt;The remediate part kicks in if we find anomalies from what we want our baseline to be in uBlock. The settings, as mentioned in the detection part, should be identical otherwise it will just loop itself to infinity and beyond.&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;language-powershell&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Remediate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;[int32]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Success&lt;/span&gt; = 0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;[int32]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Failure&lt;/span&gt; = 1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;HKLM:&#92;Software&#92;Policies&#92;Microsoft&#92;Edge&#92;3rdparty&#92;Extensions&#92;odfafepnkmbhccpbejgmiehpchacaeak&#92;policy&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# userSettings&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$userSettings&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Force&quot;&lt;/span&gt; = &lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Path&quot;&lt;/span&gt;  = &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Type&quot;&lt;/span&gt;  = &lt;span class=&quot;token string&quot;&gt;&quot;String&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Name&quot;&lt;/span&gt;  = &lt;span class=&quot;token string&quot;&gt;&quot;userSettings&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Value&quot;&lt;/span&gt; = @&lt;span class=&quot;token string&quot;&gt;&#39;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;[&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    [&quot;contextMenuEnabled&quot;, &quot;true&quot;],&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    [&quot;showIconBadge&quot;, &quot;true&quot;]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;]&lt;/span&gt;&lt;br /&gt;&#39;&lt;/span&gt;@&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# toOverwrite&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$toOverwrite&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Force&quot;&lt;/span&gt; = &lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Path&quot;&lt;/span&gt;  = &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Type&quot;&lt;/span&gt;  = &lt;span class=&quot;token string&quot;&gt;&quot;String&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Name&quot;&lt;/span&gt;  = &lt;span class=&quot;token string&quot;&gt;&quot;toOverwrite&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token string&quot;&gt;&quot;Value&quot;&lt;/span&gt; = @&lt;span class=&quot;token string&quot;&gt;&#39;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &quot;filterLists&quot;: [&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;user-filters&quot;, &quot;ublock-filters&quot;, &quot;ublock-badware&quot;, &quot;ublock-privacy&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;ublock-abuse&quot;, &quot;ublock-unbreak&quot;, &quot;easylist&quot;, &quot;easyprivacy&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;urlhaus-1&quot;, &quot;adguard-annoyance&quot;, &quot;ublock-annoyances&quot;, &quot;plowe-0&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    ],&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &quot;trustedSiteDirectives&quot;: [&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;about-scheme&quot;, &quot;chrome-extension-scheme&quot;, &quot;chrome-scheme&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;edge-scheme&quot;, &quot;moz-extension-scheme&quot;, &quot;opera-scheme&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;vivaldi-scheme&quot;, &quot;wyciwyg-scheme&quot;, &quot;website1.dk&quot;, &quot;website2.no&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;website3.se&quot;, &quot;chrome-extension-scheme&quot;, &quot;another.one.com&quot;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &quot;moz-extension-scheme&quot;, &quot;macos.rules.com&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    ]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&#39;&lt;/span&gt;@&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-Not&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Test-Path&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Path &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;New-Item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Force &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Path &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Get-Item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Path &lt;span class=&quot;token variable&quot;&gt;$Policy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Set-ItemProperty&lt;/span&gt; @userSettings&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Set-ItemProperty&lt;/span&gt; @toOverwrite&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$Success&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Exception&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Message&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$Failure&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the scripts as two seperate .ps1-files and upload the scripts as a remediation in your tenant. This can be deployed without interfering the users.&lt;/p&gt;
&lt;p&gt;Signed, sealed and delivered uBlock configuration. Enjoy!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Adblock it!</title>
    <link href="https://ssmacadmin.com/posts/2025-07-02-AdblockEdge/"/>
    <updated>2025-07-02T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2025-07-02-AdblockEdge/</id>
    <content type="html">&lt;h2 id=&quot;adblock&quot; tabindex=&quot;-1&quot;&gt;Adblock!&lt;/h2&gt;
&lt;p&gt;I want to hit on the big drum and clean up the browser for users as well as making the device safer. This will mainly focus on Windows on this, but can still be applied to macOS (will make a post about that later), since some of my recent customers have been mainly Windows oriented.&lt;/p&gt;
&lt;p&gt;So, when people think of ad blockers, they usually picture someone trying to clean up their personal browsing experience. But in enterprise environments, ad blockers aren’t just about aesthetics — they’re a smart, strategic tool that improves security, productivity, and even compliance.&lt;/p&gt;
&lt;p&gt;Some, but not all, reasons to deploy adblockers in an enterprise environmen;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Strengthening Enterprise Security&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Cybersecurity threats are evolving, and not all of them come through phishing emails or dodgy downloads. Malvertising — malicious ads that spread malware — can compromise systems without a single click. By blocking ads and third-party scripts, ad blockers eliminate a common vector for these kinds of attacks, significantly reducing risk across the organization.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Boosting Employee Productivity&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Let’s face it: ads are distracting. Whether it&#39;s a flashy banner or an auto-playing video, these interruptions pull attention away from work. By removing visual clutter and noise from web pages, ad blockers help employees stay focused. Plus, pages load faster.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Saving Bandwidth and Reducing IT Load&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Ad content consumes more than just attention — it eats up bandwidth and system resources. In a large-scale environment with hundreds or thousands of devices, this adds up fast. With ad blockers in place, companies can see noticeable reductions in network traffic and hardware strain, translating into smoother performance and potentially lower IT costs.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Supporting Privacy and Regulatory Compliance&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Tracking scripts embedded in ads can quietly collect data about users, often without their knowledge. For businesses subject to privacy regulations like GDPR or HIPAA, this presents a serious compliance issue. Ad blockers help curb unauthorized data sharing, contributing to better data hygiene and more control over what information leaves the network.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Delivering a Better Web Experience&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Cleaner interfaces mean happier users. Employees benefit from faster, more readable websites without the distraction or frustration of intrusive advertising. For teams using web-based tools, this improvement in user experience can have a real impact on daily workflow.&lt;/p&gt;
&lt;p&gt;Ok, so enough yapping, let&#39;s get to work.&lt;/p&gt;
&lt;h2 id=&quot;deploy-adblock-with-intune&quot; tabindex=&quot;-1&quot;&gt;Deploy Adblock with Intune&lt;/h2&gt;
&lt;p&gt;So I will be deploying uBlock Origin since I think it&#39;s the best one out the personally and that I&#39;ve got experience with.&lt;/p&gt;
&lt;p&gt;First I block all extensions and whitelist whenever it&#39;s necessary. This way you also get control over extensions that could possibly do harmful things or leak data.
Go to &lt;b&gt;Devices -&amp;gt; Windows -&amp;gt; Configuration -&amp;gt; Create -&amp;gt; New Policy&lt;/b&gt; and create a &lt;b&gt;Settings Catalog&lt;/b&gt; profile.
Search for &amp;quot;&lt;b&gt;Extensions&lt;/b&gt;&amp;quot; and then choose &amp;quot;&lt;b&gt;Microsoft Edge&#92;Extensions&lt;/b&gt;&amp;quot;, then select the options as pictured below to &lt;b&gt;Block All&lt;/b&gt; extensions with a wildcard. If you already have a Edge configuration policy, you can add these settings to that configuration if you&#39;d like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2025-07-02_uBlock_BlockAllExt.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now we need to deploy uBlock Origin and make an exception for the extension in Edge.
Create a new configuration profile and search for the same setting then add the following as pictured below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/2025-07-02_uBlock_uBlockConfig.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then we need to find the extension id for uBlock. You can find the Id&#39;s for extensions by browsing the Add-On &amp;quot;store&amp;quot;, then look at the URL. In the end of the URL there will be a block with random letters, this is the ID you need to paste.&lt;/p&gt;
&lt;p&gt;Exmple:
&lt;img src=&quot;https://ssmacadmin.com/static/img/2025-07-02_uBlock_URL.png&quot; alt=&quot;https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When deploying this setting, we will Whitelist the extension (since we block all extension with a wildcard) and automatically install the extension without the user needing to do anything.&lt;/p&gt;
&lt;p&gt;In the next post, I will show you how to configure a list with exteptions and other modifiers with Powershell for the uBlock extension!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>WWDC2025 MDM News!</title>
    <link href="https://ssmacadmin.com/posts/2025-06-18-WWDC25 News/"/>
    <updated>2025-06-18T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2025-06-18-WWDC25 News/</id>
    <content type="html">&lt;h1 id=&quot;-all-the-new-mdm-features-from-apples-wwdc25&quot; tabindex=&quot;-1&quot;&gt;📱 All the New MDM Features from Apple’s WWDC25&lt;/h1&gt;
&lt;p&gt;Apple&#39;s WWDC25 unveiled a massive slate of upgrades to Mobile Device Management (MDM), showcasing a vision centered around declarative management, automation, and streamlined identity. Here&#39;s a partial breakdown of everything new for IT administrators with Apple environments.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-1-apple-business-school-manager-gets-smarter&quot; tabindex=&quot;-1&quot;&gt;🔧 1. Apple Business &amp;amp; School Manager Gets Smarter&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Managed Apple Accounts&lt;/strong&gt;: A new downloadable report lists personal Apple IDs linked to your domain, helping you steer users toward official managed accounts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Block Personal Apple IDs&lt;/strong&gt;: IT can now block personal IDs during Setup Assistant—even without MDM configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ABM/ASM APIs&lt;/strong&gt;: New APIs allow you to:
&lt;ul&gt;
&lt;li&gt;Retrieve device inventories&lt;/li&gt;
&lt;li&gt;Reassign devices to different MDM servers&lt;/li&gt;
&lt;li&gt;Check enrollment statuses&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision Pro Enrollment Support&lt;/strong&gt;: Use Apple Configurator to enroll Vision Pro. Pairing via iPhone is now available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server Migration Tool&lt;/strong&gt;: Migrate devices between MDM servers without wiping them. Set migration deadlines with fallback auto-migration if users don’t act.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-2-declarative-device-management-ddm&quot; tabindex=&quot;-1&quot;&gt;🛠 2. Declarative Device Management (DDM)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expanded Support&lt;/strong&gt;: DDM now supports:
&lt;ul&gt;
&lt;li&gt;Software updates for iOS, iPadOS, macOS, tvOS, visionOS&lt;/li&gt;
&lt;li&gt;Vision Pro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Update Controls&lt;/strong&gt;: Define update cadence, defer periods, and enforce deadlines—all handled on-device. Traditional commands are deprecated.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-3-safari-network-management&quot; tabindex=&quot;-1&quot;&gt;🌐 3. Safari &amp;amp; Network Management&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Safari Configuration via DDM&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Push bookmarks&lt;/li&gt;
&lt;li&gt;Set default homepages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed Network Relays&lt;/strong&gt;: Now support FQDN-based traffic routing for more control over network traffic in enterprise setups.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-4-return-to-service-shared-devices&quot; tabindex=&quot;-1&quot;&gt;🔁 4. Return to Service (Shared Devices)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preserve Managed Apps&lt;/strong&gt;: Erase iPads, iPhones, or Vision Pro for reuse without wiping managed apps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision Pro Support&lt;/strong&gt;: Control Center includes “Reset for Next User” to streamline shared use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-5-smarter-app-management&quot; tabindex=&quot;-1&quot;&gt;📦 5. Smarter App Management&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Per‑App Deployment Controls&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Pin versions&lt;/li&gt;
&lt;li&gt;Block cellular downloads&lt;/li&gt;
&lt;li&gt;Monitor install/update status&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS App Distribution&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Deploy apps/packages declaratively on macOS Tahoe&lt;/li&gt;
&lt;li&gt;Create self-service catalogs with the new &lt;code&gt;ManagedAppDistribution&lt;/code&gt; framework&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-6-identity-access-enhancements&quot; tabindex=&quot;-1&quot;&gt;🛂 6. Identity &amp;amp; Access Enhancements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Setup Assistant SSO&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;During ADE on macOS Tahoe, you can configure Platform SSO and link to Managed Apple ID &lt;strong&gt;before&lt;/strong&gt; login.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tap‑to‑Login / Authenticated Guest Mode&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Use iPhone, Apple Watch, or NFC badge to unlock shared Macs.&lt;/li&gt;
&lt;li&gt;All data is wiped after logout—ideal for labs and shift-based workers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-7-migrating-devices-to-a-new-mdm-without-re-enrolling&quot; tabindex=&quot;-1&quot;&gt;🔄 7. Migrating Devices to a New MDM Without Re-enrolling&lt;/h2&gt;
&lt;p&gt;For the first time, Apple lets you move devices between MDM servers without wiping or re-enrolling them. This is ideal during MDM vendor transitions or domain restructures and something I will personally test heavily when it is available. Will be very interesting to see how it work in practice.&lt;/p&gt;
&lt;h3 id=&quot;-key-features&quot; tabindex=&quot;-1&quot;&gt;🔑 Key Features:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Factory Reset Required&lt;/strong&gt;: Devices retain all data and apps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deadline Control&lt;/strong&gt;: Set a grace period before automatic migration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross‑platform Support&lt;/strong&gt;: Works across iPhone, iPad, Mac, Apple TV, and Vision Pro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ABM/ASM Interface&lt;/strong&gt;: Reassignment done via Apple Business/School Manager.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-step-by-step&quot; tabindex=&quot;-1&quot;&gt;🧭 Step-by-Step:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In ABM/ASM, navigate to &lt;strong&gt;Devices &amp;gt; Assign to Server&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Select the new MDM server&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;migration window&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Devices will prompt users (or auto-migrate after the deadline)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;-example-screenshots&quot; tabindex=&quot;-1&quot;&gt;🖼 Example Screenshots:&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/WWDC25_DeviceMig1.png&quot; alt=&quot;ABM device reassignment screen&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Above: Device selection screen in Apple Business Manager&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/WWDC25_DeviceMig2.png&quot; alt=&quot;MDM migration flow&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Above: New server assignment view via Apple Configurator (visionOS example)&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-why-it-matters&quot; tabindex=&quot;-1&quot;&gt;💡 Why It Matters&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;How It Helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declarative model means less MDM traffic and higher reliability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Faster deployment, shared device prep, and app control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tighter control over identity, accounts, and update timelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Experience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;More seamless onboarding, shared use, and app management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-tldr-apple-mdm-in-2025&quot; tabindex=&quot;-1&quot;&gt;🧠 TL;DR: Apple MDM in 2025&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Vision Pro fully supported&lt;/li&gt;
&lt;li&gt;✅ Seamless device-to-server migration&lt;/li&gt;
&lt;li&gt;✅ Declarative control over Safari, apps, and updates&lt;/li&gt;
&lt;li&gt;✅ Identity-first onboarding and access&lt;/li&gt;
&lt;li&gt;✅ Shared device workflows—reimagined&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Intune and PSSO</title>
    <link href="https://ssmacadmin.com/posts/2023-09-25-PSSO Intune/"/>
    <updated>2023-09-25T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2023-09-25-PSSO Intune/</id>
    <content type="html">&lt;h2 id=&quot;intune-and-platform-single-sign-on&quot; tabindex=&quot;-1&quot;&gt;Intune and Platform Single Sign-On&lt;/h2&gt;
&lt;p&gt;Microsoft is taking a significant step forward by introducing Platform Single Sign-On (SSO) functionality to macOS devices in Intune.&lt;/p&gt;
&lt;p&gt;In essence, Platform SSO marks a progression from the Extensible SSO payload. The noteworthy aspect is its availability at the login window, enabling users to seamlessly log in with their Identity Provider (IdP) credentials (such as Entra ID, Okta, etc.), subsequently gaining automatic access to business applications and websites. This synchronization between the local account and the IdP ensures a consistent login experience, requiring users to remember only one password.&lt;/p&gt;
&lt;p&gt;Platform SSO offers two supported authentication methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Password Authentication&lt;/strong&gt;: Users can authenticate using either a local or IdP password.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure Enclave&lt;/strong&gt;: This method establishes SSO without impacting the local account password.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;prep&quot; tabindex=&quot;-1&quot;&gt;Prep&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Microsoft Intune&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mac devices using ADE (Automated Device Enrollment) or Device Enrolment.&lt;/li&gt;
&lt;li&gt;Create a Microsoft SSO configuration profile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Device&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Ventura 13.0 or later&lt;/li&gt;
&lt;li&gt;Company Portal app (Currently only support version 5.2307.99, Preview release)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;configuration&quot; tabindex=&quot;-1&quot;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;First, we need to create a SSO Payload and we will be using the Settings Catalog for this.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_profile_create.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then we click on &#39;+ Add Settings&#39; and search for &#39;Extensible Single Sign On&#39;, and select the options as shown in the screenshot, and configure accordingly.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_profile_settings.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Save the configuration and deploy it to a device that got the correct version of the Company Portal.&lt;/p&gt;
&lt;p&gt;When deployed, the profile should look like the screenshot:
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_profile_on_device.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-experience&quot; tabindex=&quot;-1&quot;&gt;The experience&lt;/h2&gt;
&lt;p&gt;From the perspective of both the device and the user, the experience is remarkably seamless. After setting up the Company Portal and logging in, a toast notification will prompt the user to utilize their IdP password for logging into the Mac.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_toast_register.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Clicking on &amp;quot;Register&amp;quot; will redirect you to the device registration process with Microsoft Entra.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_toast_register_entra.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Upon completion, the final prompt will request your current local device password. Once entered and confirmed, the Platform SSO payload is fully implemented. From this point forward, the user can use their IdP credentials to log in to the device directly from the login screen.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_toast_register_complete.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To verify the successful registration of the device and the reception of tokens, simply type &lt;strong&gt;app-sso platform -s&lt;/strong&gt; in the terminal to view all configurations.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_terminal.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;thoughts&quot; tabindex=&quot;-1&quot;&gt;Thoughts&lt;/h2&gt;
&lt;p&gt;This is a great step for the IdP sync for Intune and macOS devices. No more hassle with the SSO Extension and kerberos sync with On-Prem and use of VPN to enable the sync in the first place.&lt;/p&gt;
&lt;p&gt;I&#39;m really looking forward to seeing how PSSO evolves within Intune, and I&#39;ve got my fingers crossed for seamless integration with the onboarding experience during an ADE enrollment.&lt;/p&gt;
&lt;p&gt;And just peeking into the Settings Catalog for Platform SSO, it&#39;s pretty clear that there are some seriously cool features in the works.
&lt;img src=&quot;https://ssmacadmin.com/static/img/psso_new_settings.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Compliance Policies</title>
    <link href="https://ssmacadmin.com/posts/2022-10-07-Compliance Policies/"/>
    <updated>2022-10-19T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2022-10-07-Compliance Policies/</id>
    <content type="html">&lt;h2 id=&quot;think-it-through&quot; tabindex=&quot;-1&quot;&gt;Think it through&lt;/h2&gt;
&lt;p&gt;I see so very often that there is only one compliance policy assigned in Intune (per OS). This grinds my gears, and I get in discussions a lot why this is not such a great practice when I get out to customers or other vendors that have set up the environment. Especially if the setup is as a BYOD environment without DEP.&lt;br /&gt;
In general, there is nothing wrong with one policy, but it’s quite an obstacle to work around and it get dirty very fast. The user experience is not quite there and the support team will be confused initially before looking up the device in Intune. And as of late with the great super patch for iOS which is to upgrade to iOS 15.7 or, if you use an older device (iPhone 5s, 6, 6 Plus and iPad Air, Mini 2/3 and iPod touch 6th Gen), iOS 12.5.6. You should not let anything below that through. Both for the sake of your organisation and to help the user with security.&lt;br /&gt;
As you can see it&#39;s a great mess.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/single_compliance.png&quot; alt=&quot;single policy&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:center&quot;&gt;Please dont :(&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;With iPhone 14 released and iOS 16 is out in the wild, we need to be able to segregate devices in a better way than to lock everything in one policy and assign it to a specific group. This will also benefit the user when they receive a notification why their device isn&#39;t compliant, since we don’t want to push generic “Contact your local IT for help” mail. &lt;br /&gt;As a rule of thumb with everything related to Intune, SPLIT – THINGS - UP! We need to be flexible since there is a lot going on with versions of iOS and hardware models.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;Before we begin, iOS 16 will require a hardware of the following models:&lt;/summary&gt;
&lt;br /&gt;
iPhone 14&lt;br /&gt;
iPhone 14 Plus&lt;br /&gt;
iPhone 14 Pro&lt;br /&gt;
iPhone 14 Pro Max&lt;br /&gt;
iPhone 13&lt;br /&gt;
iPhone 13 mini&lt;br /&gt;
iPhone 13 Pro&lt;br /&gt;
iPhone 13 Pro Max&lt;br /&gt;
iPhone 12&lt;br /&gt;
iPhone 12 mini&lt;br /&gt;
iPhone 12 Pro&lt;br /&gt;
iPhone 12 Pro Max&lt;br /&gt;
iPhone 11&lt;br /&gt;
iPhone 11 Pro&lt;br /&gt;
iPhone 11 Pro Max&lt;br /&gt;
iPhone XS&lt;br /&gt;
iPhone XS Max&lt;br /&gt;
iPhone XR&lt;br /&gt;
iPhone X&lt;br /&gt;
iPhone 8&lt;br /&gt;
iPhone 8 Plus&lt;br /&gt;
iPhone SE (2nd generation or later)&lt;br /&gt;
&lt;/details&gt;
&lt;br /&gt;
&lt;details&gt;
&lt;summary&gt;iPadOS 16 have the following:&lt;/summary&gt;
&lt;br /&gt;
iPad Pro (all models)&lt;br /&gt;
iPad Air (3rd generation and later)&lt;br /&gt;
iPad (5th generation and later)&lt;br /&gt;
iPad mini (5th generation and later)&lt;br /&gt;
&lt;/details&gt;
&lt;br /&gt;
&lt;h2 id=&quot;filter-like-a-coffeemaker&quot; tabindex=&quot;-1&quot;&gt;Filter like a coffeemaker&lt;/h2&gt;
&lt;p&gt;We need to talk filters. This will be our little cuddle bear in this transformation. A such small and simple thing as a filter will improve the QoL quite a lot, and we can get a better understanding of the environment as well. And it work faster than dynamic groups, since we don&#39;t need to rely on AAD syncs.
Filters are quite easy to set up and can be powerful (not just for Compliance policies, also for profiles and applications).&lt;br /&gt;
We need to create some filters. One that filters out all devices that’s above iPhone 8 and one filter for iPhone 7 and below. You can either write the syntax, or use the drop downs to create it.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Devices - Filter&lt;/strong&gt; and hit create. We need to create three different filters.&lt;/p&gt;
&lt;p&gt;Legacy devices:&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;(device.model -contains &quot;iPhone 5s&quot;) or (device.model -contains &quot;iPhone 6&quot;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Current devices:&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;(device.model -contains &quot;iPhone SE&quot;) or (device.model -contains &quot;iPhone 8&quot;) or (device.model -contains &quot;iPhone X&quot;) or (device.model -contains &quot;iPhone 11&quot;) or (device.model -contains &quot;iPhone 12&quot;) or (device.model -contains &quot;iPhone 13&quot;) or (device.model -contains &quot;iPhone 14&quot;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As we can see with this filter for example, if we choose to preview devices, we can see that it filters through all versions of the specific models we have applied in the syntax.
&lt;img src=&quot;https://ssmacadmin.com/static/img/preview.png&quot; alt=&quot;Preview&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The forgotten iPhone 7:&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;(device.model -contains “iPhone 7”)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should have the following filters created:
&lt;img src=&quot;https://ssmacadmin.com/static/img/filters.png&quot; alt=&quot;Filters&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With the filters ready to go, let’s create policies.&lt;/p&gt;
&lt;h2 id=&quot;create-the-policies&quot; tabindex=&quot;-1&quot;&gt;Create the policies&lt;/h2&gt;
&lt;p&gt;We want to split the policies, so we need three (unfortunately, because Apple droppen iPhone 7 from iOS 16...) policies for version handling, and this is where you can freebase, either you can run the rest in one policy (depending on your needs), or you can split it up further. This is where you decide how informative you want to be towards the users.&lt;/p&gt;
&lt;div class=&quot;alert alert-info shadow-lg&quot;&gt;
  &lt;div&gt;
    &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;stroke-current flex-shrink-0 w-6 h-6&quot;&gt;&lt;path stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;span&gt;A note for &lt;b&gt;macOS&lt;/b&gt; specifically. Changing a policy touching &lt;b&gt;&lt;i&gt;passwords&lt;/i&gt;&lt;/b&gt; (complexity, etc) will trigger a password reset on targeted users macOS devices.&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So head to &lt;strong&gt;Devices - iOS/iPad OS - Compliance Policies&lt;/strong&gt; and click on Create Policy.
Here we need to create three different policies to only handle version verification. Name them as you see fit, as long as you know which policy is which. In my example, I&#39;m configuring the legacy compliance. And we only set minimum OS version in these policies.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/compliance_policy_legacy_settings.png&quot; alt=&quot;Preview&quot; /&gt;
Version Setttings&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/compliance_policy_notification.png&quot; alt=&quot;Preview&quot; /&gt;
Select the actions you want to have for the policy&lt;/p&gt;
&lt;p&gt;In the ‘Assignments’ tab, click on “Add all users”, and then we can select “Edit Filter”. This is where we let the filter do all the work for us.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/compliance_policy_legacy_filterassignment.png&quot; alt=&quot;Preview&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Save the policy and let Intune do the work for us.&lt;/p&gt;
&lt;p&gt;When all our policies are created, we should have the following stack:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/complete_compliance_policy.png&quot; alt=&quot;Preview&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;maintenance&quot; tabindex=&quot;-1&quot;&gt;Maintenance&lt;/h2&gt;
&lt;p&gt;The maintenance is low. When the next iOS or iPadOS is released, or a new version of the devices, simply bump up the values of the minimum OS version in the policy, and add/remove/move the models in the filters.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;With the split of the policys, and addition to filters, we have more control over the versionhandling of the devices, and we can easily move the models around if necessary when new releases of either OS or models. We also make it easy for the user to understand what is the cause why they can&#39;t access company data because of the compliance policy. And if the user need to contact IT for assistance, they don&#39;t need to troubleshoot or look up the device, they have the answer in the email that&#39;s sent.&lt;/p&gt;
&lt;p&gt;So all in all, we make everyone happy :)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>WWDC, what&#39;s in it for MDM?</title>
    <link href="https://ssmacadmin.com/posts/2022-07-23-WWDC, what&#39;s in it for MDM/"/>
    <updated>2022-07-23T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2022-07-23-WWDC, what&#39;s in it for MDM/</id>
    <content type="html">&lt;p&gt;Apple&#39;s WWDC 2022 gave us quite some tings to have in mind going through the year. Both with macOS 13 (Ventura) and iOS and iPadOS 16. &lt;br /&gt;
Let&#39;s have a look and see what delicious features they are providing, some might have the potential to be disruptive, some might not. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;lets-start-with-hardware-limitations-for-macos-ventura&quot; tabindex=&quot;-1&quot;&gt;Let&#39;s start with hardware limitations for macOS Ventura&lt;/h2&gt;
&lt;p&gt;Sometimes when a new OS drops, some hardware adoptions might be needed due to security features it provides. Ventura will drop support for a quite hefty portion of hardware compared to other versions.&lt;/p&gt;
&lt;p&gt;You will need a device no older than 2017. For MacBook Air and Mini, push it to 2018. Mac Pro users, you need the cheesegrater. Time to throw my own trascan in the... trashcan.&lt;/p&gt;
&lt;p&gt;The list is the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;MacBook 2017 and later&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;MacBook Pro 2017 and later&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;iMac 2017 and later&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;iMac Pro 2017&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;MacBook Air 2018 and later&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Mac Mini 2018 and later&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Mac Pro 2019 and later&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;h2 id=&quot;platform-single-sign-on&quot; tabindex=&quot;-1&quot;&gt;Platform Single Sign-On&lt;/h2&gt;
&lt;p&gt;With this update, Apple will release Platform Single Sign-On. This allows the user to utilize, in example, their Azure AD or company account to unlock their devices. This will automatically keep the device&#39;s local account password in synd with the cloud password. Which will result in a more seamless sign-on experience.&lt;/p&gt;
&lt;p&gt;The best part is, we can create config profiles for this! I really hope Microsoft will dish this one out quite fast for their Company Portal! They have given a timeline of this fall.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://ssmacadmin.com/static/img/Plat_SSO.png&quot; alt=&quot;Platform Single Sign-On&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:center&quot;&gt;Apple Platform Single Sign-on&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;gatekeeper&quot; tabindex=&quot;-1&quot;&gt;Gatekeeper&lt;/h2&gt;
&lt;p&gt;Gatekeeper will do a bit of a switcharoo in macOS Ventura, instead of checking the code at first run as it does today. It will include checking notarized apps if they have been altered/modified after the initial launch by unathorized processes. Apple has stated that &lt;em&gt;some&lt;/em&gt; processes are allowed, but those processes has to be allowed by the developer.&lt;/p&gt;
&lt;p&gt;This boils down to apps with autoupdaters, etc. Check your apps!&lt;/p&gt;
&lt;p&gt;Altough, with these amazing news, the Gatekeeper check is overridable by users. I&#39;ll give it a try to see if these settings will be modifiable by admins.&lt;/p&gt;
&lt;h2 id=&quot;passkeys&quot; tabindex=&quot;-1&quot;&gt;Passkeys&lt;/h2&gt;
&lt;p&gt;A collaboration with Google, Microsoft, and other big players on the field, they have been working on a technology for web and remote services which they call &#39;Passkeys&#39;. This is an aim to solve problems with passwords in general.&lt;/p&gt;
&lt;p&gt;It&#39;s essentially a public-private key encryption.
One key is stored (securely) on the device, and the other key in the cloud/server. Each passkey is generated for a single account. We don&#39;t need to remember the passwords, and the device will automatically let the user to choose the available passkey when trying to log on to a service. You can then use FaceID or TouchID to verify the ownership and login.&lt;/p&gt;
&lt;p&gt;Passkeys will be stored in, for Apple users, the iCloud Keychain. So as long as you have access to a device with your iCloud account logged on, and synced with Keychain, you should be good to go.&lt;/p&gt;
&lt;h2 id=&quot;login-items-launchagents-and-launchdaemons&quot; tabindex=&quot;-1&quot;&gt;Login Items, LaunchAgents and LaunchDaemons&lt;/h2&gt;
&lt;p&gt;With the rehaul of the &#39;System Preferences&#39; application, it&#39;s now &#39;System Settings&#39;, and it&#39;s quite similar to the iOS/iPadOS format (or, it&#39;s a copy).&lt;/p&gt;
&lt;p&gt;From a security standpoint, some features that&#39;s nice is the ability to now manage Login Items, LaunchAgens and LaunchDaemons from a single place in System Settings. Previously we had to use the Terminal, jump into hidden folders in Finder or use 3rd Party Softwares. This can give us a great benefit to actually pull data and see if some applications silently add persistence items without authorization from the user.&lt;/p&gt;
&lt;p&gt;While these are good tools for administrators. For a user to go in here and turn of a bunch of launchers might not be that optimal since enterprises might use applications with dependencies that&#39;s required for critical systems. So let us hold out thumbs that we can lock this down a bit!&lt;/p&gt;
&lt;h2 id=&quot;so-all-in-all&quot; tabindex=&quot;-1&quot;&gt;So all in all...&lt;/h2&gt;
&lt;p&gt;A lot of the new features are very welcomed and let us hope they give us even more tools to work with in an enterprise environment (looking at you Software Updates...)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>KFM your OneDrive</title>
    <link href="https://ssmacadmin.com/posts/2022-05-12-KFM your OneDrive/"/>
    <updated>2022-05-15T00:00:00Z</updated>
    <id>https://ssmacadmin.com/posts/2022-05-12-KFM your OneDrive/</id>
    <content type="html">&lt;p&gt;Microsoft has finally released the option to KFM your files to OneDrive on macOS (Late Feb/early March). This has been a function that has been available for a while on Windows.&lt;/p&gt;
&lt;p&gt;We are currently able to sync folders Desktop, Documents and Pictures. Pictures is optional and has to be added in the profile.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning shadow-lg&quot;&gt;
	&lt;div&gt;
		&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; class=&quot;stroke-current flex-shrink-0 h-6 w-6&quot; fill=&quot;none&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
		&lt;span&gt;Note that you can only have one sync of these folders activated, i.e; you can not have iCloud Drive sync and OneDrive sync enabled at the same time.&lt;/span&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So, let&#39;s get started.
&lt;br /&gt; We need to following to start creating the config:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correct version of OneDrive installed, the minimum version of OneDrive on macOS need to be 22.022.&lt;/li&gt;
&lt;li&gt;Azure TenantID.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The important configurations we need to have in our mobileconfig is the following keys:&lt;br /&gt;
&lt;b&gt;Automatically move known folders&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMSilentOptIn&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;(TenantID)&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;If you want to prompt the users, use the following key.&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMOptInWithWizard&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;(TenantID)&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This leaves us with a OneDrive config initially with these settings:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;OneDrive configuration part of mobileconfig&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token prolog&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;plist&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;PUBLIC&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;-//Apple//DTD PLIST 1.0//EN&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;plist&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;1.0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadContent&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;DisablePersonalSync&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;FilesOnDemandEnabled&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;OpenAtLogin&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMSilentOptIn&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;(TenantID)&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMBlockOptOut&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDisplayName&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Microsoft OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadIdentifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadUUID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{UUID-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadVersion&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Although this might look sufficient, we need to allow OneDrive for Full Disk access along with Desktop and Documents folder. We can add these TCC configurations in the same config file. If you want to, you can create a separate configuration in your MDM to grant OneDrive those permissions.&lt;/p&gt;
&lt;p&gt;So we need to add the following:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Allow OneDrive disk access&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDisplayName&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Privacy Preferences Policy Control #1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadIdentifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.apple.TCC.configuration-profile-policy&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.apple.TCC.configuration-profile-policy&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadUUID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{UUID-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadVersion&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Services&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyAllFiles&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDesktopFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDocumentsFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDownloadsFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So all in all, our full mobileconfig will look like the following XML:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Full code for KMF OneDrive!&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token prolog&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;plist&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;PUBLIC&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;-//Apple//DTD PLIST 1.0//EN&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;plist&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;1.0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadContent&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;DisablePersonalSync&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;FilesOnDemandEnabled&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;OpenAtLogin&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMSilentOptIn&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;(TenantID)&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;KFMBlockOptOut&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDisplayName&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Microsoft OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadIdentifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadUUID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{YOUR-PAYLOADUUID-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadVersion&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDisplayName&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Privacy Preferences Policy Control #1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadIdentifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.apple.TCC.configuration-profile-policy&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.apple.TCC.configuration-profile-policy&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadUUID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{YOUR-PAYLOADUUID-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadVersion&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Services&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyAllFiles&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDesktopFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDocumentsFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SystemPolicyDownloadsFolder&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Allowed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;CodeRequirement&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;identifier &quot;com.microsoft.OneDrive&quot; and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = UBF8T346G9&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Identifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;IdentifierType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;bundleID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;StaticCode&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;						&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDescription&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadDisplayName&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadIdentifier&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;com.microsoft.OneDrive&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadOrganization&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{YOUR-ORGANIZATION-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadScope&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;System&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Configuration&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadUUID&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{YOUR-PAYLOAD-GOES-HERE}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;PayloadVersion&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;TargetDeviceType&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;key&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;5&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;integer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;plist&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;&lt;b&gt;Have fun and good luck!&lt;/b&gt;&lt;/p&gt;
</content>
  </entry>
  
</feed>