Posts under App & System Services topic

Post

Replies

Boosts

Views

Activity

iOS 26.2 RC DeviceActivityMonitor.eventDidReachThreshold regression?
Hi there, Starting with iOS 26.2 RC, all my DeviceActivityMonitor.eventDidReachThreshold get activated immediately as I pick up my iPhone for the first time, two nights in a row. Feedback: FB21267341 There's always a chance something odd is happening to my device in particular (although I can't recall making any changes here and the debug logs point to the issue), but just getting this out there ASAP in case others are seeing this (or haven't tried!), and it's critical as this is the RC. DeviceActivityMonitor.eventDidReachThreshold issues also mentioned here: https://developer.apple.com/forums/thread/793747; but I believe they are different and were potentially fixed in iOS 26.1, but it points to this part of the technology having issues and maybe someone from Apple has been tweaking it.
29
8
6.1k
1w
Cannot get StoreKit products on watchOS
I'm using Product.products(for:) to get my auto-renewable subscription on watchOS: let products = try await Product.products(for: [<##Identifier##>]) However, it doesn't return any value, and doesn't throw errors. The console shows an error: Could not parse product: missingValue(for: [StoreKit.ProductResponse.Key.billingPlanType], expected: StoreKit.BackingValue) Is this a bug or I did't configure something well? This product has been approved by App Review.
2
1
736
1w
Storekit, how to change and retrieve current user storefront
I've been struggling to work with the Storekit framework and specifically to find the current Storefront used by the user of the app. Context : My app needs to behave differently depending on the country of the user. For me relying on Locale.current.region?.identifier does not seem very reliable, the user can change it really easily. I'm trying to use the Storekit framework like so : if let storefront = await StoreKit.Storefront.current{ return storefront.countryCode } As per Apple's Storekit documentation : Use current to determine a customer's current storefront region and offer in-app products suitable for that region. You maintain your own list of product identifiers and the storefronts in which you make them available. But I just can't find out what I need to change in my current configuration to get another country. The code keeps returning my original storefront (which is France) I've tried login in with a sandbox user defined on another country. Changed all settings on my device to another country. Changed my Apple's account region as described here. Also tried to logout from everything. The only thing that works is setting a local .storekit file as described here and changing the default storefront. Is Xcode overriding the default storefront when building on debug or TestFlight? does anyone know how can I test different storefronts with sandbox users without the local storekit file ? Thank you in advance.
4
2
962
1w
CarPlay Dashboard navigation scene only appears after starting route guidance
Hi, I’m developing a CarPlay navigation app using the CarPlay Maps/Navigation entitlement. The app works correctly as a full CarPlay navigation app: The main CarPlay scene connects. The app displays a map template. Free-drive / map-following mode works in the full CarPlay app. Turn-by-turn navigation works. The Dashboard navigation scene works during active route guidance. The issue is with the CarPlay Dashboard/home screen behavior. Other navigation apps such as Waze or ABRP can appear automatically in the CarPlay Dashboard navigation widget when CarPlay starts, even when no active route guidance is running. My app’s Dashboard navigation scene only appears once route guidance has started. When no route guidance is active, the CarPlay Dashboard does not show my app as the navigation widget provider. My questions are: Is there any additional public API, entitlement, plist key, or runtime state required for a navigation app to be selected by CarPlay as the Dashboard navigation provider at CarPlay startup? Is the Dashboard navigation widget expected to launch the last-used third-party navigation app automatically, even when there is no active navigation session? Does an app need to keep some kind of navigation session, navigation metadata, free-drive state, or passive navigation session active for CarPlay to treat it as eligible for the Dashboard widget? Are there differences in this behavior between development builds installed via Xcode and TestFlight/App Store builds? Is the Dashboard navigation scene supposed to be created only during active route guidance, or can CarPlay create it for a free-drive/map-following state with no route? The relevant behavior I’m seeing is: The app works as a full CarPlay navigation app. The Dashboard scene is declared in the app configuration. The app is signed with the CarPlay Maps entitlement. The Dashboard scene appears during route guidance. Without active route guidance, CarPlay Dashboard falls back to another navigation app instead of showing my app’s free-drive map. Any clarification on the expected lifecycle and eligibility rules for third-party navigation apps in the CarPlay Dashboard would be appreciated.
3
0
208
1w
CKQuerySubscription on public DB fails in Production — CKError 12 BadSyntax "attempting to create a subscription in a production container"
Posting here per DTS guidance (no reduced sample project available). Creating a CKQuerySubscription on the PUBLIC database in the Production environment always fails, on a production-signed TestFlight build. It works in the Development environment; only Production rejects it. Error: CKError 12 (invalidArguments); underlying "BadSyntax" (2006); server message = "attempting to create a subscription in a production container". The subscription: let sub = CKQuerySubscription( recordType: "PublicSolution", predicate: NSPredicate(format: "%K == %@", "challengeAuthorID", myUserRecordName), subscriptionID: "MyChallengeSolved-", options: [.firesOnRecordCreation]) let info = CKSubscription.NotificationInfo() info.shouldSendContentAvailable = true sub.notificationInfo = info try await container.publicCloudDatabase.save(sub) Verified (all good): TestFlight build is distribution-signed: aps-environment = production (confirmed with codesign on the archive). APNs registration succeeds on device (valid token). CKContainer.accountStatus = .available; userRecordID resolves. Reads of PublicSolution succeed in Production. challengeAuthorID on PublicSolution is QUERYABLE in the deployed Production schema (verified in CloudKit Console). Dev and Production schemas are identical; deployed to Production multiple times (Console reports "no changes"). Removing notificationInfo.desiredKeys made no difference. Push Notifications capability present; entitlement aps-environment = production. Question: What makes Production reject this public-DB CKQuerySubscription create, and what container-side configuration allows it? Same code succeeds in Development. Container: iCloud.JCM.Contraptor
1
0
267
1w
Inquiry about Compatibility Issues in iOS 26​
Dear Apple Team,​ We are reaching out regarding several compatibility issues our app users have encountered after upgrading to iOS 26. These issues not only affect our application but also seem to impact the system's native settings, which has raised concerns about the universality of these problems.​ Problem Description​ Bluetooth Functionality: When users attempt to use the Bluetooth feature within our app after upgrading to iOS 26, the app freezes completely. What's more, when accessing the Bluetooth section in the system Settings app, it also freezes and ultimately crashes.​ Location Service: The location service on the device becomes inoperable after the iOS 26 upgrade. However, both the Bluetooth and location service issues are resolved after the user restarts the device.​ 2. Questions​ Universality: We are eager to know if these issues are exclusive to our app or are a more widespread problem among other applications on iOS 26. Are these known compatibility glitches in iOS 26? ​ Avoidance: Is there any guidance or best - practice that we, as developers, can follow to avoid these issues in our app? For example, are there specific API calls or configurations that need to be adjusted? ​ System - level Impact: If these are system - level bugs related to Bluetooth and location services, will they affect all apps that rely on these features? Or are there certain app - level mitigations that can be implemented? ​ We would greatly appreciate it if you could provide us with any insights, solutions, or information regarding these issues. Your prompt response will be crucial for us to address these problems and ensure a smooth user experience for our customers.​ Thank you in advance for your assistance.​ Best regards,
2
1
454
1w
Wireless CarPlay pairing flow — carkitd exits before [connect CarPlay] on initial pairing (iOS 26.5 / 23F77)
We are investigating a wireless CarPlay connection failure between our vehicle headunit and iPhone, and have identified a suspicious pattern in the carkitd pairing flow through analysis of iPhone sysdiagnose logs. As we have been unable to fully interpret certain behaviors on our own, we would greatly appreciate any guidance or clarification Apple could provide. The original sysdiagnose log file is available upon request. Failure case — UTC 07:14 07:14:25 [carkitd] Transitioning: [started] → [Bluetooth confirmation] 07:14:26 [carkitd] Transitioning: [Bluetooth confirmation] → [Bluetooth contacts sync] 07:14:27 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:14:32 [carkitd] Consolidated ... CARiAPAuthComplete payload for event type 5 07:14:32 [accessoryd] sending EAAccessoryArrived to carkitd for accessory: Ioniq5566 07:14:32 [carkitd] updated partial session (null) (hasAccessory = NO) * CARCarKitWirelessPairingCreatedEvent not observed * [connect CarPlay] not entered 07:14:57 [carkitd] Transitioning: [waiting on messaging connection] → [dismiss/finished] ← Terminates ~25 sec later without sending CarPlayAvailability Success case (Ioniq5) — UTC 07:12 (same sysdiagnose file, same iPhone) 07:12:05 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:12:12 [carkitd] CARCarKitWirelessPairingCreatedEvent received 07:12:14 [carkitd] Transitioning: [waiting on messaging connection] → [connect CarPlay] 07:12:18 [carkitd] sending CarPlayAvailability {wireless: YES BT: <private>} ← Wireless CarPlay established successfully The only observable difference between the two cases is whether CARCarKitWirelessPairingCreatedEvent occurs. Could you help us understand what conditions prevent this event from being generated, and whether there is a fallback path into [connect CarPlay] when it is absent? Any insight would be greatly appreciated. Thank you for your time.
0
0
209
1w
Wireless CarPlay pairing flow — carkitd exits before [connect CarPlay] on initial pairing (iOS26.5 / 23F77)
We are investigating a wireless CarPlay connection failure between our vehicle headunit and iPhone, and have identified a suspicious pattern in the carkitd pairing flow through analysis of iPhone sysdiagnose logs. As we have been unable to fully interpret certain behaviors on our own, we would greatly appreciate any guidance or clarification Apple could provide. The original sysdiagnose log file is available upon request. Failure case — UTC 07:14 07:14:25 [carkitd] Transitioning: [started] → [Bluetooth confirmation] 07:14:26 [carkitd] Transitioning: [Bluetooth confirmation] → [Bluetooth contacts sync] 07:14:27 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:14:32 [carkitd] Consolidated ... CARiAPAuthComplete payload for event type 5 07:14:32 [accessoryd] sending EAAccessoryArrived to carkitd for accessory: Ioniq5566 07:14:32 [carkitd] updated partial session (null) (hasAccessory = NO) * CARCarKitWirelessPairingCreatedEvent not observed * [connect CarPlay] not entered 07:14:57 [carkitd] Transitioning: [waiting on messaging connection] → [dismiss/finished] ← Terminates ~25 sec later without sending CarPlayAvailability Success case (Ioniq5) — UTC 07:12 (same sysdiagnose file, same iPhone) 07:12:05 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:12:12 [carkitd] CARCarKitWirelessPairingCreatedEvent received 07:12:14 [carkitd] Transitioning: [waiting on messaging connection] → [connect CarPlay] 07:12:18 [carkitd] sending CarPlayAvailability {wireless: YES BT: <private>} ← Wireless CarPlay established successfully The only observable difference between the two cases is whether CARCarKitWirelessPairingCreatedEvent occurs. Could you help us understand what conditions prevent this event from being generated, and whether there is a fallback path into [connect CarPlay] when it is absent? Any insight would be greatly appreciated. Thank you for your time.
0
0
188
1w
SKStoreReviewController requestReviewInScene: does not display review prompt in debug builds on iOS 26.5 beta (23F5043k)
[SKStoreReviewController requestReviewInScene:] no longer displays the review prompt in debug/development builds on iOS 26.5 beta (23F5043k and 23F5043g). According to Apple's documentation, the review prompt should always appear in debug builds to facilitate testing. This was working in previous iOS versions (iOS 26.4 and older). Steps to reproduce: Run app from Xcode in debug configuration on a device running iOS 26.5 beta (23F5043k or 23F5043g) Call [SKStoreReviewController requestReviewInScene:windowScene] with a valid, foreground-active UIWindowScene Observe that the method executes without error (scene is valid per NSLog) but no review prompt appears Expected: Review prompt should display in debug builds Actual: No prompt appears, despite the scene being valid and foreground-active This worked correctly on previous iOS versions (26.4) so looks like this bug was introduced in 26.5 Beta versions. I have already filed a bug report in Feedback Assistant with number: FB22445620
6
0
1k
1w
WeatherKit JWT auth fails with Code=2 — entitlement confirmed in signed binary, all config verified, persists for weeks
I have a persistent WeatherKit authentication failure that could be server-side JWT minting not being enabled for my App ID. Every WeatherService.shared.weather(for:) call fails with: Failed to generate jwt token for: com.apple.weatherkit.authservice Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" The console shows the request reaching Apple's auth service and failing only at the JWT generation step. Account / app: Team ID: 634Q7K5DN8 Bundle ID: com.davidfrauenhofer.TripVault App: shipping on the App Store (this is an update adding a WeatherKit forecast) Device: iPhone 13 Pro, physical device (not simulator) Signing: Xcode automatic Everything I've verified locally: codesign -d --entitlements - on the installed binary confirms com.apple.developer.weatherkit = true, with application-identifier = 634Q7K5DN8.com.davidfrauenhofer.TripVault and matching com.apple.developer.team-identifier. WeatherKit is enabled on the App ID under both the Capabilities and App Services tabs, saved and confirmed. App ID Prefix equals my Team ID (634Q7K5DN8) — no legacy prefix mismatch. Fresh provisioning profiles downloaded; clean build folder; app deleted and reinstalled. Active Apple Developer Program membership; no pending agreements in App Store Connect. Valid coordinates passed (confirmed in logs). This has persisted for several weeks across many rebuilds and reinstalls so i should have cleared any propagation windows. Request to the WeatherKit team: Could someone verify whether JWT minting is enabled server-side for this Team ID / Bundle ID, and whether there is a stuck or incomplete WeatherKit registration for this App ID? Given the entitlement is confirmed present in the signed binary and all client-side configuration is correct, I believe this requires inspection of the auth-service registration on Apple's side. Happy to provide any additional logs or identifiers.
11
0
472
1w
iOS 27+26+18: Spotlight only finds title, not textContent nor contentDescription.
Related feedback: FB16995719 This is an old one, that has not been solved in iOS 27. This is very annoying since iOS 27 brings new AI stuff to Spotlight, that can't be used because of this bug. Jennifer has acknowledged this bug during a one-on-one session last year (WWDC25) where we carefully reviewed my code. I simply would like that the app documents content to be indexed. It's simple text that I pass to textContent. ------- try await CSSearchableIndex.default().indexAppEntities([entity]) // How the indexing is called ------- @available(iOS 18, *) /// The IndexedEntity struct DocumentEntity: IndexedEntity, Identifiable { static var typeDisplayRepresentation: TypeDisplayRepresentation { TypeDisplayRepresentation(name: LocalizedStringResource("INTENT_DOCUMENT_DISPLAY_REP")) } static let defaultQuery = DocumentQuery() // A unique identifier for each document let id: NSManagedObjectID let title: String? let thumbnailData: Data? // The document's text to be indexed let textContent: String? let pageCount: Int // A display representation for UI purposes. var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "\(title ?? "")", image: thumbnailData == nil ? nil : .init(data: thumbnailData!) // INDEXED successfully through the use of @available(iOS 18, *) struct DocumentEntity: IndexedEntity, Identifiable { static var typeDisplayRepresentation: TypeDisplayRepresentation { TypeDisplayRepresentation(name: LocalizedStringResource("INTENT_DOCUMENT_DISPLAY_REP")) } static let defaultQuery = DocumentQuery() // A unique identifier for each document (for example, your NSManagedObject's objectID). let id: NSManagedObjectID let title: String? let thumbnailData: Data? // The OCR text to be indexed let textContent: String? let pageCount: Int // A display representation for UI purposes. var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "\(title ?? "")", image: thumbnailData == nil ? nil : .init(data: thumbnailData!) ) } } ) } } @available(iOS 18, *) extension DocumentEntity { // The attributeSet for Spotlight var attributeSet: CSSearchableItemAttributeSet { let attributeSet = defaultAttributeSet attributeSet.title = title attributeSet.displayName = title // THIS ONE IS INDEXED attributeSet.contentType = UTType.plainText.identifier attributeSet.textContent = textContent // THIS ONE IS **NOT** INDEXED attributeSet.pageCount = NSNumber(integerLiteral: pageCount) // THIS ONE IS INDEXED attributeSet.thumbnailData = thumbnailData attributeSet.creator = Constants.APP_NAME return attributeSet } } Related: https://discussions.apple.com/thread/256061571
1
1
375
1w
macOS Archive builds and environment variables
Hi All - I'm a bit confused about setting environment variables in Mac Terminal when testing archive builds. In Terminal, if I do something like export DYLD_PRINT_LIBRARIES=1, it works great for Debug builds. When I open my Debug binary, I can see all the dylibs and Frameworks getting loaded. However, my Archive build doesn't show me anything when I try opening it from Terminal. I did some Googling and I guess SIP may be doing something to prevent environment vars from affecting Archive builds. This made sense to me until I tried creating a simple Test app. If I Archive my Test app and open the binary in Terminal, I see all the dylibs and frameworks. So why would an Archive build for a simple test project work with DYLD_PRINT_LIBRARIES, but my production app's Archive build won't? Related question: I've run into a situation where I may have to set LSEnvironment in my app's Info.plist to work around a problem in 10.15 Catalina and 11 Big Sur. Setting LSEnvironment works great in my Debug and Release builds. But just like using setting DYLD_PRINT_LIBRARIES in Terminal, my Archive build ignores the LSEnvironment settings. So... is there a way to create an Archive build that doesn't ignore Environment Variables in Terminal, or LSEnviroment in Info.plist? Hoping that there's a simple Build Setting that I can enable or disable in my Target to do this. Thanks.
3
0
228
1w
Supported architecture and organization requirement for an on-device iOS domain blocker
I am planning an iOS security and content-blocking app for unmanaged consumer iPhones. The app would not provide a traditional VPN service. It would not offer: Remote VPN servers Geographic location switching Access to a private corporate network IP-address masking as a service Anonymous browsing Instead, the app would allow the user to: View destination domains contacted by the device Classify destinations such as trackers, advertising, analytics, or potentially malicious domains Manually block selected domains Keep connection history and filtering decisions on the device I understand that NEFilterDataProvider and NEFilterControlProvider are the APIs intended for network content filtering. However, according to TN3134, these providers are not generally deployable for an unmanaged adult consumer iPhone. I also understand that TN3120 says NEPacketTunnelProvider should not be used as a general-purpose local content filter. This appears to leave a gap for an unmanaged consumer security app whose core feature is user-controlled, system-wide domain blocking. I am considering whether NETunnelProviderManager with an NEPacketTunnelProvider could support the feature, but I do not want to use the packet-tunnel API outside its supported purpose. My questions are: Is there currently a supported Network Extension architecture for system-wide, user-controlled domain blocking on an unmanaged adult consumer iPhone? Can an app with this purpose use NEPacketTunnelProvider, or would that necessarily be considered the unsupported general-purpose filtering use described in TN3120? If such an architecture is supported, could an app with this purpose be treated as an approved security or content-blocking provider under Guideline 5.4 rather than as an app offering a traditional VPN service? App Review Guideline 5.4 states that apps offering VPN services must be submitted by developers enrolled as organizations. It also states that parental-control, content-blocking, and security apps from approved providers may use NEVPNManager. For an app that does not provide a remote VPN service but uses Apple’s VPN configuration infrastructure only for local security and user-controlled blocking, must the developer still enroll as an organization, or may an individual Apple Developer Program member submit it?
1
0
277
1w
iOS Wi-Fi Aware: Throughput Comparison of Real-Time vs. Bulk Mode
Hello Apple Developer Technical Support / Engineering Team, We are currently developing an iOS application that utilizes Wi-Fi Aware (NAN) for peer-to-peer data transfer between iOS devices. We are in the process of optimizing our data transmission performance and are evaluating the different data path configurations available. Specifically, we would like to understand the performance characteristics and throughput differences between the Real-Time mode and the Bulk mode in the iOS Wi-Fi Aware implementation. Could you please provide clarification on the following points? Maximum Throughput: Between Real-Time mode and Bulk mode, which one is designed to provide a higher maximum throughput for continuous data transfer?
1
0
169
1w
HealthKit Time in Daylight: sample granularity, latency, and relationship to Health app values
Hi, We are integrating HKQuantityTypeIdentifierTimeInDaylight into a research application and have a few questions about how developers should interpret the data returned by HealthKit. Specifically: Should TimeInDaylight samples be treated as having a fixed minimum temporal granularity (for example, approximately 5-minute intervals), or is the sample duration implementation-dependent and subject to change? Is there any expected latency between a daylight exposure event and the corresponding TimeInDaylight sample becoming available through HealthKit? For example, are samples intended to appear shortly after exposure, or only after periodic processing and synchronization? In the Health app, each Time in Daylight sample displays a Maximum Light Intensity (lux). Is this value available through the public HealthKit API (e.g., metadata), or is it only used internally by the Health app? More generally, should developers consider TimeInDaylight to be a high-level derived metric rather than expecting a direct correspondence with underlying ambient light sensor observations? Thank you.
0
0
165
1w
technical clarification on sensorkit measurement sampling
Dear SensorKit team, We are currently working with SensorKit ambient light data under our approved SensorKit entitlement for research use. We would be grateful for some technical clarification on the sampling strategy for the SRSensor.ambientLightSensor stream, as this directly affects how we analyse and report the data. In exported data from Apple Watch, we observe that ambient light samples do not appear to follow a fixed sampling cadence. Instead, the data appear burst-like: in one short window, we see many samples with inter-sample intervals around 100 ms, occasional near-duplicate timestamps, and then gaps of around 10 to 30 seconds with no samples. This suggests that the stream may be adaptive, event-triggered, buffered, or subject to system-level sampling decisions. We also noticed a related discrepancy when comparing the SensorKit ambient light trace with the Health app display for a corresponding Time in Daylight sample. In one example, the Health app shows a 5-minute Time in Daylight interval with a “Maximum Light Intensity” value of 9,493 lux. In the SensorKit ambient light trace around that period, the raw samples show a different maximum depending on the precise time window considered, including higher values shortly before the HealthKit interval start and lower values within the subset of SensorKit samples we inspected. We realise that Time in Daylight may be generated by a separate internal aggregation or classification pipeline, but this comparison raised the question of how closely SensorKit ambient light samples should be expected to correspond to the light intensity values displayed in Health. Could you clarify the following points for SensorKit ambient light data? Is SRSensor.ambientLightSensor sampled at a fixed cadence, or is sampling adaptive / event-driven? If sampling is adaptive, what factors influence sampling density? For example, changes in illuminance, device or wrist motion, device orientation, display state, app state, power state, charging state, or other system-level conditions. Are ambient light readings buffered and delivered or exported in bursts? Do SensorKit timestamps correspond to the physical sensor acquisition time, processing time, or the time at which the sample is made available through SensorKit? Are duplicate or near-duplicate ambient light samples expected in SensorKit exports? Are there circumstances under which ambient light sampling is suspended, downsampled, or suppressed? Is SensorKit ambient light expected to match, approximate, or differ from the light intensity values shown in Health app Time in Daylight sample details? Is the “Maximum Light Intensity” shown for Time in Daylight computed from the same underlying ambient light sensor stream exposed through SensorKit, or from a separate internal stream or aggregation? Are there recommended practices for analysing SensorKit ambient light data, especially with respect to irregular sampling, burst sampling, missing intervals, and aggregation to longer time windows? Is the sampling strategy the same across Apple Watch hardware versions, or should researchers expect device-specific differences? We do not need proprietary implementation details. Our goal is to understand the methodological constraints well enough to analyse the data appropriately and describe the limitations accurately in scientific work. Thank you!
2
0
380
1w
AppIntent returned through result(opensIntent:) is not performed starting with iOS 27 Beta 3
I’m seeing a regression in the App Intents framework starting with iOS 27 Beta 3. An AppIntent returns another AppIntent using result(opensIntent:). On earlier iOS versions, the second intent’s perform() method is invoked as expected. Starting with iOS 27 Beta 3, the first intent completes, but the second intent’s perform() method is never called. Minimal example: import AppIntents import OSLog private let logger = Logger( subsystem: "com.example.AppIntentTest", category: "AppIntents" ) struct AAAIntent: AppIntent { static let title: LocalizedStringResource = "Run AAA" static let description = IntentDescription( "Runs AAA and returns BBB as the intent to open." ) func perform() async throws -> some IntentResult & OpensIntent { logger.notice("AAAIntent.perform() called") return .result(opensIntent: BBBIntent()) } } struct BBBIntent: AppIntent { static let title: LocalizedStringResource = "Run BBB" func perform() async throws -> some IntentResult { logger.notice("BBBIntent.perform() called") // The actual action would be performed here. return .result() } } Observed behavior on iOS 27 Beta 3: AAAIntent.perform() is called. AAAIntent.perform() returns .result(opensIntent: BBBIntent()). BBBIntent.perform() is never called. No error is presented to the user. Expected behavior: After AAAIntent returns BBBIntent through result(opensIntent:), the system should invoke BBBIntent.perform(), as it did on previous iOS versions. The same implementation works correctly on: before iOS 27 beta3 The issue reproduces on: Device: All iOS Device iOS: 27 Beta 3 I have also tested the following without resolving the problem: Reinstalling the app Recreating the shortcut Restarting the device Confirming through unified logging that BBBIntent.perform() is not entered This appears to be a system regression because the API remains available and the same application code works on earlier iOS versions. For required business logic, I can work around the problem by moving the shared operation out of BBBIntent.perform() and invoking it directly from AAAIntent. However, that changes the intended OpensIntent flow and does not restore the documented behavior of result(opensIntent:). I submitted this issue through Feedback Assistant two weeks ago: Feedback ID: FB23616137 Current Feedback Assistant status: Open Has anyone else encountered this behavior on iOS 27 Beta 3 or later? Is this a known App Intents regression, or has the expected behavior of result(opensIntent:) changed in iOS 27? If this behavior has intentionally changed, what is the recommended replacement for chaining or handing off to a second AppIntent?
0
0
164
1w
AlarmKit leaves an empty zombie Live Activity in Dynamic Island after swipe-dismiss while unlocked
Hi, We are the developers of Morning Call (https://morningcall.info), and we believe we may have identified an AlarmKit / system UI bug on iPhone. We can reproduce the same behavior not only in our app, but also in Apple’s official AlarmKit sample app, which strongly suggests this is a framework or system-level issue rather than an app-specific bug. Demonstration Video of producing zombie Live Activity https://www.youtube.com/watch?v=cZdF3oc8dVI Related Thread https://developer.apple.com/forums/thread/812006 https://developer.apple.com/forums/thread/817305 https://developer.apple.com/forums/thread/807335 Environment iPhone with Dynamic Island Alarm created using AlarmKit Device is unlocked when the alarm begins alerting Steps to reproduce Schedule an AlarmKit alarm. Wait for the alarm to alert while the device is unlocked. The alarm appears in Dynamic Island. Instead of tapping the intended stop or dismiss button, swipe the Dynamic Island presentation away. Expected result The alarm should be fully dismissed. The Live Activity should be removed. No empty UI should remain in Dynamic Island. Actual result The assigned AppIntent runs successfully. Our app code executes as expected. AlarmKit appears to stop the alarm correctly. However, an empty “zombie” Live Activity remains in Dynamic Island indefinitely. The user cannot clear it through normal interaction. Why this is a serious user-facing issue This is not just a cosmetic issue for us. From the user’s perspective, it looks like a Live Activity is permanently stuck in Dynamic Island. More importantly: Force-quitting the app does not remove it Deleting the app does not remove it In practice, many users conclude that our app has left a broken Live Activity running forever We receive repeated user complaints saying that the Live Activity “won’t go away” Because the remaining UI appears to be system-owned, users often do not realize that the only reliable recovery is to restart the phone. Most users do not discover that workaround on their own, so they instead assume the app is severely broken. Cases where the zombie state disappears Rebooting the phone Waiting for the next AlarmKit alert, then pressing the proper stop button on that alert Additional observations Inside our LiveActivityIntent, calling AlarmManager.shared.stop(id:) reports that the alarm has already been stopped by the system. We also tried inspecting Activity<AlarmAttributes<...>>.activities and calling end(..., dismissalPolicy: .immediate), but in this state no matching activity is exposed to the app. This suggests that the alarm itself has already been stopped, but the system-owned Live Activity UI is not being cleaned up correctly after the swipe-dismiss path. Why this does not appear to be an app logic issue The intent is invoked successfully. The alarm stop path is reached. The alarm is already considered stopped by the system. The remaining UI appears to be system-owned. The stuck UI persists even after our own cleanup logic has run. The stuck UI also survives app force-quit and app deletion.
8
11
1.6k
1w
iOS 26.2 RC DeviceActivityMonitor.eventDidReachThreshold regression?
Hi there, Starting with iOS 26.2 RC, all my DeviceActivityMonitor.eventDidReachThreshold get activated immediately as I pick up my iPhone for the first time, two nights in a row. Feedback: FB21267341 There's always a chance something odd is happening to my device in particular (although I can't recall making any changes here and the debug logs point to the issue), but just getting this out there ASAP in case others are seeing this (or haven't tried!), and it's critical as this is the RC. DeviceActivityMonitor.eventDidReachThreshold issues also mentioned here: https://developer.apple.com/forums/thread/793747; but I believe they are different and were potentially fixed in iOS 26.1, but it points to this part of the technology having issues and maybe someone from Apple has been tweaking it.
Replies
29
Boosts
8
Views
6.1k
Activity
1w
Cannot get StoreKit products on watchOS
I'm using Product.products(for:) to get my auto-renewable subscription on watchOS: let products = try await Product.products(for: [<##Identifier##>]) However, it doesn't return any value, and doesn't throw errors. The console shows an error: Could not parse product: missingValue(for: [StoreKit.ProductResponse.Key.billingPlanType], expected: StoreKit.BackingValue) Is this a bug or I did't configure something well? This product has been approved by App Review.
Replies
2
Boosts
1
Views
736
Activity
1w
Storekit, how to change and retrieve current user storefront
I've been struggling to work with the Storekit framework and specifically to find the current Storefront used by the user of the app. Context : My app needs to behave differently depending on the country of the user. For me relying on Locale.current.region?.identifier does not seem very reliable, the user can change it really easily. I'm trying to use the Storekit framework like so : if let storefront = await StoreKit.Storefront.current{ return storefront.countryCode } As per Apple's Storekit documentation : Use current to determine a customer's current storefront region and offer in-app products suitable for that region. You maintain your own list of product identifiers and the storefronts in which you make them available. But I just can't find out what I need to change in my current configuration to get another country. The code keeps returning my original storefront (which is France) I've tried login in with a sandbox user defined on another country. Changed all settings on my device to another country. Changed my Apple's account region as described here. Also tried to logout from everything. The only thing that works is setting a local .storekit file as described here and changing the default storefront. Is Xcode overriding the default storefront when building on debug or TestFlight? does anyone know how can I test different storefronts with sandbox users without the local storekit file ? Thank you in advance.
Replies
4
Boosts
2
Views
962
Activity
1w
Notification badge not clearing on iOS 18
After opening the app, the notification badge sometimes stays visible even after setting applicationIconBadgeNumber to zero. Has anyone seen this behavior on iOS 18, or is there a more reliable way to clear it?
Replies
1
Boosts
0
Views
138
Activity
1w
CarPlay Dashboard navigation scene only appears after starting route guidance
Hi, I’m developing a CarPlay navigation app using the CarPlay Maps/Navigation entitlement. The app works correctly as a full CarPlay navigation app: The main CarPlay scene connects. The app displays a map template. Free-drive / map-following mode works in the full CarPlay app. Turn-by-turn navigation works. The Dashboard navigation scene works during active route guidance. The issue is with the CarPlay Dashboard/home screen behavior. Other navigation apps such as Waze or ABRP can appear automatically in the CarPlay Dashboard navigation widget when CarPlay starts, even when no active route guidance is running. My app’s Dashboard navigation scene only appears once route guidance has started. When no route guidance is active, the CarPlay Dashboard does not show my app as the navigation widget provider. My questions are: Is there any additional public API, entitlement, plist key, or runtime state required for a navigation app to be selected by CarPlay as the Dashboard navigation provider at CarPlay startup? Is the Dashboard navigation widget expected to launch the last-used third-party navigation app automatically, even when there is no active navigation session? Does an app need to keep some kind of navigation session, navigation metadata, free-drive state, or passive navigation session active for CarPlay to treat it as eligible for the Dashboard widget? Are there differences in this behavior between development builds installed via Xcode and TestFlight/App Store builds? Is the Dashboard navigation scene supposed to be created only during active route guidance, or can CarPlay create it for a free-drive/map-following state with no route? The relevant behavior I’m seeing is: The app works as a full CarPlay navigation app. The Dashboard scene is declared in the app configuration. The app is signed with the CarPlay Maps entitlement. The Dashboard scene appears during route guidance. Without active route guidance, CarPlay Dashboard falls back to another navigation app instead of showing my app’s free-drive map. Any clarification on the expected lifecycle and eligibility rules for third-party navigation apps in the CarPlay Dashboard would be appreciated.
Replies
3
Boosts
0
Views
208
Activity
1w
CKQuerySubscription on public DB fails in Production — CKError 12 BadSyntax "attempting to create a subscription in a production container"
Posting here per DTS guidance (no reduced sample project available). Creating a CKQuerySubscription on the PUBLIC database in the Production environment always fails, on a production-signed TestFlight build. It works in the Development environment; only Production rejects it. Error: CKError 12 (invalidArguments); underlying "BadSyntax" (2006); server message = "attempting to create a subscription in a production container". The subscription: let sub = CKQuerySubscription( recordType: "PublicSolution", predicate: NSPredicate(format: "%K == %@", "challengeAuthorID", myUserRecordName), subscriptionID: "MyChallengeSolved-", options: [.firesOnRecordCreation]) let info = CKSubscription.NotificationInfo() info.shouldSendContentAvailable = true sub.notificationInfo = info try await container.publicCloudDatabase.save(sub) Verified (all good): TestFlight build is distribution-signed: aps-environment = production (confirmed with codesign on the archive). APNs registration succeeds on device (valid token). CKContainer.accountStatus = .available; userRecordID resolves. Reads of PublicSolution succeed in Production. challengeAuthorID on PublicSolution is QUERYABLE in the deployed Production schema (verified in CloudKit Console). Dev and Production schemas are identical; deployed to Production multiple times (Console reports "no changes"). Removing notificationInfo.desiredKeys made no difference. Push Notifications capability present; entitlement aps-environment = production. Question: What makes Production reject this public-DB CKQuerySubscription create, and what container-side configuration allows it? Same code succeeds in Development. Container: iCloud.JCM.Contraptor
Replies
1
Boosts
0
Views
267
Activity
1w
Inquiry about Compatibility Issues in iOS 26​
Dear Apple Team,​ We are reaching out regarding several compatibility issues our app users have encountered after upgrading to iOS 26. These issues not only affect our application but also seem to impact the system's native settings, which has raised concerns about the universality of these problems.​ Problem Description​ Bluetooth Functionality: When users attempt to use the Bluetooth feature within our app after upgrading to iOS 26, the app freezes completely. What's more, when accessing the Bluetooth section in the system Settings app, it also freezes and ultimately crashes.​ Location Service: The location service on the device becomes inoperable after the iOS 26 upgrade. However, both the Bluetooth and location service issues are resolved after the user restarts the device.​ 2. Questions​ Universality: We are eager to know if these issues are exclusive to our app or are a more widespread problem among other applications on iOS 26. Are these known compatibility glitches in iOS 26? ​ Avoidance: Is there any guidance or best - practice that we, as developers, can follow to avoid these issues in our app? For example, are there specific API calls or configurations that need to be adjusted? ​ System - level Impact: If these are system - level bugs related to Bluetooth and location services, will they affect all apps that rely on these features? Or are there certain app - level mitigations that can be implemented? ​ We would greatly appreciate it if you could provide us with any insights, solutions, or information regarding these issues. Your prompt response will be crucial for us to address these problems and ensure a smooth user experience for our customers.​ Thank you in advance for your assistance.​ Best regards,
Replies
2
Boosts
1
Views
454
Activity
1w
Wireless CarPlay pairing flow — carkitd exits before [connect CarPlay] on initial pairing (iOS 26.5 / 23F77)
We are investigating a wireless CarPlay connection failure between our vehicle headunit and iPhone, and have identified a suspicious pattern in the carkitd pairing flow through analysis of iPhone sysdiagnose logs. As we have been unable to fully interpret certain behaviors on our own, we would greatly appreciate any guidance or clarification Apple could provide. The original sysdiagnose log file is available upon request. Failure case — UTC 07:14 07:14:25 [carkitd] Transitioning: [started] → [Bluetooth confirmation] 07:14:26 [carkitd] Transitioning: [Bluetooth confirmation] → [Bluetooth contacts sync] 07:14:27 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:14:32 [carkitd] Consolidated ... CARiAPAuthComplete payload for event type 5 07:14:32 [accessoryd] sending EAAccessoryArrived to carkitd for accessory: Ioniq5566 07:14:32 [carkitd] updated partial session (null) (hasAccessory = NO) * CARCarKitWirelessPairingCreatedEvent not observed * [connect CarPlay] not entered 07:14:57 [carkitd] Transitioning: [waiting on messaging connection] → [dismiss/finished] ← Terminates ~25 sec later without sending CarPlayAvailability Success case (Ioniq5) — UTC 07:12 (same sysdiagnose file, same iPhone) 07:12:05 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:12:12 [carkitd] CARCarKitWirelessPairingCreatedEvent received 07:12:14 [carkitd] Transitioning: [waiting on messaging connection] → [connect CarPlay] 07:12:18 [carkitd] sending CarPlayAvailability {wireless: YES BT: <private>} ← Wireless CarPlay established successfully The only observable difference between the two cases is whether CARCarKitWirelessPairingCreatedEvent occurs. Could you help us understand what conditions prevent this event from being generated, and whether there is a fallback path into [connect CarPlay] when it is absent? Any insight would be greatly appreciated. Thank you for your time.
Replies
0
Boosts
0
Views
209
Activity
1w
Wireless CarPlay pairing flow — carkitd exits before [connect CarPlay] on initial pairing (iOS26.5 / 23F77)
We are investigating a wireless CarPlay connection failure between our vehicle headunit and iPhone, and have identified a suspicious pattern in the carkitd pairing flow through analysis of iPhone sysdiagnose logs. As we have been unable to fully interpret certain behaviors on our own, we would greatly appreciate any guidance or clarification Apple could provide. The original sysdiagnose log file is available upon request. Failure case — UTC 07:14 07:14:25 [carkitd] Transitioning: [started] → [Bluetooth confirmation] 07:14:26 [carkitd] Transitioning: [Bluetooth confirmation] → [Bluetooth contacts sync] 07:14:27 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:14:32 [carkitd] Consolidated ... CARiAPAuthComplete payload for event type 5 07:14:32 [accessoryd] sending EAAccessoryArrived to carkitd for accessory: Ioniq5566 07:14:32 [carkitd] updated partial session (null) (hasAccessory = NO) * CARCarKitWirelessPairingCreatedEvent not observed * [connect CarPlay] not entered 07:14:57 [carkitd] Transitioning: [waiting on messaging connection] → [dismiss/finished] ← Terminates ~25 sec later without sending CarPlayAvailability Success case (Ioniq5) — UTC 07:12 (same sysdiagnose file, same iPhone) 07:12:05 [carkitd] Transitioning: [Bluetooth contacts sync] → [waiting on messaging connection] 07:12:12 [carkitd] CARCarKitWirelessPairingCreatedEvent received 07:12:14 [carkitd] Transitioning: [waiting on messaging connection] → [connect CarPlay] 07:12:18 [carkitd] sending CarPlayAvailability {wireless: YES BT: <private>} ← Wireless CarPlay established successfully The only observable difference between the two cases is whether CARCarKitWirelessPairingCreatedEvent occurs. Could you help us understand what conditions prevent this event from being generated, and whether there is a fallback path into [connect CarPlay] when it is absent? Any insight would be greatly appreciated. Thank you for your time.
Replies
0
Boosts
0
Views
188
Activity
1w
SKStoreReviewController requestReviewInScene: does not display review prompt in debug builds on iOS 26.5 beta (23F5043k)
[SKStoreReviewController requestReviewInScene:] no longer displays the review prompt in debug/development builds on iOS 26.5 beta (23F5043k and 23F5043g). According to Apple's documentation, the review prompt should always appear in debug builds to facilitate testing. This was working in previous iOS versions (iOS 26.4 and older). Steps to reproduce: Run app from Xcode in debug configuration on a device running iOS 26.5 beta (23F5043k or 23F5043g) Call [SKStoreReviewController requestReviewInScene:windowScene] with a valid, foreground-active UIWindowScene Observe that the method executes without error (scene is valid per NSLog) but no review prompt appears Expected: Review prompt should display in debug builds Actual: No prompt appears, despite the scene being valid and foreground-active This worked correctly on previous iOS versions (26.4) so looks like this bug was introduced in 26.5 Beta versions. I have already filed a bug report in Feedback Assistant with number: FB22445620
Replies
6
Boosts
0
Views
1k
Activity
1w
WeatherKit JWT auth fails with Code=2 — entitlement confirmed in signed binary, all config verified, persists for weeks
I have a persistent WeatherKit authentication failure that could be server-side JWT minting not being enabled for my App ID. Every WeatherService.shared.weather(for:) call fails with: Failed to generate jwt token for: com.apple.weatherkit.authservice Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)" The console shows the request reaching Apple's auth service and failing only at the JWT generation step. Account / app: Team ID: 634Q7K5DN8 Bundle ID: com.davidfrauenhofer.TripVault App: shipping on the App Store (this is an update adding a WeatherKit forecast) Device: iPhone 13 Pro, physical device (not simulator) Signing: Xcode automatic Everything I've verified locally: codesign -d --entitlements - on the installed binary confirms com.apple.developer.weatherkit = true, with application-identifier = 634Q7K5DN8.com.davidfrauenhofer.TripVault and matching com.apple.developer.team-identifier. WeatherKit is enabled on the App ID under both the Capabilities and App Services tabs, saved and confirmed. App ID Prefix equals my Team ID (634Q7K5DN8) — no legacy prefix mismatch. Fresh provisioning profiles downloaded; clean build folder; app deleted and reinstalled. Active Apple Developer Program membership; no pending agreements in App Store Connect. Valid coordinates passed (confirmed in logs). This has persisted for several weeks across many rebuilds and reinstalls so i should have cleared any propagation windows. Request to the WeatherKit team: Could someone verify whether JWT minting is enabled server-side for this Team ID / Bundle ID, and whether there is a stuck or incomplete WeatherKit registration for this App ID? Given the entitlement is confirmed present in the signed binary and all client-side configuration is correct, I believe this requires inspection of the auth-service registration on Apple's side. Happy to provide any additional logs or identifiers.
Replies
11
Boosts
0
Views
472
Activity
1w
iOS 27+26+18: Spotlight only finds title, not textContent nor contentDescription.
Related feedback: FB16995719 This is an old one, that has not been solved in iOS 27. This is very annoying since iOS 27 brings new AI stuff to Spotlight, that can't be used because of this bug. Jennifer has acknowledged this bug during a one-on-one session last year (WWDC25) where we carefully reviewed my code. I simply would like that the app documents content to be indexed. It's simple text that I pass to textContent. ------- try await CSSearchableIndex.default().indexAppEntities([entity]) // How the indexing is called ------- @available(iOS 18, *) /// The IndexedEntity struct DocumentEntity: IndexedEntity, Identifiable { static var typeDisplayRepresentation: TypeDisplayRepresentation { TypeDisplayRepresentation(name: LocalizedStringResource("INTENT_DOCUMENT_DISPLAY_REP")) } static let defaultQuery = DocumentQuery() // A unique identifier for each document let id: NSManagedObjectID let title: String? let thumbnailData: Data? // The document's text to be indexed let textContent: String? let pageCount: Int // A display representation for UI purposes. var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "\(title ?? "")", image: thumbnailData == nil ? nil : .init(data: thumbnailData!) // INDEXED successfully through the use of @available(iOS 18, *) struct DocumentEntity: IndexedEntity, Identifiable { static var typeDisplayRepresentation: TypeDisplayRepresentation { TypeDisplayRepresentation(name: LocalizedStringResource("INTENT_DOCUMENT_DISPLAY_REP")) } static let defaultQuery = DocumentQuery() // A unique identifier for each document (for example, your NSManagedObject's objectID). let id: NSManagedObjectID let title: String? let thumbnailData: Data? // The OCR text to be indexed let textContent: String? let pageCount: Int // A display representation for UI purposes. var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "\(title ?? "")", image: thumbnailData == nil ? nil : .init(data: thumbnailData!) ) } } ) } } @available(iOS 18, *) extension DocumentEntity { // The attributeSet for Spotlight var attributeSet: CSSearchableItemAttributeSet { let attributeSet = defaultAttributeSet attributeSet.title = title attributeSet.displayName = title // THIS ONE IS INDEXED attributeSet.contentType = UTType.plainText.identifier attributeSet.textContent = textContent // THIS ONE IS **NOT** INDEXED attributeSet.pageCount = NSNumber(integerLiteral: pageCount) // THIS ONE IS INDEXED attributeSet.thumbnailData = thumbnailData attributeSet.creator = Constants.APP_NAME return attributeSet } } Related: https://discussions.apple.com/thread/256061571
Replies
1
Boosts
1
Views
375
Activity
1w
macOS Archive builds and environment variables
Hi All - I'm a bit confused about setting environment variables in Mac Terminal when testing archive builds. In Terminal, if I do something like export DYLD_PRINT_LIBRARIES=1, it works great for Debug builds. When I open my Debug binary, I can see all the dylibs and Frameworks getting loaded. However, my Archive build doesn't show me anything when I try opening it from Terminal. I did some Googling and I guess SIP may be doing something to prevent environment vars from affecting Archive builds. This made sense to me until I tried creating a simple Test app. If I Archive my Test app and open the binary in Terminal, I see all the dylibs and frameworks. So why would an Archive build for a simple test project work with DYLD_PRINT_LIBRARIES, but my production app's Archive build won't? Related question: I've run into a situation where I may have to set LSEnvironment in my app's Info.plist to work around a problem in 10.15 Catalina and 11 Big Sur. Setting LSEnvironment works great in my Debug and Release builds. But just like using setting DYLD_PRINT_LIBRARIES in Terminal, my Archive build ignores the LSEnvironment settings. So... is there a way to create an Archive build that doesn't ignore Environment Variables in Terminal, or LSEnviroment in Info.plist? Hoping that there's a simple Build Setting that I can enable or disable in my Target to do this. Thanks.
Replies
3
Boosts
0
Views
228
Activity
1w
Supported architecture and organization requirement for an on-device iOS domain blocker
I am planning an iOS security and content-blocking app for unmanaged consumer iPhones. The app would not provide a traditional VPN service. It would not offer: Remote VPN servers Geographic location switching Access to a private corporate network IP-address masking as a service Anonymous browsing Instead, the app would allow the user to: View destination domains contacted by the device Classify destinations such as trackers, advertising, analytics, or potentially malicious domains Manually block selected domains Keep connection history and filtering decisions on the device I understand that NEFilterDataProvider and NEFilterControlProvider are the APIs intended for network content filtering. However, according to TN3134, these providers are not generally deployable for an unmanaged adult consumer iPhone. I also understand that TN3120 says NEPacketTunnelProvider should not be used as a general-purpose local content filter. This appears to leave a gap for an unmanaged consumer security app whose core feature is user-controlled, system-wide domain blocking. I am considering whether NETunnelProviderManager with an NEPacketTunnelProvider could support the feature, but I do not want to use the packet-tunnel API outside its supported purpose. My questions are: Is there currently a supported Network Extension architecture for system-wide, user-controlled domain blocking on an unmanaged adult consumer iPhone? Can an app with this purpose use NEPacketTunnelProvider, or would that necessarily be considered the unsupported general-purpose filtering use described in TN3120? If such an architecture is supported, could an app with this purpose be treated as an approved security or content-blocking provider under Guideline 5.4 rather than as an app offering a traditional VPN service? App Review Guideline 5.4 states that apps offering VPN services must be submitted by developers enrolled as organizations. It also states that parental-control, content-blocking, and security apps from approved providers may use NEVPNManager. For an app that does not provide a remote VPN service but uses Apple’s VPN configuration infrastructure only for local security and user-controlled blocking, must the developer still enroll as an organization, or may an individual Apple Developer Program member submit it?
Replies
1
Boosts
0
Views
277
Activity
1w
iOS Wi-Fi Aware: Throughput Comparison of Real-Time vs. Bulk Mode
Hello Apple Developer Technical Support / Engineering Team, We are currently developing an iOS application that utilizes Wi-Fi Aware (NAN) for peer-to-peer data transfer between iOS devices. We are in the process of optimizing our data transmission performance and are evaluating the different data path configurations available. Specifically, we would like to understand the performance characteristics and throughput differences between the Real-Time mode and the Bulk mode in the iOS Wi-Fi Aware implementation. Could you please provide clarification on the following points? Maximum Throughput: Between Real-Time mode and Bulk mode, which one is designed to provide a higher maximum throughput for continuous data transfer?
Replies
1
Boosts
0
Views
169
Activity
1w
HealthKit Time in Daylight: sample granularity, latency, and relationship to Health app values
Hi, We are integrating HKQuantityTypeIdentifierTimeInDaylight into a research application and have a few questions about how developers should interpret the data returned by HealthKit. Specifically: Should TimeInDaylight samples be treated as having a fixed minimum temporal granularity (for example, approximately 5-minute intervals), or is the sample duration implementation-dependent and subject to change? Is there any expected latency between a daylight exposure event and the corresponding TimeInDaylight sample becoming available through HealthKit? For example, are samples intended to appear shortly after exposure, or only after periodic processing and synchronization? In the Health app, each Time in Daylight sample displays a Maximum Light Intensity (lux). Is this value available through the public HealthKit API (e.g., metadata), or is it only used internally by the Health app? More generally, should developers consider TimeInDaylight to be a high-level derived metric rather than expecting a direct correspondence with underlying ambient light sensor observations? Thank you.
Replies
0
Boosts
0
Views
165
Activity
1w
iOS 27 beta Widget can not be found in gallery
After the installation and upgrade of the iOS App coverage, the desktop widget became unavailable. When deleting and re-adding them, they could not be found in the widget gallery . The problem was solved after the phone system was restarted
Replies
0
Boosts
0
Views
227
Activity
1w
technical clarification on sensorkit measurement sampling
Dear SensorKit team, We are currently working with SensorKit ambient light data under our approved SensorKit entitlement for research use. We would be grateful for some technical clarification on the sampling strategy for the SRSensor.ambientLightSensor stream, as this directly affects how we analyse and report the data. In exported data from Apple Watch, we observe that ambient light samples do not appear to follow a fixed sampling cadence. Instead, the data appear burst-like: in one short window, we see many samples with inter-sample intervals around 100 ms, occasional near-duplicate timestamps, and then gaps of around 10 to 30 seconds with no samples. This suggests that the stream may be adaptive, event-triggered, buffered, or subject to system-level sampling decisions. We also noticed a related discrepancy when comparing the SensorKit ambient light trace with the Health app display for a corresponding Time in Daylight sample. In one example, the Health app shows a 5-minute Time in Daylight interval with a “Maximum Light Intensity” value of 9,493 lux. In the SensorKit ambient light trace around that period, the raw samples show a different maximum depending on the precise time window considered, including higher values shortly before the HealthKit interval start and lower values within the subset of SensorKit samples we inspected. We realise that Time in Daylight may be generated by a separate internal aggregation or classification pipeline, but this comparison raised the question of how closely SensorKit ambient light samples should be expected to correspond to the light intensity values displayed in Health. Could you clarify the following points for SensorKit ambient light data? Is SRSensor.ambientLightSensor sampled at a fixed cadence, or is sampling adaptive / event-driven? If sampling is adaptive, what factors influence sampling density? For example, changes in illuminance, device or wrist motion, device orientation, display state, app state, power state, charging state, or other system-level conditions. Are ambient light readings buffered and delivered or exported in bursts? Do SensorKit timestamps correspond to the physical sensor acquisition time, processing time, or the time at which the sample is made available through SensorKit? Are duplicate or near-duplicate ambient light samples expected in SensorKit exports? Are there circumstances under which ambient light sampling is suspended, downsampled, or suppressed? Is SensorKit ambient light expected to match, approximate, or differ from the light intensity values shown in Health app Time in Daylight sample details? Is the “Maximum Light Intensity” shown for Time in Daylight computed from the same underlying ambient light sensor stream exposed through SensorKit, or from a separate internal stream or aggregation? Are there recommended practices for analysing SensorKit ambient light data, especially with respect to irregular sampling, burst sampling, missing intervals, and aggregation to longer time windows? Is the sampling strategy the same across Apple Watch hardware versions, or should researchers expect device-specific differences? We do not need proprietary implementation details. Our goal is to understand the methodological constraints well enough to analyse the data appropriately and describe the limitations accurately in scientific work. Thank you!
Replies
2
Boosts
0
Views
380
Activity
1w
AppIntent returned through result(opensIntent:) is not performed starting with iOS 27 Beta 3
I’m seeing a regression in the App Intents framework starting with iOS 27 Beta 3. An AppIntent returns another AppIntent using result(opensIntent:). On earlier iOS versions, the second intent’s perform() method is invoked as expected. Starting with iOS 27 Beta 3, the first intent completes, but the second intent’s perform() method is never called. Minimal example: import AppIntents import OSLog private let logger = Logger( subsystem: "com.example.AppIntentTest", category: "AppIntents" ) struct AAAIntent: AppIntent { static let title: LocalizedStringResource = "Run AAA" static let description = IntentDescription( "Runs AAA and returns BBB as the intent to open." ) func perform() async throws -> some IntentResult & OpensIntent { logger.notice("AAAIntent.perform() called") return .result(opensIntent: BBBIntent()) } } struct BBBIntent: AppIntent { static let title: LocalizedStringResource = "Run BBB" func perform() async throws -> some IntentResult { logger.notice("BBBIntent.perform() called") // The actual action would be performed here. return .result() } } Observed behavior on iOS 27 Beta 3: AAAIntent.perform() is called. AAAIntent.perform() returns .result(opensIntent: BBBIntent()). BBBIntent.perform() is never called. No error is presented to the user. Expected behavior: After AAAIntent returns BBBIntent through result(opensIntent:), the system should invoke BBBIntent.perform(), as it did on previous iOS versions. The same implementation works correctly on: before iOS 27 beta3 The issue reproduces on: Device: All iOS Device iOS: 27 Beta 3 I have also tested the following without resolving the problem: Reinstalling the app Recreating the shortcut Restarting the device Confirming through unified logging that BBBIntent.perform() is not entered This appears to be a system regression because the API remains available and the same application code works on earlier iOS versions. For required business logic, I can work around the problem by moving the shared operation out of BBBIntent.perform() and invoking it directly from AAAIntent. However, that changes the intended OpensIntent flow and does not restore the documented behavior of result(opensIntent:). I submitted this issue through Feedback Assistant two weeks ago: Feedback ID: FB23616137 Current Feedback Assistant status: Open Has anyone else encountered this behavior on iOS 27 Beta 3 or later? Is this a known App Intents regression, or has the expected behavior of result(opensIntent:) changed in iOS 27? If this behavior has intentionally changed, what is the recommended replacement for chaining or handing off to a second AppIntent?
Replies
0
Boosts
0
Views
164
Activity
1w
AlarmKit leaves an empty zombie Live Activity in Dynamic Island after swipe-dismiss while unlocked
Hi, We are the developers of Morning Call (https://morningcall.info), and we believe we may have identified an AlarmKit / system UI bug on iPhone. We can reproduce the same behavior not only in our app, but also in Apple’s official AlarmKit sample app, which strongly suggests this is a framework or system-level issue rather than an app-specific bug. Demonstration Video of producing zombie Live Activity https://www.youtube.com/watch?v=cZdF3oc8dVI Related Thread https://developer.apple.com/forums/thread/812006 https://developer.apple.com/forums/thread/817305 https://developer.apple.com/forums/thread/807335 Environment iPhone with Dynamic Island Alarm created using AlarmKit Device is unlocked when the alarm begins alerting Steps to reproduce Schedule an AlarmKit alarm. Wait for the alarm to alert while the device is unlocked. The alarm appears in Dynamic Island. Instead of tapping the intended stop or dismiss button, swipe the Dynamic Island presentation away. Expected result The alarm should be fully dismissed. The Live Activity should be removed. No empty UI should remain in Dynamic Island. Actual result The assigned AppIntent runs successfully. Our app code executes as expected. AlarmKit appears to stop the alarm correctly. However, an empty “zombie” Live Activity remains in Dynamic Island indefinitely. The user cannot clear it through normal interaction. Why this is a serious user-facing issue This is not just a cosmetic issue for us. From the user’s perspective, it looks like a Live Activity is permanently stuck in Dynamic Island. More importantly: Force-quitting the app does not remove it Deleting the app does not remove it In practice, many users conclude that our app has left a broken Live Activity running forever We receive repeated user complaints saying that the Live Activity “won’t go away” Because the remaining UI appears to be system-owned, users often do not realize that the only reliable recovery is to restart the phone. Most users do not discover that workaround on their own, so they instead assume the app is severely broken. Cases where the zombie state disappears Rebooting the phone Waiting for the next AlarmKit alert, then pressing the proper stop button on that alert Additional observations Inside our LiveActivityIntent, calling AlarmManager.shared.stop(id:) reports that the alarm has already been stopped by the system. We also tried inspecting Activity<AlarmAttributes<...>>.activities and calling end(..., dismissalPolicy: .immediate), but in this state no matching activity is exposed to the app. This suggests that the alarm itself has already been stopped, but the system-owned Live Activity UI is not being cleaned up correctly after the swipe-dismiss path. Why this does not appear to be an app logic issue The intent is invoked successfully. The alarm stop path is reached. The alarm is already considered stopped by the system. The remaining UI appears to be system-owned. The stuck UI persists even after our own cleanup logic has run. The stuck UI also survives app force-quit and app deletion.
Replies
8
Boosts
11
Views
1.6k
Activity
1w