Delve 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.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Tips and Tricks for TipKit
My designers like TipKit, especially the newer flavor we can control the content. What are some best practices or tips and tricks to share with product owners when designing around what the framework is capable of doing? Concepts that might be relevant: Onboarding FAQ Progressive disclosure of new features HELP / support workflows
1
0
217
Jun ’26
How to control the location in the Bluetooth prompt for educational and training guides
I want my team to be able to take screenshots of the app to produce training and support material for our app users. Is there any way, when connected to Xcode, to influence the location and the devices that show up in the TCC prompt? I don't want a screenshot of a teammate's work remote location to land in our docs. Like if our app connects to a specific kind of sensor to have that also show up in the picker and not show 'Apple TV' and the other apple devices that are named, nearby, and frequently connected to the device. FB14768675
1
0
200
Jun ’26
Is there any way to direct the user to the Bluetooth Settings page?
What is the best way for an app to deep link a user to the Bluetooth Settings page in the Settings app? For various reasons, 'go to bluetooth settings' is easier said than done for some users. I don't know of any public settings app URLs to send the users to the Bluetooth page. If using ASK it is in your apps' settings slice, but if not using ASK I don't have an answer. FB20224140
1
0
177
Jun ’26
Request for updated documentation in MetricKit and StateReporting
The new MetricKit and StateReporting APIs look great. The names of the Swift-first API conflicts with a lot of what I’ve written to do custom decoding (CrashDiagnostic —> MetricKit.CrashDiagnsotic and MetricKitModels.CrashDiagnostic). Job well done. Very clean API and reminds me of enum cases generated from Swift OpenAPI Generator, good stuff. Since there were no 1:1 labs this year for power and performance, I thought I’d send over my feedback for open discussion on the forums. This post is mostly centered around documentation and clarification. FB23019810 - Multiple metric and diagnostic pipeline design. What is the recommended implementation if I have two destinations that want the exact same domain scope. Two managers? A single manager with multiple async streams? Some API like HealthKit recommend a single HKHealthStore, is there any downside to creating many managers, or conversely, creating many async streams for metrics and diagnostics? FB23019316 - The new sample code shows mxSignpost. Is there any reason why we should not be using OSSignposter backed with a MetricKit OSLog handle? The API is more expressive and can handle wrapping closures P.S. see FB22413384 to hopefully enhance OSSignposter with an async func variant FB23020182 - MetricKit deprecations seem off and availability of the new API is missing from macOS and visionOS too. Can you clarify what the docs should show for deprecation? Can you clarify what the docs should show for availability of the new API? FB23051890 - Regarding StateReporting, I understand there is a sanity limit for how one would slice up the metrics per the video commentary. Too many dimensions the data becomes hard to associate with actual improvements to be made. Is there a limit developers should stay clear of? When using the StateReporting API, what are the practical limits to the number of domains and metadata key/value pairs we can have? FB23051980 - I’m excited and ready to implement StateReporting, in all the places. Is it supported in extensions? Will the resulting state changes be included in MetricReport? Last I asked, MXMetricPayload didn’t capture extension data. Will the resulting state changes be included in DiagnosticReport? I do see MXDiagnosticPayload come through containing extension data, so hopefully yes. FB23051678 - I didn’t catch any session or documentation material about the usage around the volatile metadata in the StateReporting API. The docs state it is a fatalError to change the domain and stable metadata keys, that makes sense if that is how the composite key for uniqueness is being created. By the name volatile I assume it can, well change. What is the usage of the volatile metadata? What limitations exist around it if any? The ReportedState API doesn’t have any properties for volatile, is it meant to be received in reports? FB23051738 - There isn’t a StateReporting area path in Feedback Assistant. For now sending feedbacks to MetricKit team, but it is a different framework. I assume other new frameworks are also missing I haven’t confirmed yet. FB13904761, FB13819435, FB13221143, FB22362800 - I have a handful of feedbacks that were reporting anomalous data with payloads. The routine with most bug feedbacks is to capture a sysdiagnose. Any tips on doing that when the reports are coming in from the field or not being actively monitored on dev and test devices? I know this is unlikely to happen but putting it out there FB9931474 - MetricKit: Add API to trigger sysdiagnose programmatically FB23047674 - Add docs for StateReporting and the Xcode simulate MetricKit menu. What domains should be added to the managers to populate data in the simulated reports? FB23020088 - I dig the new memory diagnostic, I’m hoping to close out this feedback that requested it FB9972410. Based on the language in the session, I am leaning towards it is only for memory limit, not jetsam memory pressure. Can you clarify in the documentation which memory exits it is for? Thanks for making it all the way to the end. If better to split this up in different posts I can try to do that but overlapped with other conference calls at the moment.
3
0
243
Jun ’26
Attributing SDK performance/battery impact in production
Hi! I have a couple of questions around measuring SDK performance in production, especially battery impact (and related to this, Disk Read/Writes). For an SDK running in the wild, what resources or APIs would you recommend using to evaluate performance impact once the SDK is already deployed to real users? I understand that Instruments and local profiling are the right tools during development, but production introduces a much wider range of devices, OS versions, app behaviors, network conditions, and user patterns (in particular, because SDK goes into different types of apps) In particular, are there recommended ways to understand battery usage attributable to an SDK in production? How can we reason about whether a battery-related issue is actually caused by our SDK rather than by the host app, system behavior, networking conditions, or other third-party SDKs? Any guidance on recommended signals, best practices, or things to avoid when trying to attribute battery impact in production would be very helpful.
2
0
226
Jun ’26
API enhancement suggestions for MetricKit and StateReporting
I shared a handful of feedbacks regarding MetricKit and StateReporting documentation here: https://developer.apple.com/forums/thread/833079, this post focuses on API design feedback and enhancements. While you’re breaking the interface and the json schema version, there are a few more quality of life improvements that could be made. I’m sharing my feature request feedbacks for the new API here to encourage other devs to write similar feedbacks and share theirs too. So, what would you say is the best way to inspire and ask for new features in MetricKit? #filefeedback FB23023840 - MetricKit: Add 'id' or 'identifier' (UUID string) to the MetricReport and DiagnosticReport Just like an IPS crash file, I’d like each report to have a unique identifier. This will help when performing mass imports of payloads into analysis and visualization tools. FB23023481 - MetricKit: Update environment osVersion.platform to use the same string name values as App Store Connect API --> iPhone OS should be simply 'iOS' This is just a small QOL to keep naming consistent in related fields. One could even share code! FB23024453 - MetricKit: Make MetricReport and DiagnosticReport types conform to Equatable for convenience of comparing decoded reports against each other This is similar to the unique ID concept, but if you don’t want to add an ID or conformance to identifiable, this can be a very useful quick check for all of the type properties being the same or not for report uniqueness. FB23019500 - MetricKit: Update API of MetricReport to not allow a nil environment I know the metadata in the metrics is nullable, and if this is just a wrapper or conversion of that I get it, but, is it possible to make the environment for the MetricReport required? I think it is reasonable for all of the properties except the multiple app versions to detect in the MetricReporter type or what ever internals. The rest of the API change eliminated a whole cohort of nullable types and properties, I think this is the last one! FB23023396 - MetricKit / Xcode: Simulate MetricKit payloads with encodingKeyFormat set to default produces an empty string bundle identifier My first few simulated payloads had an empty string for the bundle identifier. I know that the metadata didn’t expose this property in the old API but the jsonRepresentation did. I don’t know if it is related to how it is computed in that legacy type or just a bug in the Xcode utility. FB23052965 - MetricKit: Create OpenAPI Spec for the JSON encoding representations of MetricReport and DiagnosticReport I will have to update the code in my dev tools app that analyzes and visualizes MetricKit payloads to support the new json format(s). It would be nice if all of this code could be generated using a tool like the Swift OpenAPI Generator. One major advantage is that anyone could create their decoding types fairly easily, and, updating to new versions with new metrics or diagnostic constructs would be a simple code generation effort. FB23019260 - MetricKit / Developer Documentation: Update the new MetricKit sample code to use swift lang version 6 and fix compile errors The days of @preconcurrency import MetricKit are gone! At least for the new types. The sample code still uses Swift 5. Small tweak but good to illustrate the API is fully sendable and ready for structured concurrency. FB19499083 - Add API to designate the ‘source’ of the install —> App Store, TestFlight, Xcode (ad-hoc, mdm, etc.) I use the ‘source’ to determine a priority and routing of metric payloads (soon to be metric/diagnostic reports). I’d like to see as part of the environment property, a designation to where the app came from. Now that the report types are fully codable I could just wrap to enrich it, and that is probably going to be a common workflow, but it would be great if the original type had it from the start. I don’t have a reliable way to distinguish MDM device-enrolled vs MDM user-enrolled, Xcode is easy —> #if DEBUG source = Xcode. FB23053458 - MetricKit / Developer Documentation: Update sample code to capture the async sequences and demonstrate cancellation under a user privacy switch showing privacy-by-design I have always found MetricKit to be an incredibly useful privacy-by-default and private-by-design developer instrumentation tool. The sample code could be updated to show developers they can and should cancel their report tasks if the user wants to not have their data collected. MetricKit is rather incompatible with Open Telemetry, but signposts do easily transfer to spans and traces. Apple’s swift-log, swift-metrics, and swift-distributed-tracing would make for some really interesting integrations with MetricKit as the backing store. No FB numbers yet, I need to think about this one more. Betas are installed, apps updated with reporter sequences, save to files app and hunting for bugs. Evident from the group lab, MetricKit and StateReporting are a significant milestone for app performance and observability. Looking forward to future updates and betas!
1
0
185
Jun ’26
How do I tell from looking at the Batter Usage metric in Xcode Organizer if I'm in good shape?
I'm having trouble knowing whether my app is in good shape for battery usage by looking at the Battery Usage pane in Xcode's Organizer. I have some questions: At the top under "On-Screen Battery Usage", it says "Normalized to the usage of the most recent version when unplugged (x minutes / day)". Is the number there represented by "x" how long users tend to have my app open per day? When looking at the colored segments of the usage, I'm showing "Display" as 85% or more of the area. Is that just the cost of keeping the display turned on? Does it go up or down based on things like animations, displaying complex images, etc? It would be great to have an example of some apps of different types that are good "battery usage" citizens and what their battery usage looks like on this screen.
1
0
166
Jun ’26
Contacts "Prefer Nicknames" / "Short Name" setting not respected in the Share Sheet suggestions row
I've filed this as a feedback report (FB22305448) and wanted to raise it here in case anyone else is seeing the same behaviour or can confirm. The Share Sheet's suggested-people row appears to ignore the system Contacts name-display settings. When a contact has a Nickname set, that Nickname is shown in the sharing suggestions even when nicknames are explicitly turned off. Settings state Under Settings › Contacts › Short Name, both toggles are off: Short Name — Off Prefer Nicknames — Off With these off, the rest of the system (Contacts app, Messages conversation list, Mail, etc.) correctly shows the contact's full/short name rather than the Nickname. Steps to reproduce Open a contact and add a Nickname (e.g. contact "John Smith" with Nickname "JJ"). Go to Settings › Contacts › Short Name and ensure both Short Name and Prefer Nicknames are off. Open Photos, select a photo, and tap Share. Look at the suggested-people row at the top of the Share Sheet (the iMessage/AirDrop suggestions). Expected behaviour With Prefer Nicknames off, the suggestion should display the contact's full name (or short name if Short Name were enabled) — i.e. "John Smith", consistent with every other part of the system. Actual behaviour The Share Sheet suggestion shows the Nickname ("JJ") regardless of the Contacts setting. The setting is not honoured in this surface. Notes Reproducible every time. The Nickname is shown only in the Share Sheet suggestions row; other system surfaces respect the setting correctly, which points to the Share Sheet / suggestions component reading the contact's display name without applying the user's nickname preference. Feedback ID: FB22305448 Has anyone else run into this, or found a workaround short of removing the Nickname from the contact?
0
0
123
Jun ’26
CrashReporterExtension runtime capabilities and limitations
The documentation suggests that you can transfer files out of the crash reporting extension but it doesn’t outline if there are any gotchas to watch out for. Are there any limitations to this? Does it have full network access? Are app groups and keychain groups fully supported? Does the extension have a memory footprint limit we should watch out for? What is the lifecycle of the callback, what Is a reasonable amount of time to plan our implementation to do its work and be done within? 10 seconds? 30? And so on.
1
0
221
Jun ’26
Birthday Shown on Phone Call
I noticed a new feature in iOS 27 where someone's birthday will be shown on your phone while you're on a phone call with the birthday person. Is there an API that we can tap into to provide this information? The birthday says "Found in Contacts", but I'm hoping to provide other kinds of dates like Anniversaries through my app where I expose their dates to Siri and Spotlight Search.
0
0
58
Jun ’26
Best practices for sharing data between main app and `DeviceActivityMonitor`?
Dear Developer Technical Support, I wanted to ask for technical advice regarding the DeviceActivityMonitor which is part of the DeviceActivity framework: The DeviceActivityMonitor has a very strict memory limit of 6MB. That’s not a lot and it doesn't leave a lot of room for any kind of code that accesses permanently stored data. I would therefore like to ask for advice on best-practices on how to share information between the main app and that extension: Is UserDefaults a good idea to use here? Can/should we use CoreData or SwiftData? Should we build super small file-based data sharing (e.g. via .plists)? Why is it necessary to share data? This can be simple things that inform the decision of the device activity monitor in intervalDidStart, intervalDidEnd, eventDidReachThreshold, eventWillReachThresholdWarning. For example a setting where the user decides if they want to receive a push notification on eventWillReachThresholdWarning. Or the list of tokens that is supposed to be blocked in eventDidReachThreshold or intervalDidStart. I’m asking because even though we are super careful and conservative about memory allocations in our DeviceActivityMonitor we are regularly seeing it being killed due to memory pressure. What’s the best way to approach this? I’m grateful for any kinds of hints! Thanks a lot and have a great day! – Frederik
1
1
518
Jun ’26
What's the best way to get symbol files for system libraries, for symbolicating MetricKit call stack trees?
I wrote a python script MXSymbolicate to symbolicate crash reports produced by MetricKit. To symbolicate a given frame, it needs the symbol file for that frame's library. For system libraries, my system only has the requisite files on disk if I've plugged an iOS device of that type at that iOS version into my computer at some point (I assume these symbol files from the device are generated by Xcode when it's preparing to debug on a new device). All these different versions of the symbol files take up a fair bit of space on my machine over time, and it means the symbolication process isn't very portable. Is there a better way to get ahold of symbol files for system libraries? Or is the expectation that we (as third party developers) only symbolicate the frames from our own apps?
1
0
196
Jun ’26
Lastest Xcode performance concern
Xcode26.2, xcode26.3: with each Xcode version upgrading from xcode26.0 to Xcode 26.2, xcode26.3, we saw size increased with same code running on different Xcode versions, freeze happened when run app on simulator, also our same XCtest cases randomly failure on Mac Mini, but successfuly on Mac book with same OS and xcode version
1
0
156
Jun ’26
Help with reducing File Lock (0xdead10cc) terminations
My app has a meaningful number of 0xdead10cc terminations because it deals with sqlite files in a shared app container. Are there any tips to diagnose them or track down which files are most often held open? Are they delivered to MetricKit as crash diagnostics? They're hard to identify in the Xcode organizer - I have to right-click on a suspect, Show in Finder, Show Package Contents, navigate into the proper sub-folder for my filter, then into the Logs subfolder, and look through the raw crash reports. And these crash reports don't identify the file that the lock is held open to, and they don't identify the correct culprit thread. Not all of them even show any of my code doing file IO. FB12292887
1
0
206
Jun ’26
Screen Time APIs showing severe inconsistencies (DeviceActivity not firing + impossible usage data)
Hi everyone, I’m the developer of one sec, an app used by a large number of users globally to reduce time spent on social media and to build healthier digital habits. Because of this, we rely heavily on Apple’s Screen Time / DeviceActivity / FamilyControls, ManagedSettings APIs – and unfortunately, we’re seeing increasingly severe issues in production that directly impact hundreds of thousands of real iOS users. During the past years, we have been busy filing dozens of feedback requests for different Screen Time issues – and there has been no response from Apple at all. Developer Relations might be able to "confirm" that the bugs are present and that they ended up with the right team – but they are never addressed, neither are workarounds provided. Instead, the situation gets worse and worse. iOS 26 introduced a series of heavy regressions (which have been reported via Apple’s official bug report tool "Feedback Assistant" on iOS 26 beta 1 in June 2025 – and have not been addressed 10 Months later). This is very frustrating for us as developers, but also for our end-users who run into these issues every day. In the end this impacts our ability to build an amazing product and hurts revenue (which affects both us and Apple). 1. DeviceActivity thresholds are not firing at all This affects both: our app’s usage of the API and Apple’s own Screen Time limits Radars: FB22304617, FB20526837, FB15491936, FB12195437, FB15663329, FB18198691, FB18289475, FB19827144 2. Screen Time usage data is clearly corrupted Websites showing hundreds of hours per week Up to ~20 hours per day of usage reported for a single domain Radars: FB22304617, FB17777429, FB18464235 3. DeviceActivity thresholds reaching threshold immediately Newly introduced with iOS 26 Reported on iOS 26 beta 1 in June No response so far / no workaround DeviceActivity calls didReachThreshold immediately after creating the DeviceActivityEvent – instead of waiting till the defined threshold is actually reached. Radars: FB13696022, FB18351583, FB21320644, FB18927456, FB18061981 4. Randomly Randomizing ApplicationTokens From time to time, and without consistency, Screen Time suddenly provides new, random, unknown tokens to my app in the ShieldConfigurationDataSource and ShieldActionDelegate. This has been reported on many times before here on the dev forms, many many years back already: https://forums.developer.apple.com/forums/thread/756440 https://forums.developer.apple.com/forums/thread/758325 https://forums.developer.apple.com/forums/thread/758325?answerId=793267022#793267022 Radars: FB14082790 and FB18764644 5. Moving Tokens from one ManagedSettingsStore to Another Removing an ApplicationToken from one SettingsStore and then adding it to another while the target app remains in foreground leads to the re-use of the ShieldConfiguration. Which can be wrong in many scenarios. It is not possible to request a re-request of the ShieldConfiguration in that scenario. Radar: FB14237883 6. Unable to Open Parent App (one sec) from Shield Many times, when a target app is blocked by a shield, the user wants to perform some action (e.g. to unlock more time for the target app via an intervention). That means, that somehow I have to forward the user from a ShieldActionDelegate back into my target app. Unfortunately, there’s no API for that. Many apps on the App Store rely on private API to achieve that, but that’s too risky for a popular app like one sec. Radar: FB15079668 7. Unable to Open Target App from an ApplicationToken When a user has completed an intervention within one sec, and they indend to to continue to the target app, there is no way that one sec can open the target app just from the token alone. Sure, there are URL schemes, but that means the user has to manually assign URL schemes to each ApplicationToken. That is not a very user friendly process (and in many cases impossible, because not every app registers URL schemes). It would be better if there was a way that my app could open a target app directly from an ApplicationToken, e.g. via an AppIntent that can be run on a button press. This way, the selected apps would remain fully private while still offering advanced functionality: struct OpenTargetAppIntent: AppIntent, OpenAppFromApplicationTokenIntent { func perform() { return .result(openAppFromApplicationToken: applicationToken) } } Radar: FB15500695 Summary Thanks a lot for taking the time to read my feedback. If you have any questions, please feel free to reach out to me any time. I’m always happy to provide more details, logs, and steps to reproduce in my radars / feedback requests or in-person in Cupertino. It would be extremely helpful if someone from the Screen Time / DeviceActivity engineering team could: Take a look at the listed radars. Work on bug fixes and be transparent about when fixes will be shipped. Provide workarounds in the meantime. We genuinely want to build great, reliable experiences on top of Screen Time – but in its current state, it’s becoming very difficult to depend on. – Frederik
3
10
1.6k
Jun ’26
WeatherKit WeatherService fails to generate JWT with WDSJWTAuthenticator Code=2 despite valid entitlement/profile
Hi Apple Developer Support / WeatherKit team, I’m trying to use native iOS WeatherKit through WeatherService.shared in a SwiftUI app. Every request fails before weather data is returned because WeatherDaemon cannot generate the WeatherKit JWT. I am not using the REST API or manually generating a JWT. This is the native Swift WeatherKit API. import WeatherKit import CoreLocation let current = try await WeatherService.shared.weather( for: CLLocation(latitude: 25.76, longitude: -80.19), including: .current ) I also tested the same pattern used in Apple’s sample project, “Fetching weather forecasts with WeatherKit,” which calls: WeatherService.shared.weather(for: location, including: .current) The error I get is: Failed to generate jwt token for: com.apple.weatherkit.authservice with error: Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" Encountered an error when fetching weather data subset; error=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors 2 Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" Setup details: Paid Apple Developer Program account Native iOS SwiftUI app Physical iPhone, not Simulator WeatherKit capability enabled in Developer portal App ID has WeatherKit enabled Xcode Signing & Capabilities includes WeatherKit Automatic signing enabled Provisioning profile regenerated through Xcode App deleted and reinstalled after configuration changes Clean Build Folder / DerivedData cleanup attempted Bundle ID in Xcode matches the App ID in Developer portal Tested .current, .hourly, and .daily WeatherKit subset requests Ensured I am not running on “My Mac Designed for iPhone/iPad” I verified the built app’s entitlements. They include: application-identifier = [REDACTED_TEAM_ID].[REDACTED_BUNDLE_ID] com.apple.developer.team-identifier = [REDACTED_TEAM_ID] com.apple.developer.weatherkit = true get-task-allow = true The embedded provisioning profile also includes: com.apple.developer.weatherkit = true Because the entitlement and provisioning profile appear correct, and the failure happens during JWT generation before weather data is returned, this seems like either a WeatherKit entitlement propagation issue or a backend authorization issue. Can Apple staff clarify what WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 means, and whether there is a way to verify that WeatherKit JWT generation is enabled for my App ID? I can provide my Team ID, Bundle ID, provisioning profile details, and full device logs privately if needed.
3
0
348
Jun ’26
Tips and Tricks for TipKit
My designers like TipKit, especially the newer flavor we can control the content. What are some best practices or tips and tricks to share with product owners when designing around what the framework is capable of doing? Concepts that might be relevant: Onboarding FAQ Progressive disclosure of new features HELP / support workflows
Replies
1
Boosts
0
Views
217
Activity
Jun ’26
Does NI now support DIRECTION finding for UWB in more recent iPhone models?
Given that Apple is a Sponsor level member of the FIRa Consortium (on UWB interoperability) and the FIRa 3.0 spec has been released, are there any improvements in the Nearby Interaction framework for UWB direction tracking? It appears that NI returns null for direction-found with third-party UWB device currently.
Replies
0
Boosts
1
Views
172
Activity
Jun ’26
How to control the location in the Bluetooth prompt for educational and training guides
I want my team to be able to take screenshots of the app to produce training and support material for our app users. Is there any way, when connected to Xcode, to influence the location and the devices that show up in the TCC prompt? I don't want a screenshot of a teammate's work remote location to land in our docs. Like if our app connects to a specific kind of sensor to have that also show up in the picker and not show 'Apple TV' and the other apple devices that are named, nearby, and frequently connected to the device. FB14768675
Replies
1
Boosts
0
Views
200
Activity
Jun ’26
Can I pair an iPhone acting as central with my Mac acting as a peripheral?
When I try to use encrypted notification, setNotify always fails on the central side.
Replies
1
Boosts
0
Views
164
Activity
Jun ’26
Can my app prevent other apps from connecting to my accessory
Is there any way for my app when connecting normally, or through ASK, to obtain an exclusive lock against my devices? Or can I register my company identifier with Apple to only allow apps made by my company to connect to our devices? FB17823898
Replies
1
Boosts
0
Views
211
Activity
Jun ’26
Is there any way to direct the user to the Bluetooth Settings page?
What is the best way for an app to deep link a user to the Bluetooth Settings page in the Settings app? For various reasons, 'go to bluetooth settings' is easier said than done for some users. I don't know of any public settings app URLs to send the users to the Bluetooth page. If using ASK it is in your apps' settings slice, but if not using ASK I don't have an answer. FB20224140
Replies
1
Boosts
0
Views
177
Activity
Jun ’26
Request for updated documentation in MetricKit and StateReporting
The new MetricKit and StateReporting APIs look great. The names of the Swift-first API conflicts with a lot of what I’ve written to do custom decoding (CrashDiagnostic —> MetricKit.CrashDiagnsotic and MetricKitModels.CrashDiagnostic). Job well done. Very clean API and reminds me of enum cases generated from Swift OpenAPI Generator, good stuff. Since there were no 1:1 labs this year for power and performance, I thought I’d send over my feedback for open discussion on the forums. This post is mostly centered around documentation and clarification. FB23019810 - Multiple metric and diagnostic pipeline design. What is the recommended implementation if I have two destinations that want the exact same domain scope. Two managers? A single manager with multiple async streams? Some API like HealthKit recommend a single HKHealthStore, is there any downside to creating many managers, or conversely, creating many async streams for metrics and diagnostics? FB23019316 - The new sample code shows mxSignpost. Is there any reason why we should not be using OSSignposter backed with a MetricKit OSLog handle? The API is more expressive and can handle wrapping closures P.S. see FB22413384 to hopefully enhance OSSignposter with an async func variant FB23020182 - MetricKit deprecations seem off and availability of the new API is missing from macOS and visionOS too. Can you clarify what the docs should show for deprecation? Can you clarify what the docs should show for availability of the new API? FB23051890 - Regarding StateReporting, I understand there is a sanity limit for how one would slice up the metrics per the video commentary. Too many dimensions the data becomes hard to associate with actual improvements to be made. Is there a limit developers should stay clear of? When using the StateReporting API, what are the practical limits to the number of domains and metadata key/value pairs we can have? FB23051980 - I’m excited and ready to implement StateReporting, in all the places. Is it supported in extensions? Will the resulting state changes be included in MetricReport? Last I asked, MXMetricPayload didn’t capture extension data. Will the resulting state changes be included in DiagnosticReport? I do see MXDiagnosticPayload come through containing extension data, so hopefully yes. FB23051678 - I didn’t catch any session or documentation material about the usage around the volatile metadata in the StateReporting API. The docs state it is a fatalError to change the domain and stable metadata keys, that makes sense if that is how the composite key for uniqueness is being created. By the name volatile I assume it can, well change. What is the usage of the volatile metadata? What limitations exist around it if any? The ReportedState API doesn’t have any properties for volatile, is it meant to be received in reports? FB23051738 - There isn’t a StateReporting area path in Feedback Assistant. For now sending feedbacks to MetricKit team, but it is a different framework. I assume other new frameworks are also missing I haven’t confirmed yet. FB13904761, FB13819435, FB13221143, FB22362800 - I have a handful of feedbacks that were reporting anomalous data with payloads. The routine with most bug feedbacks is to capture a sysdiagnose. Any tips on doing that when the reports are coming in from the field or not being actively monitored on dev and test devices? I know this is unlikely to happen but putting it out there FB9931474 - MetricKit: Add API to trigger sysdiagnose programmatically FB23047674 - Add docs for StateReporting and the Xcode simulate MetricKit menu. What domains should be added to the managers to populate data in the simulated reports? FB23020088 - I dig the new memory diagnostic, I’m hoping to close out this feedback that requested it FB9972410. Based on the language in the session, I am leaning towards it is only for memory limit, not jetsam memory pressure. Can you clarify in the documentation which memory exits it is for? Thanks for making it all the way to the end. If better to split this up in different posts I can try to do that but overlapped with other conference calls at the moment.
Replies
3
Boosts
0
Views
243
Activity
Jun ’26
Attributing SDK performance/battery impact in production
Hi! I have a couple of questions around measuring SDK performance in production, especially battery impact (and related to this, Disk Read/Writes). For an SDK running in the wild, what resources or APIs would you recommend using to evaluate performance impact once the SDK is already deployed to real users? I understand that Instruments and local profiling are the right tools during development, but production introduces a much wider range of devices, OS versions, app behaviors, network conditions, and user patterns (in particular, because SDK goes into different types of apps) In particular, are there recommended ways to understand battery usage attributable to an SDK in production? How can we reason about whether a battery-related issue is actually caused by our SDK rather than by the host app, system behavior, networking conditions, or other third-party SDKs? Any guidance on recommended signals, best practices, or things to avoid when trying to attribute battery impact in production would be very helpful.
Replies
2
Boosts
0
Views
226
Activity
Jun ’26
API enhancement suggestions for MetricKit and StateReporting
I shared a handful of feedbacks regarding MetricKit and StateReporting documentation here: https://developer.apple.com/forums/thread/833079, this post focuses on API design feedback and enhancements. While you’re breaking the interface and the json schema version, there are a few more quality of life improvements that could be made. I’m sharing my feature request feedbacks for the new API here to encourage other devs to write similar feedbacks and share theirs too. So, what would you say is the best way to inspire and ask for new features in MetricKit? #filefeedback FB23023840 - MetricKit: Add 'id' or 'identifier' (UUID string) to the MetricReport and DiagnosticReport Just like an IPS crash file, I’d like each report to have a unique identifier. This will help when performing mass imports of payloads into analysis and visualization tools. FB23023481 - MetricKit: Update environment osVersion.platform to use the same string name values as App Store Connect API --> iPhone OS should be simply 'iOS' This is just a small QOL to keep naming consistent in related fields. One could even share code! FB23024453 - MetricKit: Make MetricReport and DiagnosticReport types conform to Equatable for convenience of comparing decoded reports against each other This is similar to the unique ID concept, but if you don’t want to add an ID or conformance to identifiable, this can be a very useful quick check for all of the type properties being the same or not for report uniqueness. FB23019500 - MetricKit: Update API of MetricReport to not allow a nil environment I know the metadata in the metrics is nullable, and if this is just a wrapper or conversion of that I get it, but, is it possible to make the environment for the MetricReport required? I think it is reasonable for all of the properties except the multiple app versions to detect in the MetricReporter type or what ever internals. The rest of the API change eliminated a whole cohort of nullable types and properties, I think this is the last one! FB23023396 - MetricKit / Xcode: Simulate MetricKit payloads with encodingKeyFormat set to default produces an empty string bundle identifier My first few simulated payloads had an empty string for the bundle identifier. I know that the metadata didn’t expose this property in the old API but the jsonRepresentation did. I don’t know if it is related to how it is computed in that legacy type or just a bug in the Xcode utility. FB23052965 - MetricKit: Create OpenAPI Spec for the JSON encoding representations of MetricReport and DiagnosticReport I will have to update the code in my dev tools app that analyzes and visualizes MetricKit payloads to support the new json format(s). It would be nice if all of this code could be generated using a tool like the Swift OpenAPI Generator. One major advantage is that anyone could create their decoding types fairly easily, and, updating to new versions with new metrics or diagnostic constructs would be a simple code generation effort. FB23019260 - MetricKit / Developer Documentation: Update the new MetricKit sample code to use swift lang version 6 and fix compile errors The days of @preconcurrency import MetricKit are gone! At least for the new types. The sample code still uses Swift 5. Small tweak but good to illustrate the API is fully sendable and ready for structured concurrency. FB19499083 - Add API to designate the ‘source’ of the install —> App Store, TestFlight, Xcode (ad-hoc, mdm, etc.) I use the ‘source’ to determine a priority and routing of metric payloads (soon to be metric/diagnostic reports). I’d like to see as part of the environment property, a designation to where the app came from. Now that the report types are fully codable I could just wrap to enrich it, and that is probably going to be a common workflow, but it would be great if the original type had it from the start. I don’t have a reliable way to distinguish MDM device-enrolled vs MDM user-enrolled, Xcode is easy —> #if DEBUG source = Xcode. FB23053458 - MetricKit / Developer Documentation: Update sample code to capture the async sequences and demonstrate cancellation under a user privacy switch showing privacy-by-design I have always found MetricKit to be an incredibly useful privacy-by-default and private-by-design developer instrumentation tool. The sample code could be updated to show developers they can and should cancel their report tasks if the user wants to not have their data collected. MetricKit is rather incompatible with Open Telemetry, but signposts do easily transfer to spans and traces. Apple’s swift-log, swift-metrics, and swift-distributed-tracing would make for some really interesting integrations with MetricKit as the backing store. No FB numbers yet, I need to think about this one more. Betas are installed, apps updated with reporter sequences, save to files app and hunting for bugs. Evident from the group lab, MetricKit and StateReporting are a significant milestone for app performance and observability. Looking forward to future updates and betas!
Replies
1
Boosts
0
Views
185
Activity
Jun ’26
How do I tell from looking at the Batter Usage metric in Xcode Organizer if I'm in good shape?
I'm having trouble knowing whether my app is in good shape for battery usage by looking at the Battery Usage pane in Xcode's Organizer. I have some questions: At the top under "On-Screen Battery Usage", it says "Normalized to the usage of the most recent version when unplugged (x minutes / day)". Is the number there represented by "x" how long users tend to have my app open per day? When looking at the colored segments of the usage, I'm showing "Display" as 85% or more of the area. Is that just the cost of keeping the display turned on? Does it go up or down based on things like animations, displaying complex images, etc? It would be great to have an example of some apps of different types that are good "battery usage" citizens and what their battery usage looks like on this screen.
Replies
1
Boosts
0
Views
166
Activity
Jun ’26
Contacts "Prefer Nicknames" / "Short Name" setting not respected in the Share Sheet suggestions row
I've filed this as a feedback report (FB22305448) and wanted to raise it here in case anyone else is seeing the same behaviour or can confirm. The Share Sheet's suggested-people row appears to ignore the system Contacts name-display settings. When a contact has a Nickname set, that Nickname is shown in the sharing suggestions even when nicknames are explicitly turned off. Settings state Under Settings › Contacts › Short Name, both toggles are off: Short Name — Off Prefer Nicknames — Off With these off, the rest of the system (Contacts app, Messages conversation list, Mail, etc.) correctly shows the contact's full/short name rather than the Nickname. Steps to reproduce Open a contact and add a Nickname (e.g. contact "John Smith" with Nickname "JJ"). Go to Settings › Contacts › Short Name and ensure both Short Name and Prefer Nicknames are off. Open Photos, select a photo, and tap Share. Look at the suggested-people row at the top of the Share Sheet (the iMessage/AirDrop suggestions). Expected behaviour With Prefer Nicknames off, the suggestion should display the contact's full name (or short name if Short Name were enabled) — i.e. "John Smith", consistent with every other part of the system. Actual behaviour The Share Sheet suggestion shows the Nickname ("JJ") regardless of the Contacts setting. The setting is not honoured in this surface. Notes Reproducible every time. The Nickname is shown only in the Share Sheet suggestions row; other system surfaces respect the setting correctly, which points to the Share Sheet / suggestions component reading the contact's display name without applying the user's nickname preference. Feedback ID: FB22305448 Has anyone else run into this, or found a workaround short of removing the Nickname from the contact?
Replies
0
Boosts
0
Views
123
Activity
Jun ’26
CrashReporterExtension runtime capabilities and limitations
The documentation suggests that you can transfer files out of the crash reporting extension but it doesn’t outline if there are any gotchas to watch out for. Are there any limitations to this? Does it have full network access? Are app groups and keychain groups fully supported? Does the extension have a memory footprint limit we should watch out for? What is the lifecycle of the callback, what Is a reasonable amount of time to plan our implementation to do its work and be done within? 10 seconds? 30? And so on.
Replies
1
Boosts
0
Views
221
Activity
Jun ’26
Birthday Shown on Phone Call
I noticed a new feature in iOS 27 where someone's birthday will be shown on your phone while you're on a phone call with the birthday person. Is there an API that we can tap into to provide this information? The birthday says "Found in Contacts", but I'm hoping to provide other kinds of dates like Anniversaries through my app where I expose their dates to Siri and Spotlight Search.
Replies
0
Boosts
0
Views
58
Activity
Jun ’26
Best practices for sharing data between main app and `DeviceActivityMonitor`?
Dear Developer Technical Support, I wanted to ask for technical advice regarding the DeviceActivityMonitor which is part of the DeviceActivity framework: The DeviceActivityMonitor has a very strict memory limit of 6MB. That’s not a lot and it doesn't leave a lot of room for any kind of code that accesses permanently stored data. I would therefore like to ask for advice on best-practices on how to share information between the main app and that extension: Is UserDefaults a good idea to use here? Can/should we use CoreData or SwiftData? Should we build super small file-based data sharing (e.g. via .plists)? Why is it necessary to share data? This can be simple things that inform the decision of the device activity monitor in intervalDidStart, intervalDidEnd, eventDidReachThreshold, eventWillReachThresholdWarning. For example a setting where the user decides if they want to receive a push notification on eventWillReachThresholdWarning. Or the list of tokens that is supposed to be blocked in eventDidReachThreshold or intervalDidStart. I’m asking because even though we are super careful and conservative about memory allocations in our DeviceActivityMonitor we are regularly seeing it being killed due to memory pressure. What’s the best way to approach this? I’m grateful for any kinds of hints! Thanks a lot and have a great day! – Frederik
Replies
1
Boosts
1
Views
518
Activity
Jun ’26
What's the best way to get symbol files for system libraries, for symbolicating MetricKit call stack trees?
I wrote a python script MXSymbolicate to symbolicate crash reports produced by MetricKit. To symbolicate a given frame, it needs the symbol file for that frame's library. For system libraries, my system only has the requisite files on disk if I've plugged an iOS device of that type at that iOS version into my computer at some point (I assume these symbol files from the device are generated by Xcode when it's preparing to debug on a new device). All these different versions of the symbol files take up a fair bit of space on my machine over time, and it means the symbolication process isn't very portable. Is there a better way to get ahold of symbol files for system libraries? Or is the expectation that we (as third party developers) only symbolicate the frames from our own apps?
Replies
1
Boosts
0
Views
196
Activity
Jun ’26
Lastest Xcode performance concern
Xcode26.2, xcode26.3: with each Xcode version upgrading from xcode26.0 to Xcode 26.2, xcode26.3, we saw size increased with same code running on different Xcode versions, freeze happened when run app on simulator, also our same XCtest cases randomly failure on Mac Mini, but successfuly on Mac book with same OS and xcode version
Replies
1
Boosts
0
Views
156
Activity
Jun ’26
Help with reducing File Lock (0xdead10cc) terminations
My app has a meaningful number of 0xdead10cc terminations because it deals with sqlite files in a shared app container. Are there any tips to diagnose them or track down which files are most often held open? Are they delivered to MetricKit as crash diagnostics? They're hard to identify in the Xcode organizer - I have to right-click on a suspect, Show in Finder, Show Package Contents, navigate into the proper sub-folder for my filter, then into the Logs subfolder, and look through the raw crash reports. And these crash reports don't identify the file that the lock is held open to, and they don't identify the correct culprit thread. Not all of them even show any of my code doing file IO. FB12292887
Replies
1
Boosts
0
Views
206
Activity
Jun ’26
Screen Time APIs showing severe inconsistencies (DeviceActivity not firing + impossible usage data)
Hi everyone, I’m the developer of one sec, an app used by a large number of users globally to reduce time spent on social media and to build healthier digital habits. Because of this, we rely heavily on Apple’s Screen Time / DeviceActivity / FamilyControls, ManagedSettings APIs – and unfortunately, we’re seeing increasingly severe issues in production that directly impact hundreds of thousands of real iOS users. During the past years, we have been busy filing dozens of feedback requests for different Screen Time issues – and there has been no response from Apple at all. Developer Relations might be able to "confirm" that the bugs are present and that they ended up with the right team – but they are never addressed, neither are workarounds provided. Instead, the situation gets worse and worse. iOS 26 introduced a series of heavy regressions (which have been reported via Apple’s official bug report tool "Feedback Assistant" on iOS 26 beta 1 in June 2025 – and have not been addressed 10 Months later). This is very frustrating for us as developers, but also for our end-users who run into these issues every day. In the end this impacts our ability to build an amazing product and hurts revenue (which affects both us and Apple). 1. DeviceActivity thresholds are not firing at all This affects both: our app’s usage of the API and Apple’s own Screen Time limits Radars: FB22304617, FB20526837, FB15491936, FB12195437, FB15663329, FB18198691, FB18289475, FB19827144 2. Screen Time usage data is clearly corrupted Websites showing hundreds of hours per week Up to ~20 hours per day of usage reported for a single domain Radars: FB22304617, FB17777429, FB18464235 3. DeviceActivity thresholds reaching threshold immediately Newly introduced with iOS 26 Reported on iOS 26 beta 1 in June No response so far / no workaround DeviceActivity calls didReachThreshold immediately after creating the DeviceActivityEvent – instead of waiting till the defined threshold is actually reached. Radars: FB13696022, FB18351583, FB21320644, FB18927456, FB18061981 4. Randomly Randomizing ApplicationTokens From time to time, and without consistency, Screen Time suddenly provides new, random, unknown tokens to my app in the ShieldConfigurationDataSource and ShieldActionDelegate. This has been reported on many times before here on the dev forms, many many years back already: https://forums.developer.apple.com/forums/thread/756440 https://forums.developer.apple.com/forums/thread/758325 https://forums.developer.apple.com/forums/thread/758325?answerId=793267022#793267022 Radars: FB14082790 and FB18764644 5. Moving Tokens from one ManagedSettingsStore to Another Removing an ApplicationToken from one SettingsStore and then adding it to another while the target app remains in foreground leads to the re-use of the ShieldConfiguration. Which can be wrong in many scenarios. It is not possible to request a re-request of the ShieldConfiguration in that scenario. Radar: FB14237883 6. Unable to Open Parent App (one sec) from Shield Many times, when a target app is blocked by a shield, the user wants to perform some action (e.g. to unlock more time for the target app via an intervention). That means, that somehow I have to forward the user from a ShieldActionDelegate back into my target app. Unfortunately, there’s no API for that. Many apps on the App Store rely on private API to achieve that, but that’s too risky for a popular app like one sec. Radar: FB15079668 7. Unable to Open Target App from an ApplicationToken When a user has completed an intervention within one sec, and they indend to to continue to the target app, there is no way that one sec can open the target app just from the token alone. Sure, there are URL schemes, but that means the user has to manually assign URL schemes to each ApplicationToken. That is not a very user friendly process (and in many cases impossible, because not every app registers URL schemes). It would be better if there was a way that my app could open a target app directly from an ApplicationToken, e.g. via an AppIntent that can be run on a button press. This way, the selected apps would remain fully private while still offering advanced functionality: struct OpenTargetAppIntent: AppIntent, OpenAppFromApplicationTokenIntent { func perform() { return .result(openAppFromApplicationToken: applicationToken) } } Radar: FB15500695 Summary Thanks a lot for taking the time to read my feedback. If you have any questions, please feel free to reach out to me any time. I’m always happy to provide more details, logs, and steps to reproduce in my radars / feedback requests or in-person in Cupertino. It would be extremely helpful if someone from the Screen Time / DeviceActivity engineering team could: Take a look at the listed radars. Work on bug fixes and be transparent about when fixes will be shipped. Provide workarounds in the meantime. We genuinely want to build great, reliable experiences on top of Screen Time – but in its current state, it’s becoming very difficult to depend on. – Frederik
Replies
3
Boosts
10
Views
1.6k
Activity
Jun ’26
WeatherKit WeatherService fails to generate JWT with WDSJWTAuthenticator Code=2 despite valid entitlement/profile
Hi Apple Developer Support / WeatherKit team, I’m trying to use native iOS WeatherKit through WeatherService.shared in a SwiftUI app. Every request fails before weather data is returned because WeatherDaemon cannot generate the WeatherKit JWT. I am not using the REST API or manually generating a JWT. This is the native Swift WeatherKit API. import WeatherKit import CoreLocation let current = try await WeatherService.shared.weather( for: CLLocation(latitude: 25.76, longitude: -80.19), including: .current ) I also tested the same pattern used in Apple’s sample project, “Fetching weather forecasts with WeatherKit,” which calls: WeatherService.shared.weather(for: location, including: .current) The error I get is: Failed to generate jwt token for: com.apple.weatherkit.authservice with error: Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" Encountered an error when fetching weather data subset; error=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors 2 Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" Setup details: Paid Apple Developer Program account Native iOS SwiftUI app Physical iPhone, not Simulator WeatherKit capability enabled in Developer portal App ID has WeatherKit enabled Xcode Signing & Capabilities includes WeatherKit Automatic signing enabled Provisioning profile regenerated through Xcode App deleted and reinstalled after configuration changes Clean Build Folder / DerivedData cleanup attempted Bundle ID in Xcode matches the App ID in Developer portal Tested .current, .hourly, and .daily WeatherKit subset requests Ensured I am not running on “My Mac Designed for iPhone/iPad” I verified the built app’s entitlements. They include: application-identifier = [REDACTED_TEAM_ID].[REDACTED_BUNDLE_ID] com.apple.developer.team-identifier = [REDACTED_TEAM_ID] com.apple.developer.weatherkit = true get-task-allow = true The embedded provisioning profile also includes: com.apple.developer.weatherkit = true Because the entitlement and provisioning profile appear correct, and the failure happens during JWT generation before weather data is returned, this seems like either a WeatherKit entitlement propagation issue or a backend authorization issue. Can Apple staff clarify what WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 means, and whether there is a way to verify that WeatherKit JWT generation is enabled for my App ID? I can provide my Team ID, Bundle ID, provisioning profile details, and full device logs privately if needed.
Replies
3
Boosts
0
Views
348
Activity
Jun ’26
Any limitations with the new Trust Insights framework?
Are there any limitations with the new Trust Insights framework one should be aware of? Will it be available in all geographic regions? Does it work with all languages?
Replies
0
Boosts
0
Views
85
Activity
Jun ’26