Post

Replies

Boosts

Views

Activity

Reply to Questions about SignificantAppChangeApprovalRequired and detecting significant app changes
@brianindeed Use PermissionKit and the new significant change topic to notify 'the App Store' of your change. My understanding is that this will trigger the parental consent flows. Check out this video, I assume the behavior is identical across the two different topic types: https://developer.apple.com/videos/play/wwdc2025/293
Dec ’25
Reply to Is it possible to distinguish real vs manually added running data in HealthKit?
I would check out any of the HealthKit WWDC talks. There is a 'user entered' metadata key, but that relies on the app to use that flag when the user saves a workout. You can't edit samples. You can only create new ones, or delete data from your app. Hard to answer, are you trying to sync the data with a backend or just present changes locally to the user? There are version metadata keys that will be mutated by Apple. Again, up to the third party developer to do the right thing. This one is fairly obvious if you check the docs or watch some old videos. Checkout the route builder and route query types. Ask for workout route permissions and you can query any route against workouts. Do note you can have more than one route per workout. As to will route data exist? That depends on the app that saved the workout. Apple does this for outdoor workouts. Aside from 'delete all records of all apps', you app should be able to do almost everything that Apple Fitness and Apple Health allow. When deleting data, you can only delete data that you created. This is there to prevent an app with a bug that wipes out the users whole health database. https://developer.apple.com/videos/all-videos/?topic=health%20%26%20fitness
Dec ’25
Reply to Report JetsamEvent kill app event to MetricKit
@Joeljiangjiang, what @eskimo said. Here is my feedback as a reference. Please make one and if you're willing share your ask here so I can update mine too. In short, I want both a diagnostic, and some new properties associated with that memory pressure diagnostic. FB9972410 (MetricKit: Capture memory usage at time of jetsam and report as diagnostic) April 2022 While the memory metric is insightful combined with the exit metrics, it would be even more powerful to know the memory footprint at the time of jetsam pressure exit. This would allow one to look at the memory footprint and really evaluate if it is worth investigating, or if the footprint is so low and just the system was memory hungry because of some foreground app. For example, if the average suspend memory was 38 mb, but there was one instance of 150 mb, it would be good to see that one getting jetsam'd but the others not. Then we know we have an outlier and something wasn't released upon transition to background and it is time well spent to fix
Topic: App & System Services SubTopic: General Tags:
Feb ’26
Reply to MetricKit Metric Payload Split
@naftaly I submitted a somewhat relevant feedback a few years ago. FB9616844 - MetricKit: MXDiagnostic, MXDiagnosticPayload and MXMetricPayload should have 'identifier' properties I mostly wanted a unique identifier built-in because IPS files have them and then I wouldn't need to decorate the MetricKit payloads myself and it would be just built in. If you want to correlate runtime data you captured against a payload, your best bet is to do this with diagnostics since those are truly the PID at time of diagnostic--well at least I assume. I've never bothered to check. This could easily be tested by crashing and check the PID in the IPS crash file against that identified in the MXDiagnosticPayload metadata. The metadata is required in the diagnostic payload but it isn't in the metrics payload. While I have not in practice seen the metrics metadata object to be empty in a metric payload, you're right that you can't do much for variation over time. The API just simply doesn't have a way to represent that. My understanding is that it is the metadata at the time of reporting. If you're truly interested in the low power mode value over time, I would capture this in your app and then enrich your metric kit payload over time. I think it is unreasonable to expect the system to give you details when your app is background and not executed. You could listen to this while your app is running and record. Exploring creating signpost events would also be an option, though I would do the signpost event, not signpost interval for low power mode changes. https://developer.apple.com/documentation/foundation/processinfo/islowpowermodeenabled I have never concerned myself with the PID in the MXMetricPayload's metadata because as you pointed out, it can change over time. What is less likely to change is the TestFlight status. For that, I have done a bit of investigation and I'm waiting on a feedback. To answer your questions, you can, at the time a metric payload is delivered, check the system properties, PID, thermal state, etc., and just compare. In the case of TestFlight, the property seems just busted. FB15701498 - MetricKit / TestFlight: Production Issue - MXMetricManager not generating metric payloads as expected with iOS 18 This is another example where I capture information and enrich the MetricKit payload json when I ship off device. This is another example of 'value at time of payload'. I'm not tracking if the user was installing app store, Xcode, and TestFlight builds throughout a period of time--but my same advice about low power mode above could be taken if I truly was. StoreKit2 has a nice AppStore.Environment property that I switched from reading the sandbox receipt.
Topic: App & System Services SubTopic: General Tags:
Feb ’26
Reply to Testing MXMetricPayload with custom signposts
Good things come to those who wait. I don't get as many signpost metrics as I would expect. To understand your ask better, are you wanting the signpost interval data, or just the fact that the signpost event start and stop happened with basic things like timestamps? If the later, I'd just make an extension or a macro to emit the signpost + a structured log statement via SwiftLog.Logger or os.Logger APIs. Best of both worlds. If you're trying to get men stats and other data in the interval data, I'd start looking at Instruments as your go-to tool. If you want to see that the system is capturing your signposts via MetricKit API, fire up Instruments and watch for them. That having been said, I made a new feedback because I would find this useful too in a certain context. FB21900624 - MetricKit: Update Xcode to include a mode to generate a metric payload with user contributed data - aka signpost metrics The ask in my feedback is user / developer generated data only, which is currently limited to signposts, and potentially extended launch metrics since technically the developer opts into that one too. This is important because I would rather have just my data, than nothing at all due to all of the other system components that would be required generate a full payload.
Feb ’26
Reply to Can you only launch an app to specific state in the U.S.?
@ErikMonroe I assume you're asking as related to SB2420 in Texas. DeclaredAgeRange has a forums tag. If my assumption is correct, take a look at this property: https://developer.apple.com/documentation/declaredagerange/agerangeservice/iseligibleforagefeatures Stay away from the MetricKit regionFormat property of the MXMetadata dictionary. The user can download an app on the US App Store and then travel to another region.
Feb ’26
Reply to Background abnormal exit on iOS 26
@zhaotaotao have you looked at any of the AnalyticsReports available via the App Store Connect API? One of the crash reports analytics might be a good way to determine differences in Xcode Organizer vs MetricKit vs App Store Connect Metrics data. https://developer.apple.com/documentation/analytics-reports/app-crashes @Technology Evangelist could you comment on if the same under-reporting and fixed issue in 26 would also muddy the App Store Connect crashes analytics reports with over reporting?
Topic: App & System Services SubTopic: General Tags:
Feb ’26
Reply to Is there a way to pull Ratings data via API or other method?
I assume you're using this collection of APIs. The name is 'review' not 'rating' so that is the gap. Make a feedback, reference mine in it. I would want this capability too. https://developer.apple.com/documentation/appstoreconnectapi/customer-reviews FB21900768 - App Store Connect API: Make a collection of APIs for retrieving app ratings - or enrich the review API to allow fetching ratings without requring the user to have left a review for deeper user sentiment analysis
Feb ’26
Reply to Request for Device Temperature Monitoring and Thermal Attribution Analysis APIs
@kenny9309 there are a few good feedbacks here IMHO. Add thermal state to MetricKit metadata, low power mode is already there. This won't get you historical mind you, but it is a start. Add historical process info data as a new MetricKit metric. Instead of the thermal state at the time of metric capture (metadata), we could ask for historical changes or time spent in condition. Instead of a timeline, closer to existing MetricKit APIs perhaps a histogram of duration spent in thermal state (while app was running in foreground or background) If you want more data, just opt-in always. Add signposts and hook them with MetricKit. If you're only interested in receiving those payloads when you're in thermal state, then use that as your condition before starting a signpost metric. Might as well just record them always.
Topic: App & System Services SubTopic: General Tags:
Feb ’26
Reply to App Store Connect API returning 403 from perfPowerMetrics using Admin / Dev role keys
Since adopting a newer AppStoreConnect API OpenAPI spec, the trailing '/' in the server was added back; this was something I manually patched last summer. Without the patch to remove the trailing '/', when used with the Swift OpenAPI Generator, a URL with two slashes is produced which was invalid against the SCOPE of the token evidently. Notice .com//v1 and the double slash. https://api.appstoreconnect.apple.com//v1/apps/1672441148/perfPowerMetrics There is nothing wrong with the App Store Connect API itself other than perhaps the scope should honor two slashes since the spec declares it? I submitted a feedback for this last summer to have the Apple minted OpenAPI spec remove the trailing slash in the server url. FB18389250 - AppStoreConnect API: OpenAPI spec file has a server trailing '/' which results in Swift OpenAPI Generator code to have paths with two slashes unexpectedly
Mar ’26
Reply to Questions about SignificantAppChangeApprovalRequired and detecting significant app changes
@brianindeed Use PermissionKit and the new significant change topic to notify 'the App Store' of your change. My understanding is that this will trigger the parental consent flows. Check out this video, I assume the behavior is identical across the two different topic types: https://developer.apple.com/videos/play/wwdc2025/293
Replies
Boosts
Views
Activity
Dec ’25
Reply to Is it possible to distinguish real vs manually added running data in HealthKit?
I would check out any of the HealthKit WWDC talks. There is a 'user entered' metadata key, but that relies on the app to use that flag when the user saves a workout. You can't edit samples. You can only create new ones, or delete data from your app. Hard to answer, are you trying to sync the data with a backend or just present changes locally to the user? There are version metadata keys that will be mutated by Apple. Again, up to the third party developer to do the right thing. This one is fairly obvious if you check the docs or watch some old videos. Checkout the route builder and route query types. Ask for workout route permissions and you can query any route against workouts. Do note you can have more than one route per workout. As to will route data exist? That depends on the app that saved the workout. Apple does this for outdoor workouts. Aside from 'delete all records of all apps', you app should be able to do almost everything that Apple Fitness and Apple Health allow. When deleting data, you can only delete data that you created. This is there to prevent an app with a bug that wipes out the users whole health database. https://developer.apple.com/videos/all-videos/?topic=health%20%26%20fitness
Replies
Boosts
Views
Activity
Dec ’25
Reply to Report JetsamEvent kill app event to MetricKit
@Joeljiangjiang, what @eskimo said. Here is my feedback as a reference. Please make one and if you're willing share your ask here so I can update mine too. In short, I want both a diagnostic, and some new properties associated with that memory pressure diagnostic. FB9972410 (MetricKit: Capture memory usage at time of jetsam and report as diagnostic) April 2022 While the memory metric is insightful combined with the exit metrics, it would be even more powerful to know the memory footprint at the time of jetsam pressure exit. This would allow one to look at the memory footprint and really evaluate if it is worth investigating, or if the footprint is so low and just the system was memory hungry because of some foreground app. For example, if the average suspend memory was 38 mb, but there was one instance of 150 mb, it would be good to see that one getting jetsam'd but the others not. Then we know we have an outlier and something wasn't released upon transition to background and it is time well spent to fix
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to MetricKit Metric Payload Split
@naftaly I submitted a somewhat relevant feedback a few years ago. FB9616844 - MetricKit: MXDiagnostic, MXDiagnosticPayload and MXMetricPayload should have 'identifier' properties I mostly wanted a unique identifier built-in because IPS files have them and then I wouldn't need to decorate the MetricKit payloads myself and it would be just built in. If you want to correlate runtime data you captured against a payload, your best bet is to do this with diagnostics since those are truly the PID at time of diagnostic--well at least I assume. I've never bothered to check. This could easily be tested by crashing and check the PID in the IPS crash file against that identified in the MXDiagnosticPayload metadata. The metadata is required in the diagnostic payload but it isn't in the metrics payload. While I have not in practice seen the metrics metadata object to be empty in a metric payload, you're right that you can't do much for variation over time. The API just simply doesn't have a way to represent that. My understanding is that it is the metadata at the time of reporting. If you're truly interested in the low power mode value over time, I would capture this in your app and then enrich your metric kit payload over time. I think it is unreasonable to expect the system to give you details when your app is background and not executed. You could listen to this while your app is running and record. Exploring creating signpost events would also be an option, though I would do the signpost event, not signpost interval for low power mode changes. https://developer.apple.com/documentation/foundation/processinfo/islowpowermodeenabled I have never concerned myself with the PID in the MXMetricPayload's metadata because as you pointed out, it can change over time. What is less likely to change is the TestFlight status. For that, I have done a bit of investigation and I'm waiting on a feedback. To answer your questions, you can, at the time a metric payload is delivered, check the system properties, PID, thermal state, etc., and just compare. In the case of TestFlight, the property seems just busted. FB15701498 - MetricKit / TestFlight: Production Issue - MXMetricManager not generating metric payloads as expected with iOS 18 This is another example where I capture information and enrich the MetricKit payload json when I ship off device. This is another example of 'value at time of payload'. I'm not tracking if the user was installing app store, Xcode, and TestFlight builds throughout a period of time--but my same advice about low power mode above could be taken if I truly was. StoreKit2 has a nice AppStore.Environment property that I switched from reading the sandbox receipt.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to Testing MXMetricPayload with custom signposts
Good things come to those who wait. I don't get as many signpost metrics as I would expect. To understand your ask better, are you wanting the signpost interval data, or just the fact that the signpost event start and stop happened with basic things like timestamps? If the later, I'd just make an extension or a macro to emit the signpost + a structured log statement via SwiftLog.Logger or os.Logger APIs. Best of both worlds. If you're trying to get men stats and other data in the interval data, I'd start looking at Instruments as your go-to tool. If you want to see that the system is capturing your signposts via MetricKit API, fire up Instruments and watch for them. That having been said, I made a new feedback because I would find this useful too in a certain context. FB21900624 - MetricKit: Update Xcode to include a mode to generate a metric payload with user contributed data - aka signpost metrics The ask in my feedback is user / developer generated data only, which is currently limited to signposts, and potentially extended launch metrics since technically the developer opts into that one too. This is important because I would rather have just my data, than nothing at all due to all of the other system components that would be required generate a full payload.
Replies
Boosts
Views
Activity
Feb ’26
Reply to Can you only launch an app to specific state in the U.S.?
@ErikMonroe I assume you're asking as related to SB2420 in Texas. DeclaredAgeRange has a forums tag. If my assumption is correct, take a look at this property: https://developer.apple.com/documentation/declaredagerange/agerangeservice/iseligibleforagefeatures Stay away from the MetricKit regionFormat property of the MXMetadata dictionary. The user can download an app on the US App Store and then travel to another region.
Replies
Boosts
Views
Activity
Feb ’26
Reply to Background abnormal exit on iOS 26
@zhaotaotao have you looked at any of the AnalyticsReports available via the App Store Connect API? One of the crash reports analytics might be a good way to determine differences in Xcode Organizer vs MetricKit vs App Store Connect Metrics data. https://developer.apple.com/documentation/analytics-reports/app-crashes @Technology Evangelist could you comment on if the same under-reporting and fixed issue in 26 would also muddy the App Store Connect crashes analytics reports with over reporting?
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to Is there a way to pull Ratings data via API or other method?
I assume you're using this collection of APIs. The name is 'review' not 'rating' so that is the gap. Make a feedback, reference mine in it. I would want this capability too. https://developer.apple.com/documentation/appstoreconnectapi/customer-reviews FB21900768 - App Store Connect API: Make a collection of APIs for retrieving app ratings - or enrich the review API to allow fetching ratings without requring the user to have left a review for deeper user sentiment analysis
Replies
Boosts
Views
Activity
Feb ’26
Reply to Request for Device Temperature Monitoring and Thermal Attribution Analysis APIs
@kenny9309 there are a few good feedbacks here IMHO. Add thermal state to MetricKit metadata, low power mode is already there. This won't get you historical mind you, but it is a start. Add historical process info data as a new MetricKit metric. Instead of the thermal state at the time of metric capture (metadata), we could ask for historical changes or time spent in condition. Instead of a timeline, closer to existing MetricKit APIs perhaps a histogram of duration spent in thermal state (while app was running in foreground or background) If you want more data, just opt-in always. Add signposts and hook them with MetricKit. If you're only interested in receiving those payloads when you're in thermal state, then use that as your condition before starting a signpost metric. Might as well just record them always.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to App Store Connect API returning 403 from perfPowerMetrics using Admin / Dev role keys
Since adopting a newer AppStoreConnect API OpenAPI spec, the trailing '/' in the server was added back; this was something I manually patched last summer. Without the patch to remove the trailing '/', when used with the Swift OpenAPI Generator, a URL with two slashes is produced which was invalid against the SCOPE of the token evidently. Notice .com//v1 and the double slash. https://api.appstoreconnect.apple.com//v1/apps/1672441148/perfPowerMetrics There is nothing wrong with the App Store Connect API itself other than perhaps the scope should honor two slashes since the spec declares it? I submitted a feedback for this last summer to have the Apple minted OpenAPI spec remove the trailing slash in the server url. FB18389250 - AppStoreConnect API: OpenAPI spec file has a server trailing '/' which results in Swift OpenAPI Generator code to have paths with two slashes unexpectedly
Replies
Boosts
Views
Activity
Mar ’26