I am looking into bypassing the following popup when setting up an iPhone 15 Pro:
Would the SkipKey SIMSetup allow to bypass having the following window popup upon initial setup? So far all settings are bypassed during the initial setup of the phone and the application of Wi-Fi. The only issue present in the setup I want to achieve is prohibiting this window regarding eSIM set up.
Explore the intersection of business and app development. Discuss topics like device management, education, and resources for aspiring app developers.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
We have a development where we are MDM managing iOS devices and attempting to enforce mutual TLS for all interactions with the MDM. We are DEP provisionng an enrolment profile that utilises an ACME hardware attested Device Identity Certificate. All interactions with the MDM endpoints are correctly utilising the ACME certificate for the client mutual TLS handshake. The certificate has Client Authentication Extended Key Usage.
Behind the same API gateway and on the same SNI we are also serving paths to Enterprise application manifests and IPAs. We can see from the phone log and from packet traces the iOS device doesn't offer the Device Identity Certificate for client authentication when retrieving these URLs. We have also tried adding non ACME client certificates from the root trusted by the server to the initial profile with exactly the same outcome.
If we temporarily disable the mutualTLS we can see that the request for the manifest has a userAgent of
"com.apple.appstored/1.0 iOS/18.2 model/iPhone17,3 hwp/t8140 build/22C5125e (6; dt:329) AMS/1"
which is not the same as the mdm interactions. Is it actually possible to achieve mutualTLS to authenticate these downloads or is a different solution required ?
Any advice greatly appreciated.
Hello,
I write my bachelor-thesis about geolocation data on an iPhone. I write a small app to get the actual coordinates and saved into a sqlite database. so far so far. Now I have a GPS-generator from R&S to simulate gps-data and satellites. I can simulate 6 satellites parallel to my "fake" geolocation. I write the app also on an Android -smartphone, this Android can display the Satellites-ID and the "fake" geolocation..thats fine for my thesis. But my iPhone would not display anything I this setup?
During outside the app would be deliver the actual coordinate, but with the signal.genarator I can't get coordinates.
I try GPS, Glosnass, Galileo and Beidoo but nothing happens on my iPhone 12mini.
The IOS is 18.1 and I use the core Location api.
Has anybody some ideas for me and my thesis?
Topic:
Business & Education
SubTopic:
General
Hello,
at our school we are using a kerberos proxy. Now we will introduce ipads. In my tests I have set this proxy in wifi settings. On next internet connection I was asked for my account credentials. After that I had full access to internet with ALL apps.
Obviously ios has set up a network relay which handles the kerberos authentication for the while device.
I have searched for documentation on this topic, but you will find only docs for kerberos with SSO and per app tickets.
Do someone has hints for this? Especially where are the password for the kerberos authentication stored on the ipad - it is not the same as in the wifi proxy settings!
With regards,
Helge
I'm developing an ACME server to issue identity certificates to macOS/iOS devices for MDM attestation, following RFC 8555. Per RFC, the client creates an order, performs authorization, verifies the challenge, and finalizes the order by submitting a CSR to the CA.
In my setup, the CA sometimes takes longer to issue the certificate (around 50 seconds). According to RFC 8555, if certificate issuance isn’t complete after the /finalize call, the server should respond with an "order" object with a "processing" status. The client should then send a POST-as-GET request to the order resource (e.g., /order/<order_id>) to check the current state. If the CA still hasn’t issued the certificate, the server should return the order object with the same "processing" status and include a "Retry-After" header, indicating when the client should retry. The client is expected to poll the order resource at this specified interval with POST-as-GET requests.
However, it seems the Apple ACME client ignores the "Retry-After" header and instead returns the error: "Profile failed - Order status is processing, not yet valid" immediately upon the first poll response with "processing." Apple ACME client deviating from the RFC documentation.
Has anyone found a reliable solution to this issue? Or does Apple supports asynchronous order finalization?
Ref -https://datatracker.ietf.org/doc/html/rfc8555#:~:text=A%20request%20to%20finalize%20an%20order%20will%20result%20in%20error,to%20the%20%22certificate%22%20field%20of%20the%20order.%20%20Download%20the%0A%20%20%20%20%20%20certificate.
To work around this, I’m holding the /finalize call until the CA issues the certificate. This works when issuance is quick (under 20 seconds), but if it takes more than that , the client times out. Interestingly, the Apple ACME client’s timeout appears shorter than the usual 60-second URLSession default.
I have the following setup:
Managed domain (pdfforge.org)
Managed app (Dropbox) with Files app integration.
This can also occur with the following setup:
A custom browser is installed as managed (ex Firefox)
No managed domains
Managed app (Dropbox) with Files app integration.
Trying to upload a file from Dropbox in this managed domain by clicking on the Dropbox folder causes the folder to disappear and instead I am rerouted to the On My Phone directory.
On subsequent tries, sometimes the folder opens and I can see the files, but while scrolling the files disappear.
This makes it unable to upload any files from Dropbox to this managed domain.
If both the managed app and domains are not set up, then everything works normally.
Is this happening to everyone else? I also tried with Nextcloud and Google Drive.
How to apply for Apple one-on-one consultation。
How to contact Cook
We provide a MDM product.
In our product, payloads and properties which require supervision display those requirements.
Two properties forcePreserveESIMOnErase and allowWebDistributionAppInstallation of the restriction payload don’t require a supervised device according to the descriptions in Apple Developer Documentation.
However, in our observation, those properties seem to require it.
Are those OS bugs or documentation errors?
(In which category should I submit a feedback?)
Steps to reproduce
Prepare a supervised device (I used an iPhone 12 mini with iOS 18.1) and a configuration profile contains the following restrictions:
<!-- Does not require a supervised device -->
<key>allowDiagnosticSubmission</key>
<false/>
<!-- Requires a supervised device -->
<key>allowESIMModification</key>
<false/>
<!-- Does not require a supervised device according to its description -->
<key>allowWebDistributionAppInstallation</key>
<false/>
<!-- Does not require a supervised device according to its description -->
<key>forcePreserveESIMOnErase</key>
<true/>
Then,
Install the profile with Apple Configurator.
Confirm 4 restrictions are shown in Settings > General > VPN & Device Management > PayloadDisplayName > Restrictions.
Punch Settings > General > Transfer or Reset iPhone > Erase All Content and Settings, to unsupervise.
Install the profile with Apple Configurator. It cannot be installed automatically because the device was not supervised.
Manually install the downloaded profile.
Check Settings > General > VPN & Device Management > PayloadDisplayName > Restrictions.
Expected results
3 restrictions—allowDiagnosticSubmission, allowWebDistributionAppInstallation and forcePreserveESIMOnErase—are shown.
Actual results
Only one restriction—allowDiagnosticSubmission—is shown.
Appendix: Restriction keys and their restricted message shown in Settings
allowESIMModification: eSIM modification not allowed
forcePreserveESIMOnErase: Preserve eSIM on erase enforced
allowWebDistributionAppInstallation: Web app distribution not allowed
allowDiagnosticSubmission: Diagnostic submission not allowed
I have an issue with my MDM setup. The Push notification that installs and updates configuration profile in the device is no longer working. It was working
before Apple developer account got expired
we renewed our apple developer account and then retried and we got the device enrollment working just fine. Now when we are updating configuration profile and MDM server is supposed to notify the device using push notification, this is the part where its not working.
Are the certs faulty now since the account was expired?
Would just renewal of the Push cert work?
Will I have to setup the certs all over again?
Any help is appreciated. Thanks in advance.
We're implementing an MDM system and would like to know if we can get the type of CPU for an enrolled device, I know we can use IsAppleSilicon from the Device Information command but it would be good to know if it's an M1, M2, M3 etc.
We can implement a mapping of product name to CPU type, e.g. Mac16,1 has an M4 chip but this would mean ongoing maintenance that we'd prefer to avoid.
Is there a public web API (ideally first-party provided by Apple) that can be used to lookup details of a device by product name or similar?
Slightly related is the Declarative Device Management documentation for StatusDeviceModelMarketingName offers an alternative of:
use device.model.configuration-code to look up the marketing name through the web API
but doesn't mention which web API.
We want to set key-value pair (installation_token: xxxxx) into an app installed by MDM.
Formerly we could set the key-value using Settings MDM command like this.
<dict>
<key>Command</key>
<dict>
<key>RequestType</key>
<string>Settings</string>
<key>Settings</key>
<array>
<dict>
<key>Configuration</key>
<dict>
<key>installation_token</key>
<string>xxxxxxx</string>
</dict>
<key>Identifier</key>
<string>com.cloudflare.cloudflareoneagent</string>
<key>Item</key>
<string>ApplicationConfiguration</string>
</dict>
</array>
</dict>
We can still use this for the apps installed withInstallApplication MDM command, however we cannot apply this configuration into the app using Declarative Device Management. When we try it, we got an error like this.
<dict>
<key>CommandUUID</key>
<string>.............</string>
<key>Settings</key>
<array>
<dict>
<key>ErrorChain</key>
<array>
<dict>
<key>ErrorCode</key>
<integer>12008</integer>
<key>ErrorDomain</key>
<string>MDMErrorDomain</string>
<key>LocalizedDescription</key>
<string>Could not modify apps managed by Declarative Device Management.</string>
<key>USEnglishDescription</key>
<string>Could not modify apps managed by Declarative Device Management.</string>
</dict>
</array>
<key>Identifier</key>
<string>com.cloudflare.cloudflareoneagent</string>
<key>Item</key>
<string>ApplicationConfiguration</string>
<key>Status</key>
<string>Error</string>
</dict>
</array>
How can we work with managed application configuration with DDM?
I am trying to create a DNS over HTTPS and DNS over TLS server that requires authentication with a client certificate and configure it in the Device Management Profile for use from the iPhone.
I have set the PayloadCertificateUUID in DNSSettings, but it appears that the client certificate is not being used.
Is there anything I should check in advance when using a p12 file with PayloadCertificateUUID?
Configuration Profile
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>295E68E5-39F0-46D1-94E4-4A49EC8392E2</string>
<key>PayloadIdentifier</key>
<string>com.example.dns</string>
<key>PayloadDisplayName</key>
<string>My DNS</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>4CCEE94D-7B72-46AB-87AD-5A368F937339</string>
<key>PayloadIdentifier</key>
<string>com.example.dns.names</string>
<key>PayloadDisplayName</key>
<string>My DNS</string>
<key>PayloadDescription</key>
<string>DNS Settings</string>
<key>PayloadCertificateUUID</key>
<string>07A96080-5FAE-4026-937D-F578530E1444</string>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
<string>TLS</string>
<key>ServerName</key>
<string><!-- my DoT server name --></string>
</dict>
<key>ProhibitDisablement</key>
<false/>
</dict>
<dict>
<key>PayloadType</key>
<string>com.apple.security.pkcs1</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>260CC26A-2DD1-4B16-B8C0-AF1E655576AD</string>
<key>PayloadIdentifier</key>
<string>com.example.certs.intermediate-ca</string>
<key>PayloadDisplayName</key>
<string>Intermediate CA</string>
<key>PayloadDescription</key>
<string>Intermediate CA</string>
<key>PayloadCertificateFileName</key>
<string>ca-chain.cert.cer</string>
<key>PayloadContent</key>
<data><!-- contents of Intermediate CA certificate --></data>
</dict>
<dict>
<key>PayloadType</key>
<string>com.apple.security.root</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>E5DB74AA-3C5F-470B-AAE0-DF072095A2EC</string>
<key>PayloadIdentifier</key>
<string>com.example.certs.root-ca</string>
<key>PayloadDisplayName</key>
<string>Root CA</string>
<key>PayloadDescription</key>
<string>Root CA</string>
<key>PayloadCertificateFileName</key>
<string>ca.cert.cer</string>
<key>PayloadContent</key>
<data><!-- contents of Root CA certificate --></data>
</dict>
<dict>
<key>PayloadType</key>
<string>com.apple.security.pkcs12</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>07A96080-5FAE-4026-937D-F578530E1444</string>
<key>PayloadIdentifier</key>
<string>com.example.certs.client.iseebi</string>
<key>PayloadDisplayName</key>
<string>Client Certificate</string>
<key>PayloadDescription</key>
<string>Client Certificate</string>
<key>Password</key>
<string><!-- password of p12 --></string>
<key>PayloadCertificateFileName</key>
<string>Key.p12</string>
<key>PayloadContent</key>
<data><!-- contents of p12 --></data>
</dict>
</array>
</dict>
</plist>
iPhone console log
Connection 3742: enabling TLS
Connection 3742: starting, TC(0x0)
Connection 3742: asked to evaluate TLS Trust
Connection 3742: TLS Trust result 0
Connection 3742: asked for TLS Client Certificates
Connection 3742: issuing challenge for client certificates, DNs(1)
Connection 3742: asked for TLS Client Certificates
Connection 3742: received response for client certificates (-1 elements)
Connection 3742: providing TLS Client Identity (-1 elements)
Connection 3742: providing TLS Client Identity (-1 elements)
Connection 3742: connected successfully
Connection 3742: TLS handshake complete
Connection 3742: ready C(N) E(N)
Connection 3742: received viability advisory(Y)
Connection 3742: read-side closed
Connection 3742: read-side closed
Connection 3742: read-side closed
Connection 3742: cleaning up
Connection 3742: done
server log (stunnel)
LOG5[9]: Service [dns] accepted connection from <IP>
LOG6[9]: Peer certificate required
LOG7[9]: TLS state (accept): before SSL initialization
LOG7[9]: TLS state (accept): before SSL initialization
LOG7[9]: Initializing application specific data for session authenticated
LOG7[9]: SNI: no virtual services defined
LOG7[9]: OCSP stapling: Server callback called
LOG7[9]: OCSP: Validate the OCSP response
LOG6[9]: OCSP: Status: good
LOG6[9]: OCSP: This update: 2024.12.06 08:32:00
LOG6[9]: OCSP: Next update: 2024.12.13 08:31:58
LOG5[9]: OCSP: Certificate accepted
LOG7[9]: OCSP: Use the cached OCSP response
LOG7[9]: OCSP stapling: OCSP response sent back
LOG7[9]: TLS state (accept): SSLv3/TLS read client hello
LOG7[9]: TLS state (accept): SSLv3/TLS write server hello
LOG7[9]: TLS state (accept): SSLv3/TLS write change cipher spec
LOG7[9]: TLS state (accept): TLSv1.3 write encrypted extensions
LOG7[9]: TLS state (accept): SSLv3/TLS write certificate request
LOG7[9]: TLS state (accept): SSLv3/TLS write certificate
LOG7[9]: TLS state (accept): TLSv1.3 write server certificate verify
LOG7[9]: TLS state (accept): SSLv3/TLS write finished
LOG7[9]: TLS state (accept): TLSv1.3 early data
LOG7[9]: TLS state (accept): TLSv1.3 early data
LOG7[9]: TLS alert (write): fatal: unknown
LOG3[9]: SSL_accept: ssl/statem/statem_srvr.c:3510: error:0A0000C7:SSL routines::peer did not return a certificate
LOG5[9]: Connection reset/closed: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
LOG7[9]: Deallocating application specific data for session connect address
LOG7[9]: Local descriptor (FD=10) closed
LOG7[9]: Service [dns] finished (0 left)
Topic:
Business & Education
SubTopic:
Device Management
Issue -
Safari application not fetched from system_profile command
Use case -
We are trying to get list of installed applications in the mac. For this we use System_profiler command to fetch the details list. It is working good, but the thing is , It doesnt fetch Safari app as an installed Application.
Command used -
**/usr/sbin/system_profiler SPApplicationsDataType**
Can anyone suggest any other way to fetch the installed applications list from the mac , which includes all the apps (including safari app) and remains effective ?
I created a mobileconfig file on our self-developed MDM server and used Apple Configurator with a USB cable to prepare the device.
However, the profile installation failed and show the mdm payload is invalid must to be removed.
I suspect that the issue might be related to the CA (Certificate Authority) in the configuration, even though I have provided the ROOT SSL CA and the .p12 file.
What CA file should I include in the mobileconfig to resolve this issue?
using Apple Configurator to edit the mobileconfig file, but the MDM service is no longer displayed. How should I handle this
Apple provides a function to create TTS voice as a file in TTS.
(AVSpeechUtterance/AVSpeechSynthesizer)
Or, if the user records the video of TTS playback and uses that video
I wonder what the scope of use is if I use this TTS voice to make YouTube, TikTok, or commercial videos.
Is it impossible to use it commercially at all?
Can I use it commercially with the source indicated?
Can I use it commercially without a separate source indication?
Is there a difference in commercial use license between Siri voices and regular TTS voices?
is it possible to push app updates in Single App Mode via Intune?
Topic:
Business & Education
SubTopic:
Device Management
Why is MDM camera restriction designed not to work on the lock screen?
Topic:
Business & Education
SubTopic:
Device Management
We'd like to determine if there is a configuration declaration that is active on a device as part of a predicate.
The current logic (based on the WWDC 22 session) is:
SUBQUERY(@status(management.declarations.configurations),
$declaration,
($declaration.@key(identifier) == "com.abc.declarationname" AND $declaration.@key(active) == true)).@count == 1
The goal is that if the declaration is active, then a predicate should evaluate to true.
This query does not appear to be working. Should we be able to use @status(management.declarations.activations) in a predicate? If so, what are we missing to attempt to determine if the declaration is active?
If I search the existing status objects that are sent from the device, it is showing as active in the status channel.
Topic:
Business & Education
SubTopic:
Device Management
Hi,team:
I need to distribute an mdm configuration file containing the "ServiceManagementManagedLoginItems" service to a large number of company-supervised computers, where com.apple.servicemanagement only supports macOS 13.0+. However, I cannot effectively distinguish whether the device system where the mdm configuration file needs to be installed is greater than 13. Can I directly install the mdm configuration file on all devices? Will installing the mdm configuration file on devices less than 13 have any impact on the system or other configuration items in mdm? The description link of ServiceManagementManagedLoginItems is: https://developer.apple.com/documentation/devicemanagement/servicemanagementmanagedloginitems
Hello! We using jwsRepresentation for Transaction. In documentation we found
The decoded payloads of the jwsRepresentation and JWSTransaction strings contain price fields that are specified in milliunits of the currency; StoreKit represents the price in units of currency. Take care not to confuse these two representations when working with both APIs.
source
But when we decoded JWS, we found what price are specified in units (but we were expecting to get milliunits)
We using https://developer.apple.com/documentation/storekit/product/purchaseresult/success
switch result {
case .success(let verification):
let jwsRepresentation = verification.jwsRepresentation
...
And when we decoded jwsRepresentation we get
{
"transactionId": ".....",
"originalTransactionId": ".....",
"webOrderLineItemId": ".....",
"bundleId": ".....",
"productId": ".....",
"subscriptionGroupIdentifier": ".....",
"purchaseDate": ".....",
"originalPurchaseDate": ".....",
"expiresDate": ".....",
"quantity": 1,
"type": ".....",
"deviceVerification": ".....",
"deviceVerificationNonce": ".....",
"appAccountToken": ".....",
"inAppOwnershipType": ".....",
"signedDate": ".....",
"environment": ".....",
"transactionReason": ".....",
"storefront": ".....",
"storefrontId": ".....",
"price": 12990,
"currency": "USD"
}