Resources/icli.entitlements is the authoritative signing profile for the shipped CLI. This inventory covers all 67 keys and their exact configured values. The complete profile is tested together on the rootless vphone; individual keys have not been tested by removing them one at a time. Descriptions below explain each capability's intended role, not a claim that every key is necessary on every iOS release. Private capabilities depend on the OS and bootstrap.
When linking IcliKit or IcliSystem, entitlements must be granted to the final calling executable or app. The Swift Package guide maps the read-only IcliSystem calls onto the keys below and says which of those are verified. SwiftPM does not apply this file to consumers or sign them. Use your own application-identifier and com.apple.application-identifier; the com.icli.icli values identify the CLI. Integrate only the feature groups your host needs using its existing signing process. Ordinary provisioning cannot grant this private platform profile.
Entitlements do not make a process root. Package installation/removal, account password changes, reboots, and privileged filesystem/service operations require the appropriate effective UID. No command elevates itself or launches sudo. Keychain, app data, screenshots, and interaction remain subject to the system's actual access decisions; the library does not promise access to protected content.
| Key | CLI value | Intended role |
|---|---|---|
platform-application |
true |
Platform identity used by privileged system service clients; environmentReport() checks actual platform status separately. |
application-identifier |
com.icli.icli |
CLI application identity; replace with the consumer's own identifier. |
com.apple.application-identifier |
com.icli.icli |
Companion platform application identity; replace with the consumer's own identifier. |
com.apple.private.security.no-sandbox |
true |
CLI process environment for device-wide filesystem and system service operations. |
com.apple.private.security.container-required |
false |
CLI does not require an application container. |
com.apple.private.security.no-container |
true |
Companion container policy for a standalone executable. |
com.apple.private.skip-library-validation |
true |
Bootstrap/private-library loading profile; not itself a library dependency or a guarantee of load permission. |
| Key | CLI value | Intended role |
|---|---|---|
com.apple.private.security.storage.AppBundles |
true |
App bundle storage used for inspection and registration. |
com.apple.private.security.storage.AppDataContainers |
true |
App data container inspection. |
com.apple.backboardd.launchapplications |
true |
BackBoard app launch client capability. |
com.apple.springboard.launchapplications |
true |
SpringBoard app launch client capability. |
com.apple.frontboard.launchapplications |
true |
FrontBoard launch/relaunch actions. |
com.apple.frontboard.shutdown |
true |
FrontBoard shutdown/relaunch action used by respring. |
com.apple.springboard.opensensitiveurl |
true |
SpringBoard URL opening profile; URL handling still depends on the OS. |
com.apple.private.mobileinstall.allowedSPI |
Browse, Lookup, Install, Uninstall, InstallForLaunchServices, UninstallForLaunchServices, CopyInstalledAppsForLaunchServices |
Allowed MobileInstallation SPI names: discovery, installation/removal, and LaunchServices-specific registration bookkeeping. |
com.apple.private.coreservices.canmaplsdatabase |
true |
LaunchServices database mapping for app/proxy queries. |
com.apple.lsapplicationworkspace.rebuildappdatabases |
true |
Workspace app database maintenance profile. |
com.apple.private.coreservices.can-perform-rebuild-registration |
true |
Registration maintenance/rebuild profile. |
com.apple.private.coreservices.lsaw |
true |
LSApplicationWorkspace operations. |
com.apple.private.coreservices.can-register-install-results |
true |
Register installation results with LaunchServices. |
com.apple.private.coreservices.can-send-install-notifications |
true |
Installation/removal notification capability. |
com.apple.private.coreservices.canforcedatabasegc |
true |
Database cleanup capability retained in the registration profile; no explicit GC command is exposed. |
com.apple.private.coreservices.canmapbundleidtouuid |
true |
Bundle identifier/container mapping capability. |
com.apple.private.installcoordinationd.daemon |
true |
Installation coordination profile retained for app maintenance. |
com.apple.private.MobileContainerManager.allowed |
true |
MobileContainerManager operations associated with app installation/removal. |
com.apple.private.MobileContainerManager.delete |
true |
Container deletion associated with app removal. |
com.apple.private.security.container-manager |
true |
Companion container manager capability. |
| Key | CLI value | Intended role |
|---|---|---|
com.apple.private.hid.client.event-dispatch |
true |
Touch, keyboard, and button HID dispatch. |
com.apple.private.hid.client.event-monitor |
true |
HID client profile; independent necessity is unverified. |
com.apple.hid.manager.user-access-device |
true |
HID device client access. |
com.apple.private.hid.client.event-filter |
true |
HID client profile; independent necessity is unverified. |
com.apple.backboard.client |
true |
BackBoard display/input state client. |
com.apple.springboard.orientationlock |
true |
Orientation lock inspection and updates. |
com.apple.private.accessibility.inspection |
true |
AX element inspection and hit testing. |
com.apple.accessibility.api |
true |
Accessibility API client profile. |
com.apple.private.accessibility.look-me-up-setup |
true |
Accessibility client setup profile. |
com.apple.private.webkit.pasteboard |
true |
Pasteboard service client profile for direct CLI clipboard access. |
com.apple.private.pasteboard.check-pasteboard |
true |
Pasteboard service checks. |
com.apple.Pasteboard.background-access |
true |
Clipboard access without a foreground app. |
com.apple.Pasteboard.paste-unchecked |
true |
CLI pasteboard access profile; receiving apps still have their own paste permission behavior. |
com.apple.backboard.displaybrightness |
true |
Brightness access through BackBoard. |
com.apple.private.allow-explicit-graphics-priority |
true |
Graphics client profile used for direct display capture. |
com.apple.private.IOSurface.protected-access |
true |
IOSurface capture profile; protected-content capture is not an acceptance guarantee. |
com.apple.QuartzCore.displayable-context |
true |
QuartzCore display context profile. |
com.apple.QuartzCore.global-capture |
true |
Device display capture client profile. |
com.apple.QuartzCore.secure-mode |
true |
QuartzCore capture profile; no protected-content guarantee. |
com.apple.security.iokit-user-client-class |
IOHIDLibUserClient, IOHIDEventServiceFastPathUserClient, IOSurfaceRootUserClient, IOSurfaceAcceleratorClient, IOMobileFramebufferUserClient, AppleJPEGDriverUserClient, IOHIDUserDevice |
IOKit client class allowlist: HID input/events, IOSurface/display capture, image acceleration, and HID user devices. |
OCR uses Vision and the captured image; there is no separate OCR entitlement in this profile. A host's normal UIKit presentation, privacy strings, and user permission flows remain the host's responsibility.
| Key | CLI value | Intended role |
|---|---|---|
com.apple.private.xpc.launchd.per-user-lookup |
true |
Query services in the foreground user's launchd domain. |
com.apple.private.xpc.service-configure |
true |
Required for service mutations such as start and stop. Declaring it does not grant every launchctl operation; launchd also checks the calling process and its privileges. |
com.apple.private.xpc.launchd.userspace-reboot |
true |
Userspace reboot request capability; root is also required. |
com.apple.private.logging.stream |
true |
Unified log streaming. |
com.apple.diagnosticd.stream |
true |
Diagnostic service log stream access. |
com.apple.private.logging.diagnostic |
true |
Diagnostic logging client profile. |
task_for_pid-allow |
true |
Retained process inspection capability; current process listing uses sysctl/proc APIs rather than task_for_pid. |
proc_info-allow |
true |
Process metadata/executable path inspection. |
com.apple.system-task-ports.read |
true |
Retained system task inspection profile; no public task-port API is exposed by IcliKit. |
com.apple.private.kernel.get-kext-info |
true |
Retained kernel inspection profile; current IORegistry traversal does not expose a kext query API. |
com.apple.private.network.statistics |
true |
Retained network inspection profile; packet capture uses BPF and requires device access/root. |
com.apple.private.security.storage.DiagnosticReports.read-write |
true |
Diagnostic report storage access; crash commands read reports. |
com.apple.CommCenter.fine-grained |
spi, data-allowed-write |
CoreTelephony policy query SPI and per-app data-policy write capability. |
com.apple.powerd.lowpowermode.allow |
true |
Connecting to powerd's Low Power Mode service to turn it on or off. Verified on iOS 18.5: without it powerd rejects the connection. |
com.apple.private.amfi.developer-mode-control |
true |
Arming Developer Mode through amfid, as vphoned does. Reading the status does not need it (verified on iOS 18.5); arming was not run on a test device. |
| Key | CLI value | Intended role |
|---|---|---|
com.apple.locationd.simulation |
true |
Required for location set and location clear: without it locationd silently ignores CLSimulationManager requests, even from root (verified on iOS 18.5). |
com.apple.locationd.effective_bundle |
true |
Required for location get: it lets the CLI read as a System Services location bundle, because locationd never authorizes a bare executable (verified on iOS 18.5). |
com.apple.locationd.preauthorized is not in the profile: on iOS 18.5 it neither authorizes a bare executable nor is needed once the client names a location bundle.
| Key | CLI value | Intended role |
|---|---|---|
keychain-access-groups |
icli.test |
Access group used for self-created test credentials. |
com.apple.keystore.access-keychain-keys |
true |
Retained Keychain client capability; independent necessity is unverified. |
com.apple.private.security.system-keychain |
true |
Retained system Keychain capability; acceptance only operates on fixture items in icli.test. |
The shipped CLI's access-group entitlement lists only icli.test. The library accepts a group argument and relies on the host's granted entitlements and system Keychain checks. A consumer's own identity/signing configuration does not automatically grant icli.test. Keep real credentials out of the acceptance fixture namespace and logs. This profile and test suite do not certify access to other apps' credentials.
make all signs the CLI with the authoritative file. scripts/check-packages.sh extracts the signed entitlements using ldid -e, compares the entire plist with that file, and verifies both DEB layouts contain the same executable. The acceptance report identifies the fully tested binary and device. RootHide service inspection has been checked on iOS 18.5; its full privileged acceptance suite remains pending.
scripts/check-entitlements.py checks that this inventory includes every key and exact configured value, so additions or changes require a documentation update. A matching inventory is not proof that a platform will grant an entitlement or that an entry is individually required.