Hi everyone,
I am building an SMS filtering app using the IdentityLookup framework. My main application handles the user login and receives a JWT. I need my ILMessageFilterExtension to use this JWT to authenticate its backend requests via context.deferQueryRequestToNetwork.
Since the extension is sandboxed and doesn't share a URLSession or standard Keychain with the main app, I am trying to use the Shared Web Credentials mechanism as suggested in the documentation.
My Questions:
Is SecAddSharedWebCredential still the recommended way to "bridge" a token from the main app to the messagefilter service in 2026?
If the backend returns a 401 Unauthorized with a WWW-Authenticate: Basic realm="api.mydomain.com" header, will iOS automatically retry the request with the stored token?
Are there any specific AASA (Apple App Site Association) requirements for the messagefilter key? Does it need to be a separate top-level object or nested?
Current Setup:
Entitlements: Both Main App and Extension have messagefilter:api.mydomain.com and webcredentials:api.mydomain.com.
Main App Code:
Swift
SecAddSharedWebCredential("api.mydomain.com" as CFString, "UserAccount" as CFString, "my_jwt_token" as CFString) { error in
// Returns nil (success)
}
AASA File:
JSON
{
"messagefilter": {
"apps": ["TEAMID.bundle.id"]
}
}
Despite this, I see the first 401 in my server logs, but the automatic retry with the Authorization header never happens. Has anyone successfully implemented this "silent" handshake recently?
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.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I'm working on building a Text Messages Filter Extension app and currently facing the below error:
"Cannot find 'ILMessageFilterExtensionConfigurationManager' in scope".
As required the app includes MessageFilterStatusManager.swift file, with the host app designated as the Target Membership.
App minimum deployment is set to iOS 17.6 and I'm working with Xcode Version 26.2.
If anyone has encountered this error I'd appreciate your feedback.
Issue Description:
On non-Dynamic Island devices, when the screen is on, tapping the alarm banner does not open the app or trigger any action.
Steps to Reproduce:
Set a regular alarm.
Wait until the alarm goes off.
Keep the screen on. A banner appears with options (e.g., dismiss or a secondary action).
Tap anywhere on the banner area that would normally open the app.
Expected Behavior:
Tapping the banner should open the app.
Actual Behavior:
Tapping the banner has no response.
Topic:
App & System Services
SubTopic:
General
Issue Description:
When the snooze alarm and a set alarm share the same time, the behavior differs between locked and unlocked screen states.
The current issue occurs when the screen is unlocked and the device is on the home screen before the alarm goes off:
Alarm A is set for 17:23, and the snooze button is tapped when it rings.
Alarm B is set for 17:25.
At 17:25, Alarm B first vibrates and then rings (no buttons are pressed at this time).
A few seconds later, it vibrates a second time.
After that, the alarm becomes silent.
If dynamic/notification alarms are disabled, the next scheduled alarm rings normally.
Topic:
App & System Services
SubTopic:
General
Issue Description:
When an alarm is set for a time earlier than the current system time, and the system time is manually adjusted back to before the alarm time, the alarm does not ring when the scheduled time is reached.
Steps to Reproduce:
Current time is 23:34
Set an alarm for 23:30 (earlier than the current time)
Manually change the system time to 23:28
Wait until the time reaches 23:30
The alarm does not ring
Device:
iPhone 14 Pro / iOS 26.2
Topic:
App & System Services
SubTopic:
General
DeviceActivityReportExtension issues
Hi,
I am currently working on a project and hoping to use DeviceActivityReportExtension. I have already successfully set up the DeviceActivityMonitorExtension and that is working correctly, but can't get this to reproduce. I initially had a complex capacitor project which displayed a native UI screen which (tried to) display the screen time report though it was failing silently.
I tried a much simpler setup with a pure swift project (not an iOS dev so forgive my poor code quality) and still having an issue getting this to render on my computer. Here is a reproduction:
https://github.com/ethanmichel0/screen-time-report-bug-recreation/tree/main
Does this code work for others? and if not do you know how I can set this up? idk if my Xcode or iOS versions are incompatible (see versions in that link).
Would be super grateful for some help, thanks so much.
The Problem
The Family Activity Picker shows only the child's app categories on the guardian's/parent's device.
The application names from the child's device are not showing on the guardian's/parent's device.
The authorization is done on the child's device via
try await AuthorizationCenter.shared.requestAuthorization(for: .child)
Usage of the family activity picker on the guardian's/parent's device
struct ContentView: View {
@State private var isPresented = true
@StateObject private var familyControlsHelper = FamilyControlsHelper.shared
var onClose: () -> Void
var body: some View {
ZStack {
Color.black.opacity(0.1).ignoresSafeArea()
}
.familyActivityPicker(
isPresented: $isPresented,
selection: $familyControlsHelper.familyActivitySelection
)
.onChange(of: isPresented) { _ in
if !isPresented {
onClose()
}
}
}
}
IMPORTANT
Both devices are real (not simulators), and the app has granted distribution Family Controls entitlement.
Question
Is this the expected behavior? Or the child's app should appear on the guardian's device?
Thanks.
I'm stuck in an impossible situation with DeviceActivityReportExtension on iOS 18.
THE ISSUE:
Configuration that works on device (iOS 18.2):
Info.plist has only NSExtensionPointIdentifier
Swift code uses u/main attribute
App installs and runs perfectly
Extension works correctly
App Store validation FAILS: "Missing NSExtensionPrincipalClass"
Adding NSExtensionPrincipalClass (as validation requests):
Device installation FAILS with Error 3002
Error says: "NSExtensionPrincipalClass key is not allowed for this extension point"
Cannot test on device
Validation would likely pass
ENVIRONMENT:
Xcode 16.2
iOS 18.2
Extension point: com.apple.deviceactivityui.report-extension
EVIDENCE IT'S WIDESPREAD:
Apple Forums (3 days ago): https://developer.apple.com/forums/thread/812380
Stack Overflow (1+ year): https://stackoverflow.com/questions/77866230/
ROOT CAUSE:
iOS 18 changed this extension to use u/main pattern (no NSExtensionPrincipalClass needed). App Store validation hasn't been updated and still expects iOS 17 configuration.
WHAT I'VE TRIED:
✅ All deployment targets set to iOS 18.3
✅ Code follows Apple's WWDC 2022 guidance
✅ All entitlements correct
✅ Info.plist validated
✅ Clean builds
✅ Works perfectly on device
No configuration satisfies both device runtime AND App Store validation.
Has anyone successfully uploaded an app with DeviceActivityReportExtension to TestFlight on iOS 18? Any workarounds?
This is blocking TestFlight deployment completely.
Topic:
App & System Services
SubTopic:
General
Tags:
App Store
App Submission
TestFlight
Device Activity
I'm stuck in an impossible situation with DeviceActivityReportExtension on iOS 18.
THE ISSUE:
Configuration that works on device (iOS 18.2):
Info.plist has only NSExtensionPointIdentifier
Swift code uses u/main attribute
App installs and runs perfectly
Extension works correctly
App Store validation FAILS: "Missing NSExtensionPrincipalClass"
Adding NSExtensionPrincipalClass (as validation requests):
Device installation FAILS with Error 3002
Error says: "NSExtensionPrincipalClass key is not allowed for this extension point"
Cannot test on device
Validation would likely pass
ENVIRONMENT:
Xcode 16.2
iOS 18.2
Extension point: com.apple.deviceactivityui.report-extension
EVIDENCE IT'S WIDESPREAD:
Apple Forums (3 days ago): https://developer.apple.com/forums/thread/812380
Stack Overflow (1+ year): https://stackoverflow.com/questions/77866230/
ROOT CAUSE:
iOS 18 changed this extension to use u/main pattern (no NSExtensionPrincipalClass needed). App Store validation hasn't been updated and still expects iOS 17 configuration.
WHAT I'VE TRIED:
✅ All deployment targets set to iOS 18.3
✅ Code follows Apple's WWDC 2022 guidance
✅ All entitlements correct
✅ Info.plist validated
✅ Clean builds
✅ Works perfectly on device
No configuration satisfies both device runtime AND App Store validation.
Has anyone successfully uploaded an app with DeviceActivityReportExtension to TestFlight on iOS 18? Any workarounds?
This is blocking TestFlight deployment completely.
Topic:
App & System Services
SubTopic:
General
Tags:
App Store Connect
Debugging
Family Controls
Screen Time
We are trying to extend our app with Push To Talk functionality by integrating the Push To Talk framework. We are extensively testing what happens if the app is running in the foreground, in the background or not running at all.
When the app is in the foreground, and the user has joined a channel we maintain an open connection to our server. When a remote participant starts streaming audio, we immediately call setActiveRemoteParticipant on our PTChannelManager instance. The PTT system will than call our delegate's channelManager:didActivate audioSession method and we can successfully play the incoming audio.
When the app is not running at all, there is of course no active connection initially. When another participant starts talking we send a push notification. The PTT system will start our app in the background, call the incomingPushResult method on our delegate, after returning the remote participant the PTT framework will then call the channelmanager:didJoin delegate method which we will use to re-establish the server connection, the PTT framework then calls our channelManager:didActivate audioSession delegate method and we can then successfully play audio.
Now the problem. When the application was initially in the foreground and has an established server connection, we initially keep the server connection active when the app enters the background state, until a certain timeout or the system decides our app needs to be killed / removed from memory. This allows us to finish an incoming audio stream, quickly react on incoming responses etc. When we then receive an incoming audio stream after a certain delay (for example 5 seconds) we call the channelManager.setRemoteParticipant method (using try await syntax). This finishes successfully, without any error, however the channelManager:didActivate audioSession delegate method is never called. Manually setting up an audio session is not allowed either and returns an error.
Our current workaround for this issue is to disconnect the server connection as soon as the app goes into the background. This will make sure our server sends a push notification, which is successful in activating the audio session after which we can play audio. However, this means we need to re-establish the connection which will introduce an unnecessary delay before we can start playback (and currently means we loose some audio). This also means we need to do extra checks when going to the background to make sure there is no active incoming stream. After each incoming stream we have to check again if we are in the background and disconnect immediately to make sure we get a push notification next time. This can of course also lead to race conditions in an active conversation where we might need to disconnect between incoming streams and if we don't do this in time we might never get an activated audio session.
Now this might be by design, as Apple might not want us to keep the server connection active when the application enters the background state. But if that's the case I would expect the channelManager.setRemoteParticipant method to throw an error, but it doesn't. It returns successfully after which we would expect the audio session to get activated as well. So maybe we are not setting the capabilities of our project correctly (we might need other background permissions as well, although we already experimented with that), or we need to do something else to make this work?
Hi Apple Team,
We have high crash counts in App Store Connect > App Analytics > Crashes (197), but zero matching crashes in Xcode Organizer or Firebase Crashlytics for the same app version/build.
App details:
Bundle ID: com.youtunein.youtunein
Version: [1.88,1.89,1.90,1.91]
Affected iOS versions: [1.88,1.89,1.90,1.91]
Steps tried:
Downloaded raw .crash files from App Store Connect and symbolicated in Xcode Organizer – no crashes appear.
Firebase console clean, no spikes.
dSYM files uploaded via Xcode Archive/Transporter.
Enabled crash reporting in app (no custom crash handling blocking).
Crash reports attached (top 3 symbolicated). No ANRs/symbolication issues visible. Production + TestFlight both affected?
Need help understanding discrepancy and resolving. Thanks!
Since the iOS 26.2 update, we have been experiencing anomalous behavior with the DeviceActivityMonitor extension when utilizing the ScreenTime API. Specifically, we are receiving the eventDidReachThreshold event within a few minutes of initiating monitoring, despite configuring a high usage limit.
The process of turning off Screen Time -> restarting the device -> turning on Screen Time does not work.
Any ideas?
Thanks
Filed Feedback Assistant: FB21560904
I am implementing a custom SMS filter using the IdentityLookup framework. My goal is to authenticate the network requests made via context.deferQueryRequestToNetwork using a user-specific JWT token generated in the containing (main) app after a successful login.
Introduction:
I’m encountering a consistent crash in production on iOS 26.2 (build 23C55). The crash occurs deep within libicucore when calling [NSDateFormatter dateFromString:].
Crash Summary:
Exception Type: SIGSEGV (SEGV_ACCERR)
Fault Address: 0xffffffff
Thread: Crashed on Main Thread (Thread 0)
Library: libicucore.A.dylib
Code Snippet:
The crash is triggered by the following method. It converts a string to an NSDate using a specific format and locale:
// 获取日期date
- (NSDate *)getDateWithTime:(NSString *)time formatter:(NSString *)formatterStr {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:formatterStr];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
return [formatter dateFromString:time];
}
Backtrace:
Here is the relevant part of the crash report:
Incident Identifier: E24485B6-C53E-4115-A6CF-A7E4A952AD50
CrashReporter Key: 21FAC1CF-F56B-409A-98AA-351D3D2EB06C
Hardware Model: iPhone18,2
Code Type: ARM-64
Parent Process: [1]
Date/Time: 2026-01-12T01:32:25Z
OS Version: iPhone OS 26.2 (23C55)
Report Version: 105
SDK Version: 0.0.4
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xffffffff
Crashed Thread: 0
Thread 0 Crashed:
0 libicucore.A.dylib 0x000000019b81def8 0x19b74a000 + 868088
1 libicucore.A.dylib 0x000000019b7da91c 0x19b74a000 + 592156
2 libicucore.A.dylib 0x000000019b8d8340 0x19b74a000 + 1631040
3 libicucore.A.dylib 0x000000019b8eae18 0x19b74a000 + 1707544
4 libicucore.A.dylib 0x000000019b8eb600 0x19b74a000 + 1709568
5 libicucore.A.dylib 0x000000019b878be4 0x19b74a000 + 1240036
6 libicucore.A.dylib 0x000000019b87ae84 0x19b74a000 + 1248900
7 libicucore.A.dylib 0x000000019b87b2dc 0x19b74a000 + 1250012
8 libicucore.A.dylib 0x000000019b9564ac 0x19b74a000 + 2147500
9 libicucore.A.dylib 0x000000019b954afc 0x19b74a000 + 2140924
10 libicucore.A.dylib 0x000000019b952794 0x19b74a000 + 2131860
11 libicucore.A.dylib 0x000000019b98689c 0x19b74a000 + 2345116
12 CoreFoundation 0x00000001895dbfe0 0x18953d000 + 651232
13 CoreFoundation 0x00000001895dbaa0 0x18953d000 + 649888
14 Foundation 0x0000000186d2029c 0x186b88000 + 1671836
15 Foundation 0x00000001874a62dc 0x186b88000 + 9560796
16 Foundation 0x00000001874a6384 0x186b88000 + 9560964
17 xxxx 0x0000000105ea6e30 -[xxxxx getDateWithTime:formatter:] + 168
and
Thread 0 crashed with ARM-64 Thread State:
pc: 0x000000019b81def8 fp: 0x000000016f96bc10 sp: 0x000000016f96bbd0 x0: 0x00000000ffffffff
x1: 0x000000019ba1e8e0 x2: 0x0000000000000002 x3: 0x000000000000000b x4: 0x0000000000000074
x5: 0x0000000000000069 x6: 0x0000000000000000 x7: 0xfffff0003ffff800 x8: 0x000000009ba18014
x9: 0x00000001148dffd0 x10: 0x0000000000000002 x11: 0x0000000000000004 x12: 0x0000000000000220
x13: 0x0000000000000030 x14: 0x000000015b6f36b8 x15: 0x000000015cfe0000 x16: 0x00000002a19d0ff0
x17: 0x00000001f5590a70 x18: 0x0000000000000000 x19: 0x000000016f96bc30 x20: 0x0000000000000000
x21: 0x000000015cfe3200 x22: 0x000000019ba18014 x23: 0x0000000000000000 x24: 0x000000015cfe32a0
x25: 0x0000000000000003 x26: 0x0000000000000000 x27: 0x0000000000000000 x28: 0x000000015cfe3200
lr: 0x000000019b7da958 cpsr: 0x00000000a0000000
Topic:
App & System Services
SubTopic:
General
Tags:
Foundation
iOS
Objective-C
Internationalization
I'm experiencing a contradictory validation issue with DeviceActivityReportExtension that creates an impossible situation:
The Problem:
Without NSExtensionPrincipalClass in Info.plist → App Store Connect rejects upload with: "Missing Info.plist values. No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found"
With NSExtensionPrincipalClass → Local install fails with: "defines either an NSExtensionMainStoryboard or NSExtensionPrincipalClass key, which is not allowed for the extension point com.apple.deviceactivityui.report-extension"
Setup:
Extension point: com.apple.deviceactivityui.report-extension
Using SwiftUI with @main attribute and DeviceActivityReportExtension protocol
Xcode 16.2, iOS 17.6 deployment target
Code structure:
@main
struct SpoolReport: DeviceActivityReportExtension {
var body: some DeviceActivityReportScene {
// Report scenes here
}
}
The extension builds and runs perfectly without NSExtensionPrincipalClass, but cannot be uploaded to App Store Connect. Adding the key allows upload but breaks local installation.
Is this a known issue? Is there a workaround or correct Info.plist configuration for DeviceActivityReportExtension?
Thank you!
App out of memory and killed by Jetsam event seems not report to MetricKit diagnostic, it only contains crash or watch dog kill (scene create or scene update).
So I want to ask to report these issues to MetricKit
There are many units which are inverse of standard units, e.g. wave period vs Hz, pace vs speed, Siemens vs Ohms, ...
Dimension can be subclassed to create the custom units.
How to extend Measurement.converted( to: )?
I was looking at somehow using UnitConverter and subclass to something like UnitConverterInverse.
Thoughts?
Text filtering: behavior of current message is affected by behavior of past message from same origin
If there is this situation:
A text message is sent from a sender and gets classified as junk (by a text filtering extension) with the result that it gets send to the spam folder as expected.
A text message with different content is sent from the same sender and gets classified as allowed, however it also gets sent to the spam folder.
If the above is repeated but after step 1 the message is deleted, then in step 2 the message doesn't get sent to the spam folder.
So the presence of the message from step 1 being in the spam folder is having an effect on the behavior of step 2.
Expected beahavour (if so, why?), or a defect?
I'm developing a proximity tool on macOS Tahoe 26.2 (M4 MacBook Pro) to detect when my iPhone leaves the immediate vicinity of my macbook.
Does NearbyInteraction on macOS support persistent background sessions for detecting peer absence (didInvalidate/timeout), or is CoreBluetooth still required as the keep-alive trigger?
Hi Apple Developer Community,
I'm implementing MetricKit launch performance tracking in our iOS app and need clarification on two properties:
histogrammedTimeToFirstDraw
histogrammedOptimizedTimeToFirstDraw
The Documentation Problem:
The official MetricKit documentation provides minimal explanation of these properties beyond their names. Based on naming conventions, I initially assumed:
histogrammedTimeToFirstDraw = cold launches
histogrammedOptimizedTimeToFirstDraw = warm/optimized launches
Based on our measurements:
The “optimized” metric appears only in a small fraction of launches
The "optimized" metric is actually slower
The naming suggests the opposite behavior
Questions:
What specific launch conditions does each metric measure?
Why would "optimized" launches be slower and less frequent?
Is histogrammedOptimizedTimeToFirstDraw related to iOS app pre-warming or prediction features?
If these metrics don’t correspond to cold vs. warm launch times, is there an alternative way to measure them accurately?
Any clarification from Apple or insights from developers who've tracked these metrics would be greatly appreciated.