Hello,
I'm working on an app that makes use of Screen Time features by leveraging the Family Controls, Device Activity and Managed Settings frameworks.
The main app works fine by shielding/unshielding apps with a toggle.
When it comes to monitoring the time intervals with the Device Activity Monitor (DAM) extension (e.g. lock X apps for Y minutes), I'm experiencing several issues.
To shield/unshield apps and kick off the monitoring I perform the following instructions:
let timeInMinutes = 15
let startDate = Date(timeIntervalSinceNow: 1.0) // padding added to avoid invalid DAM ranges < 15 mins.
let endDate = startDate.addingTimeInterval(timeInMinutes * 60.0)
let components: Set<Calendar.Component> = [.day, .month, .year, .hour, .minute, .second]
let calendar = Calendar.current
let intervalStart = calendar.dateComponents(components, from: startDate)
let intervalEnd = calendar.dateComponents(components, from: endDate)
let schedule = DeviceActivitySchedule(intervalStart: intervalStart, intervalEnd: intervalEnd, repeats: false)
try deviceActivityCenter.startMonitoring(.definiteShield, during: schedule)
let managedSettingsStore = ManagedSettingsStore()
managedSettingsStore.shield.applications = selection.applicationTokens // `selection` being an instance of `FamilyActivitySelection`
The main pain points are:
After this code is performed, I would expect the Device Activity Monitor extension to start, or at least to start once I go to background. To check whether the DAM extension is running or not, I attach to the extension process manually (Product > Attach to Process by PID or Name). But I can see the extension correctly running only after 3-4 attempts of calling startMonitoring.
Even when the DAM extension runs, intervalDidStart and intervalDidEnd methods in the extension are called quite randomly - most of the times not being called at all - thus making the extension hugely unaffordable.
Please note:
I already ask for Screen Time permissions during the onboarding by calling AuthorizationCenter.shared.requestAuthorization(for: .individual), so by the time the user shields the apps, these permissions are already granted.
I already have Family Control entitlements for development and distribution, and for both the main target and the DAM extension target.
In the intervalDidEnd method, I simply call ManagedSettingsStore().clearAllSettings() and DeviceActivityCenter().stopMonitoring(). This looks like to be enough to stay way below the 6MB memory limit.
Am I doing something wrong, is there a way to fix this, or is just the Device Activity framework that is unstable?
General
RSS for tagDelve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.
Post
Replies
Boosts
Views
Activity
My team is preparing for iOS 18, and wanted to add intents using assistant schemas that are iOS 18 and above restricted.
We noticed that the result builder for AppShortcuts added support for limitedAvailabilityCondition from iOS 17.4 so we marked the whole struct as available from it.
The app compiles but writing a check like below inside appShortcuts property a crash will happen in iOS 17.5 runtime. (Removing the #available) is solving this problem.
if #available(iOS 18, *) {
AppShortcut(
intent: SearchDonut(),
phrases: [
"Search for a donut in \(.applicationName)"
],
shortTitle: "search",
systemImageName: "magnifyingglass"
)
}
We tried out putting the os check above and returning shortcuts in arrays and that both compiles and runs but then AppShortcuts.strings sends warnings that the phrases are not used (This phrase is not used in any App Shortcut or as a Negative Phrase.) because the script that extracts the phrases somehow fails to perform when shortcuts are written like below:
static var appShortcuts: [AppShortcut] {
if #available(iOS 18.0, *) {
return [
AppShortcut(
intent: CreateDonutIntent(),
phrases: [
"Create Donut in \(.applicationName)",
],
shortTitle: "Create Donut",
systemImageName: "pencil"
)
]
} else {
return [
AppShortcut(
intent: CreateDonutIntent(),
phrases: [
"Create Donut in \(.applicationName)",
],
shortTitle: "Create Donut",
systemImageName: "pencil"
)
]
}
}
This is very problematic because we can't test out on TF with external users new intents dedicated for iOS 18.
We filed a radar under FB15010828
Hi everyone,
I’m developing a parental control app using Apple's ScreenTime API, and I need to display ScreenTime data separately for each child in a family. The API offers options like .children and .all, but I’m looking for the best way to reliably filter and show data for a single child within the app.
I’ve seen other apps like Ohana successfully implement this feature, even the apple official family screen time feature has this where parents can view ScreenTime data for each child individually. I want to achieve a similar experience in my app, ensuring that if a parent selects "John," the app only displays John's ScreenTime, without mixing in data from his siblings.
Here’s the approach I’m considering using DeviceActivityFilter and DeviceActivityReport to target data for a specific child:
let filter = DeviceActivityFilter(
segment: .children,
intervals: .everyDay
)
let report = DeviceActivityReport(
filter: filter
) { (data) in
// Process and separate data for each child
if let activityData = data as? DeviceActivityReportData {
for child in activityData.children {
if child.name == "ChildName" { // Replace "ChildName" with the actual child's name or identifier
// Access and display data for the specific child
print("Child: \(child.name), Screen Time: \(child.screenTime)")
}
}
}
}
Context:
Goal: I need to ensure parents can view ScreenTime data for each child individually, similar to how Ohana does it. For example, selecting "John" should display only John's ScreenTime.
Challenge: While some data can be grouped within the DeviceActivity extension, I'm not entirely sure if this approach with DeviceActivityFilter is the most reliable way to isolate and display data for a single child.
Has anyone implemented a similar solution? Are there any alternative methods or best practices that could improve the accuracy and reliability of this filtering?
Any advice or examples would be greatly appreciated!
Thanks!
Hi
I'm a total novice on this stuff so please know that in advance. Won't go into details but my former employer has repeatedly hacked into my network, email etc. It's being dealt with legally.
That said you can imagine my paranoia all the time and I never know is okay or what is suspicious. I find it really hard to get actual information on google etc., so I'm turning to you far more experienced and knowledgeable mac people.
I stumbled on the above looking for something in terminal. It's obviously in the applications software section. Falls under Users/me/Library/application scripts/group.is.workflow.my.app
The timing of the installation is exactly when there was a certain event.
Also, on all of my files, I have to remove Staff from accessing. I don't know what that's about but if anyone has insight let me know. Please see attached. Thank you!!
Hi, does anyone know how to add languages using the .translationTask in SwiftUI for XCode.
I just started learning SwiftUI and XCode, TIA for any suggestions.
There was an option in macOS to show one app at a time with the user default like this:
defaults write com.apple.dock single-app -bool true; killall Dock
and it was very handy. But now it doesn't work.
Is it deprecated or is this a bug?
I know there is a Stage Manager and it has similar functionality, but it has some problems for me:
It minimizes the previous app on opening another, and there is no way to show one app on top of the other, which was possible and handy with the Tab key with the single-app user default. This is handy when I run the Simulator on top of Xcode, but in general I want to minimize other apps when I click on an app in the Dock.
There is no option to disable animations on the opening of the app.
It leaves a small padding on the left side which is distracting (I like to use apps in full width).
I have been using Stage Manager since the beta came out and still can't get used to it. And I actually turn it off when I start using Xcode.
I created a demo Xcode project, it can reproduce the crash easily.
Please follow the 'STEPS TO REPRODUCE THE CRASH' below:
Archive the demo project with Release configuration and Xcode15.3 or later versions
Export ipa with adhoc.
Install it on your real devices(iPhone or iPad).
Launch the app.
Press 'Parse PDF' button, then App will crash.
Hello everyone,
I’m experiencing a crash in my iOS application that’s occurring predominantly on devices running iOS 16.6.0. The crash seems to happen on the main thread during a UI operation, specifically within the UIKitCore framework.
Crash Log Summary
Thread 0 Crashed:
0 libsystem_kernel.dylib 0xca4 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x13b74 mach_msg2_internal + 80
2 libsystem_kernel.dylib 0x13e4c mach_msg_overwrite + 540
3 libsystem_kernel.dylib 0x11e8 mach_msg + 24
4 CoreFoundation 0x79024 __CFRunLoopServiceMachPort + 160
5 CoreFoundation 0x7a250 __CFRunLoopRun + 1208
6 CoreFoundation 0x7f3ec CFRunLoopRunSpecific + 612
7 GraphicsServices 0x135c GSEventRunModal + 164
8 UIKitCore 0x39cf58 -[UIApplication _run] + 888
9 UIKitCore 0x39cbbc UIApplicationMain + 340
10 MyApp 0x24050 main + 51 (AppDelegate.swift:51)
11 ??? 0x1d3594dec (Missing)
I’ve attached the full crash
crashlog.txt
and would appreciate any insights or recommendations on how to resolve this issue.
let debugString = "<speak><emphasis level=\"reduced\">Hello</emphasis></speak>"
let utterance = AVSpeechUtterance(ssmlRepresentation: debugString)! // <--- Freezes
I encountered this bug in iOS 18 beta
I sent a feedback through Feedback app.
I'm not really sure if I'm using the right lingo here because there's so little documentation on this, so apologies in advance.
I have an app with a few custom intents that I'm attempting to transition to AppIntents. I have the newly transitioned intents showing up in the Shortcuts app as expected, however when I run them I get an immediate failure saying "The operation couldn't be completed" (see photo). Note that the "AppIntentsClient" class mentioned in the photo is the dependency I'm trying to import.
I've narrowed it down to the @Dependency that I'm using in my intent handler. At the top of the intent handler I have a line:
@Dependency
private var appIntentsClient: any AppIntentsClient // NOTE: AppIntentsClient is a protocol -- could that be the issue?
And if I comment out this line, the intent no longer throws that error.
I'm following the guidelines shown in sample apps by setting the dependency on my main app's startup in didFinishLaunchingWithOptions like so:
// gets called by the main app `didFinishLaunchingWithOptions`
func onDidFinishLaunching() {
let adapter = AppIntentsAdapter() //AppIntentsAdapter adheres to protocol AppIntentsClient
self.appIntentsAdapter = adapter
AppDependencyManager.shared.add(dependency: adapter)
MyAppShortcuts.updateAppShortcutParameters()
}
Unfortunately there is virtually no documentation around AppDependencyManager or AppDependencies in general. Both documentation pages have at most one line, but don't indicate why this would be failing for me. Is there any information out there on why these errors may be happening? I've also looked at the Console app to see if the OS logs anything, but nothing of value was found.
https://developer.apple.com/documentation/appintents/appdependencymanager
https://developer.apple.com/documentation/appintents/appdependency
Is your feature request related to a problem? Please describe.
Everywhere where Apple offers it, I use Apple's Private Relay e-mail addresses.
However, they can't be manually generated, so for the rest, I use https://anonaddy.me. Because it offers infinite aliases, I use a different alias every time I give my e-mail address to someone. However, I ensure that they're all under the @rokejulianlockhart.anonaddy.com (.com and .me are equivalent in this case) domain so that they can be identified as me by a human. I use different aliases to combat spam, not be anonymous.
Additionally, when messaging others, I ensure that I add a sub-address with my name to their e-mail address so that they can filter all messages from me (even if I'm using a different alias for my own filtering purposes). Others use the same when communicating with me, especially family. The current identification system doesn't take sub-addresses into account whatsoever.
Describe the solution you'd like
I should therefore be able to set
RY7I0I+RY7I0R@rokejulianlockhart.anonaddy.com as an e-mail address, and beneath it add, for instance
[A-Za-z0-9]+\+[A-Za-z0-9]+@rokejulianlockhart\.anonaddy\.com
in another input form to ensure that Nextcloud identifies any (in this case sub-addressed) alias as me.
Describe alternatives you've considered
The sole current alternative is to list literal tens of thousands of aliases as myself, which is insane. It also wouldn't work, because https://anonaddy.me generates a new alias when someone else uses one, so I'd have to retroactively add those whenever someone else uses one. It also wouldn't account for sub-addresses.
Additional context
Like most more powerful features of Nextcloud, this only need be visible when clicked on. Adding a button beside each e-mail address to show a form which allows the user to enter custom regex is enough.
Additionally requested at:
https://feedbackportal.microsoft.com/feedback/idea/ed4261f8-af28-ee11-a81c-6045bd8534ad.
https://discussions.apple.com/thread/255016441.
https://github.com/nextcloud/contacts/issues/3530#issue-1816825315.
Hi all. I've read all the posts related to CF_IS_OBJC, including this one, but since I don't have an Objective-C background and mostly work with Swift and SwiftUI, I'm struggling to fully understand the recommendations or how to address this issue. Could someone explain it to me in simple terms (like I'm 5) and provide a step-by-step guide on what to do? This crash has affected 66 devices over the past month.
Crashed: com.apple.main-thread
0 CoreFoundation 0xf878 CF_IS_OBJC + 24
1 CoreFoundation 0x17f58 CFArrayGetCount + 32
2 CoreGraphics 0x322a1c CGPDFTaggedNodeEnumerateChildren + 60
3 CoreGraphics 0x322880 CGPDFTaggedNodeGetBounds + 244
4 PDFKit 0x5524 -[UICGPDFNodeAccessibilityElement isAccessibilityElement]
5 UIAccessibility 0x48518 ___axuiElementForNotificationData_block_invoke + 28
6 UIAccessibility 0x35678 __94-[NSObject(AXPrivCategory) _accessibilityFindFirstAXDescendantPassingTest:byYieldingElements:]_block_invoke_2 + 36
7 UIAccessibility 0x3534c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 60
8 UIAccessibility 0x359d0 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke_2 + 60
9 UIAccessibility 0x1ec98 -[NSObject(AXPrivCategory) accessibilityEnumerateContainerElementsWithOptions:usingBlock:] + 548
10 UIAccessibility 0x35858 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke + 176
11 UIAccessibility 0x3539c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 140
12 UIAccessibility 0x359d0 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke_2 + 60
13 UIAccessibility 0x1ec98 -[NSObject(AXPrivCategory) accessibilityEnumerateContainerElementsWithOptions:usingBlock:] + 548
14 UIAccessibility 0x35858 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke + 176
15 UIAccessibility 0x3539c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 140
16 UIAccessibility 0x359d0 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke_2 + 60
17 UIAccessibility 0x1ec98 -[NSObject(AXPrivCategory) accessibilityEnumerateContainerElementsWithOptions:usingBlock:] + 548
18 UIAccessibility 0x35858 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke + 176
19 UIAccessibility 0x3539c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 140
20 UIAccessibility 0x359d0 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke_2 + 60
21 UIAccessibility 0x1ec98 -[NSObject(AXPrivCategory) accessibilityEnumerateContainerElementsWithOptions:usingBlock:] + 548
22 UIAccessibility 0x35858 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke + 176
23 UIAccessibility 0x3539c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 140
24 UIAccessibility 0x35918 __57-[NSObject(AXPrivCategory) _accessibilityFindDescendant:]_block_invoke + 368
25 UIAccessibility 0x3539c __96-[NSObject(AXPrivCategory) _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:]_block_invoke + 140
26 UIAccessibility 0x35294 -[NSObject _accessibilityEnumerateAXDescendants:passingTest:byYieldingElements:] + 244
27 UIAccessibility 0x355d0 -[NSObject _accessibilityFindFirstAXDescendantPassingTest:byYieldingElements:] + 272
28 UIAccessibility 0x35788 -[NSObject(AXPrivCategory) _accessibilityFindDescendant:] + 100
29 UIAccessibility 0x48280 _axuiElementForNotificationData + 276
30 UIAccessibility 0x347c _massageAssociatedElementBeforePost + 36
31 UIAccessibility 0x2648 _UIAXBroadcastMainThread + 292
32 libdispatch.dylib 0x213c _dispatch_call_block_and_release + 32
33 libdispatch.dylib 0x3dd4 _dispatch_client_callout + 20
34 libdispatch.dylib 0x125a4 _dispatch_main_queue_drain + 988
35 libdispatch.dylib 0x121b8 _dispatch_main_queue_callback_4CF + 44
36 CoreFoundation 0x56710 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16
37 CoreFoundation 0x53914 __CFRunLoopRun + 1996
38 CoreFoundation 0x52cd8 CFRunLoopRunSpecific + 608
39 GraphicsServices 0x11a8 GSEventRunModal + 164
40 UIKitCore 0x40a90c -[UIApplication _run] + 888
41 UIKitCore 0x4be9d0 UIApplicationMain + 340
42 UIKitCore 0x638384 keypath_get_selector_hoverStyle + 11024
43 Wisconsin State Journal 0x3b4ae8 main + 4299246312 (AppDelegate.swift:4299246312)
44 ??? 0x1b7239e4c (Missing)
com.apple.uikit.eventfetch-thread
0 libsystem_kernel.dylib 0x1808 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x5008 mach_msg2_internal + 80
2 libsystem_kernel.dylib 0x4f20 mach_msg_overwrite + 436
3 libsystem_kernel.dylib 0x4d60 mach_msg + 24
4 CoreFoundation 0x53f5c __CFRunLoopServiceMachPort + 160
5 CoreFoundation 0x53600 __CFRunLoopRun + 1208
6 CoreFoundation 0x52cd8 CFRunLoopRunSpecific + 608
7 Foundation 0xc7e4c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
8 Foundation 0xc7c9c -[NSRunLoop(NSRunLoop) runUntilDate:] + 64
9 UIKitCore 0x41e640 -[UIEventFetcher threadMain] + 420
10 Foundation 0xde718 __NSThread__start__ + 732
11 libsystem_pthread.dylib 0x606c _pthread_start + 136
12 libsystem_pthread.dylib 0x10d8 thread_start + 8
com.google.firebase.crashlytics.MachExceptionServer
0 Wisconsin State Journal 0x83b668 FIRCLSProcessRecordAllThreads + 392 (FIRCLSProcess.c:392)
1 Wisconsin State Journal 0x83ba48 FIRCLSProcessRecordAllThreads + 423 (FIRCLSProcess.c:423)
2 Wisconsin State Journal 0x849c5c FIRCLSHandler + 34 (FIRCLSHandler.m:34)
3 Wisconsin State Journal 0x84a460 FIRCLSMachExceptionServer + 521 (FIRCLSMachException.c:521)
4 libsystem_pthread.dylib 0x606c _pthread_start + 136
5 libsystem_pthread.dylib 0x10d8 thread_start + 8
Thread
0 libsystem_kernel.dylib 0x1808 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x5008 mach_msg2_internal + 80
...
While in Mac the "://apconfig://" "apupdate" schemes work fine and the airport opens automatically, in iOS I can't find any scheme that opens the airport utility
I’ve created a single-target watchOS app in Xcode 14, but I can’t seem to get ClockKit complications working.
I’ve added a CLKComplicationDataSource class to my watch target, and in the Info pane for my target I have set the CLKComplicationPrincipalClass key to MODULE-NAME.ComplicationController
I haven’t yet added Complication placeholder images to my Assets.xcassets, but as far as I am aware, that shouldn’t be a problem while I am still testing.
However, when I run it on a watchOS simulator, the complications never show up on the watch complications list when adding a complication.
All of the tutorials I can find for ClockKit complications reference older two-target WatchKit apps. Do the newer single target apps no longer support ClockKit? If so, how can I make a two-target WatchKit app with Xcode 14?
Unfortunately I cannot use WidgetKit for my complications because I need to support watchOS 7 at least, and WidgetKit only supports watchOS 9+
Thanks for your help
While in Mac the "apconfig://" "apupdate://" schemes work fine and the airport opens automatically, in iOS I can't find any scheme that opens the airport utility
Hello! I've been doing a lot of work with ApplicationTokens, but there is very little documentation. While Apple gives you the FamilyAcitvitiesPicker to get tokens of apps on an iPhone, I need to get the tokens of apps that aren't on the phone.
Example:
Someone can select Instagram even though they don't have it downloaded. Then the application token will get sent to a server. Then a different person who does have Instagram on their phone will receive the token and it will do something with that application.
Because FamilyActivitiesPicker can only select apps on the iPhone that it is running on, FamilyActivitiesPicker is useless to me, leading to my problem:
Creating an ApplicationToken without FamilyActivitiesPicker
This documentation says that I can create an Application (and thus an ApplicationToken) from the bundle identifier
init(bundleIdentifier: String)
Creates an object that represents the app with the specified bundle
identifier.
However, when I try to use this to get instagrams(or any apps) token, it returns nil every time!
So, finally, my questions:
How do I correctly use this initializer to create an ApplicationToken?
Or, if this won't work for my purposes
Are the ApplicationTokens created by FamilyActivitiesPicker the same across all devices no matter what?
Attempting to recreate PKDrawing point-by-point using an existing drawing instance results in .pencil strokes being displayed with different (thinner) width than the original.
Strokes with all other inks are restored fully visually identically to the original.
This can be observed from iOS 15.2 to iOS 18 beta 5.
Code used to remake the drawing:
let restoredDrawing = PKDrawing(strokes: drawing.strokes.map { stroke in
PKStroke(
ink: stroke.ink,
path: PKStrokePath(controlPoints: (0..<stroke.path.count).map { controlIndex in
// This could be replaced with stroke.path.map { point in }
let point = Array(stroke.path)[controlIndex]
// This does not result in the same presentation as the point
let restoredPoint: PKStrokePoint
if #available(iOS 17.0, *) {
restoredPoint = PKStrokePoint(
location: point.location,
timeOffset: point.timeOffset,
size: point.size,
opacity: point.opacity,
force: point.force,
azimuth: point.azimuth,
altitude: point.altitude,
secondaryScale: point.secondaryScale
)
} else {
restoredPoint = PKStrokePoint(
location: point.location,
timeOffset: point.timeOffset,
size: point.size,
opacity: point.opacity,
force: point.force,
azimuth: point.azimuth,
altitude: point.altitude
)
}
// Even this produces correct result:
// let restoredPoint = stroke.path.interpolatedPoint(at: CGFloat(controlIndex))
compare(point, restoredPoint)
return restoredPoint
},
creationDate: stroke.path.creationDate),
transform: stroke.transform,
mask: stroke.mask
)
})
Gist with ViewController with side-by-side to paste into new project: https://gist.github.com/ilevIO/a1dea60ab6cb16047de2b421897d30f1
I am developing a file provider extension on Mac.
I noticed when attempting to delete an enumerated folder with didDeleteItems, passing only the top-level folder's ID is not enough to delete the item. It seems we need to pass all items underneath as well to this function for the folder to be removed.
Is there a way around this? The way our application is designed makes it challenging to do this and we would prefer being able to remove the folder by utilizing the item ID only.
If not, how could we obtain the particular items underneath that should be passed in to the function?
We use a credit card processing app in conjunction with a data base. when you navigate to the app in settings we can change the host and file name for the redirect. it works perfectly in IOS17 but not available in IOS18. This is defiantly an iOS issue because I have found the same issue in another up that uses these same setting, they are missing too in IOS.
Hello. We are using Twilio Video SDK and CallKit to report an incoming invite to join a video room.
On iOS 18 trying to decline a call invite via headphones (long pressing the accept button) doesn't actually result in the call being declined.
There seem to be different results depending on the device being used. When using Apple EarPods with Lightning connector or a Bluetooth JBL headset, the call is declined only on a second attempt. When using a Bluetooth Jabra BT2046 headset, the call gets accepted instead on the first decline attempt.
This issue is not reproducible on iOS 17.