Posts under App & System Services topic

Post

Replies

Boosts

Views

Activity

Cannot load products in Sandbox
Hi, I'm trying to hook up some test in app purchases to test purchase code between our app and our app's backend. When I try to load products (requestProductData) with my Sandbox account, my product identifiers come back in the invalid product identifiers member of the response. My product says it's in "waiting for review" status in app store connect, and I'm logged in to the app store with my sandbox account on my device. We just accepted the paid apps agreement as well--is there some propagation time to that? The product ID I'm using (both in app store connect and in-app) is test_durable. Do I need to append the package name to that or something? I've dug through the docs and through the forums here and come up empty. I tried using the Xcode storekit test harness and the issue there is that because that doesn't actually talk to the store apis, I can't use that to test my backend correctly validating/processing the transactions. Thanks!
0
0
31
22h
Master Abort on a link side of the Root Complex
I'm encountering a bug developing a (Thunderbolt) PCIDriverKit dext. The system runs well for a while, and then the hardware instance is shut down by the OS (Sonoma 14.7.6) for some unknown reason, but the dext is not, so hardware reads return 0xFFFFFFFF (device disconnected). There is no crash report, or diagnostic report. I don't see anything related in a sysdiagnose capture. The only hint I can find is the kernel logs indicate: 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompletionTimeoutInterrupt Completion timeout detected at address 0xe00510020 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompleterAbortInterrupt Completer Abort received (pri_status = 0x00100407, sec_status = 0x200000f0): 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompleterAbortInterrupt * Received Master Abort on a link side of the Root Complex That address (0xe00510020) looks like it's our PCI device (at a BAR0, offset 0x0020) read. What does this error explicitly mean? Did the device take too long to respond to the read request? After the event, every device on that Thunderbolt bus is disconnected, and a reboot seems to be required. Hardware is a 14" 2023 MacBook Pro M3.
1
0
34
1d
[iOS 26] thermalmonitord cpu-avg-limiter-input-w2r read failure + SPMI bus faults on iPhone 15 Pro (A17 Pro) — likely driver regression
Since upgrading to iOS 26, my iPhone 15 Pro (A17 Pro) exhibits persistent battery drain and thermal issues. Console.app analysis via Mac reveals a cluster of related kernel and daemon errors that appear to stem from a driver-level regression rather than a hardware fault. Observed errors (continuous, since boot): thermalmonitord fails to read the cpu-avg-limiter-input-w2r property every 5 seconds indefinitely. This leaves the thermal throttling subsystem unable to regulate CPU load using its primary input sensor. The kernel logs SPMI bus faults on nub-spmi1 at a perfectly regular 30-second interval (codes 0x72040C01, 0x75E40C3B, 0x72D80C33), alongside aop-spmi0 faults (0x7A000830). The strict periodicity strongly suggests a driver retry loop rather than a dead hardware component. appleh16camerad (ISP driver) fails to initialize endpoint 1 (fISPEndpoints[1] is not ready) and retries every ~4 seconds, while the ANE driver (ANE0) cannot register its memory unwire timer. Both run in permanent retry loops consuming CPU cycles. AppleSMCFamily logs kSMCKeyNotWritable errors on SMC write attempts — the key exists but is flagged non-writable, suggesting incomplete driver initialization rather than a missing component. A single AppleSARService coredump request for the baseband was also observed. Why this appears to be a driver issue and not hardware: The system remains stable with no kernel panics or forced reboots. The SPMI faults occur on a precise 30-second schedule consistent with a kernel timer, not random hardware failures. The SMC error is kSMCKeyNotWritable (key present, wrong state) rather than kSMCKeyNotFound. All symptoms appeared immediately after the iOS 26 update with no physical event on the device. Device: iPhone 15 Pro — A17 Pro iOS version: 26.0 Reproduced: persistent across reboots, not tied to any specific app or usage pattern Has anyone observed the same pattern on A17 Pro devices? And has Apple acknowledged any SPMI / thermalmonitord regression in iOS 26 for this chip family?
3
1
112
1d
iOS 26.4 asks for Face ID instead of Screen Time passcode when disabling Screen Time access for an app
On iOS 26.4, I set a Screen Time passcode. However, when I go to Settings > Apps > [Our App] and turn off Screen Time Access for the app, the system asks for Face ID instead of the Screen Time passcode. As a result, Screen Time access can be disabled without entering the Screen Time passcode. Steps to Reproduce 1. Set a Screen Time passcode on iOS 26.4. 2. Open Settings > Apps > [Our App]. 3. Turn off Screen Time Access for the app. Expected Result The system should require the Screen Time passcode before allowing Screen Time access to be disabled. Actual Result The system asks for Face ID instead of the Screen Time passcode, and Screen Time access is disabled.
11
2
921
1d
Apple CDN returning 404 Not found for our universal Link domain.
Hi Team, Our universal links were working fine but since last week we are facing issues and when tapping the links outside app it takes to browser and not the app. Apple CDN is returning 404 for our domain and not the contents of AASA file. https://app-site-association.cdn-apple.com/a/v1/app.ooredoo.om sudo swcutil dl -d app.ooredoo.om returns The operation couldn’t be completed. (SWCErrorDomain error 7.) Can we get the exact issue apple is facing to cache the AASA file in CDN. Any server config which we need to do for AASA bot to access the file. Thanks in advance.
7
0
251
1d
StoreKit returns no in-app subscriptions on TestFlight despite correct App Store Connect configuration
Hello Applet, I’m experiencing an issue with StoreKit on a TestFlight build. My app uses auto-renewable subscriptions through StoreKit and RevenueCat. Configuration already verified: App installed through TestFlight (not debug). Bundle Identifier: com.ciborgu.vytalai Paid Applications agreement is active. In-App Purchase capability is enabled. Three auto-renewable subscriptions exist in App Store Connect. Product IDs match exactly between App Store Connect, RevenueCat and the application. RevenueCat initializes successfully. A Sandbox test account has been created. Tested on a physical iPhone. Device restarted and app reinstalled from TestFlight. VPN and iCloud Private Relay disabled. When attempting to purchase a subscription, the Apple payment sheet never appears. Our diagnostics indicate that StoreKit does not return any available products for the configured Product IDs, preventing the purchase sheet from opening. Expected Product IDs: vytalai_premium_monthly vytalai_premium_yearly vytalai_premium_yearly_intro Could you please verify if there is any issue with the App Store Connect configuration, StoreKit availability, or the processing state of these subscriptions on Apple’s side? If additional logs or diagnostics are required, I can provide them. Thank you. I have already contacted Apple Developer Support regarding this same issue. Previously, I was advised to schedule a technical support meeting. However, when I requested the meeting, my request was declined because of the subject of my issue, so I was unable to speak with an Apple engineer. Since I have now completed all the recommended troubleshooting and the issue still persists, I would greatly appreciate it if this case could be reviewed by the appropriate technical team or a StoreKit engineer. Thank you for your assistance.
5
0
185
1d
Channel Sounding + AccessorySetupKit
Hello, I'm still investigating, so I could be mistaken. But as far as I can tell, if we create a CBCentralManager, and use it to scan for devices advertising Ranging Service, connect to them, and call the CoreBluetooth startChannelSounding() API, it does not work. I get a 'Operation not permitted' type of error. Instead, if I set up the device at least once using AccessorySetupKit, it does work. Will the need for AccessorySetupKit be removed? The thing is, AccessorySetupKit is not easy to play with. It seems to require no other part of the app to have an existing initialised CBCentralManager for it to do any kind of work, as the Channel Sounding code sample you provided attests to.
1
0
36
1d
Changing extension name of the Framework bundle
I'm working on a suite of apps supporting macOS, iOS and iPadOS (potentially tvOS, watchOS and visionOS in the future). Each of these App targets contain minimal code to only load the framework dynamically instead of the recommended load-time imports for Apple platforms. The rationales for runtime loading of framework (using dlopen and dlsym) is expressed in earlier post - fyi. Each app can load multiple frameworks at runtime. Instead of naming the frameworks like this - AppName_purpose1.framework, AppName_purpose2.framework, AppName_purpose3.framework, can it be named as AppName.purpose1, AppName.purpose2, AppName.purpose3 etc? Basically, change the Framework bundle extension name from .framework to a custom name based on purpose. The folder's extension name is changed, but it's still a framework bundle. The advantage of this approach is, in my project, Frameworks belonging to each of the apps cleanly distinguish themselves with a concise name. While this post is about Apple platforms, I'm also checking if other platforms allow to change the names of dynamic libraries (windows allows change). Using my custom extension can standardize the dynamic library's extension name across all platforms. Easy framework name construction - The Framework name is now the same as the App bundle name, which can be queried and this string can be appended with an appropriate extension to load all the Frameworks. Is it possible to change the extension name of the Framework bundle from the default .framework? If yes, how?
3
0
202
1d
Bluetooth Channel Sounding on iOS 27 Beta,the sample code did't work
I’m currently using Apple’s official sample code and configured my project strictly in accordance with the documentation at https://developer.apple.com/documentation/CoreBluetooth/measuring-distance-between-devices-using-channel-sounding. I’m leveraging an nRF54L15 development board to implement the Channel Sounding feature, yet I’m unable to retrieve valid distance or bearing measurements. My setup details are as follows: iOS 27 beta 2 running on an iPhone 17 Pro. I’d like to confirm whether any additional special configurations are required for the sample code to enable proper distance and bearing detection, as well as what extra setup steps are necessary on the nRF54L15 development board. Additionally, the following error keeps appearing during runtime: [CS] NISession being invalidated — error: Error Domain=com.apple.NearbyInteraction Code=-5887 "NIERROR_SESSION_FAILED_DESCRIPTION" UserInfo={NSLocalizedRecoverySuggestion=NIERROR_SESSION_FAILED_RECOVERY_SUGGESTION, NSLocalizedDescription=NIERROR_SESSION_FAILED_DESCRIPTION, NSLocalizedFailureReason=NIERROR_SESSION_FAILED_FAILURE_REASON}
1
0
81
1d
Recommended approach for updating a push-to-start Live Activity when the app is force-quit?
I create a Live Activity remotely via push-to-start, then use its per-activity token (Activity.pushTokenUpdates) so my server can send update/end pushes. To make sure I'm not missing tokens, I observe Activity.activityUpdates and prime from the Activity.activities snapshot at launch and on sceneWillEnterForeground, then subscribe each activity's pushTokenUpdates and POST the token to my server. This works reliably while the app is running or backgrounded/suspended — the system wakes it and I capture the token. The problem is the user force-quit case (swiped from the App Switcher, never reopened): Push-to-start still creates the Live Activity and it renders correctly on the Lock Screen. But pushTokenUpdates never fires, so my server never receives the per-activity token and can't update or end that activity. A backgrounded (not force-quit) app, as a control, captures the token every time. So it seems specific to user-termination rather than all "not running" states. I understand force-quit apps generally aren't granted background runtime — I'm trying to confirm whether that applies here and what the right pattern is. What's the recommended approach? Specifically: Is there any supported way to get the per-activity token to my server while the app stays force-quit — e.g. from the widget extension (does it have any access to Activity.pushToken, or only ActivityViewContext?) or a Notification Service Extension? 2. If not, is setting stale-date on the start push the intended way to let the card expire gracefully when it can never be ended via push? 3. Is there a better pattern for keeping a push-started Live Activity correct when the app is never relaunched?
1
0
240
1d
What is the officially supported method to automatically start a NETransparentProxyProvider after user login?
We are developing a DLP agent that uses a NETransparentProxyProvider to perform traffic inspection and modification. Our architecture currently includes: LaunchAgent, which monitors user session activity (login/logout, session activation) Container App, which: installs and activates a System Extension creates and saves the NETransparentProxyManager configuration starts the transparent proxy via startVPNTunnel. We would like to automate the startup of the Transparent Proxy for all users, including newly created users, in a way that is fully supported by macOS. We are looking for official guidance on the correct and supported mechanism for starting a user‑level Network Extension (specifically NETransparentProxyProvider) automatically at user login. Questions: What is the recommended and supported way to automatically start a NETransparentProxyProvider at user login? Are there any constraints or best practices we should follow when designing an automatic startup flow for a Network Extension such as NETransparentProxyProvider? We would appreciate official clarification on the supported deployment patterns for starting a user‑level Transparent Proxy Network Extension automatically in multi‑user enterprise environments.
4
0
502
1d
Validation for PIR DB canary value
We got a feedback from apple side for our new request PIR server responded, but the canary value is not in the dataset. "www.apple.com/url-filter-test" should be set to 1 So we have validated this using our iOS app pointing to same environment and it is blocking this URL as per expectation as well as we have validated this using below curl docker exec pir-server sh -lc 'grep -n "www.apple.com/url-filter-test" /pir/data/input.txtpb; ls -l /pir/data/input.txtpb /pir/data/url-0.bin /pir/data/url-0.params.txtpb'; curl -sS -i https://ohttp.protectuswebfilter.com/.well-known/private-token-issuer-directory | sed -n '1,40p' Please help us, how they are validating this entry is available or not
2
0
78
1d
USB-C to iPhone 16 USB-C communication
Hi everyone, We're working on a custom USB-C accessory based on an MCU (ARM Cortex-R8, running RT-Thread RTOS) with a Synopsys DWC3 USB Device controller. Our goal is to stream real-time sensor data (~10 Mbps) from the accessory to an iPhone via USB-C. We're planning to configure our MCU as a USB NCM device (following USB-IF NCM v1.0 spec), so the iPhone sees it as a standard Ethernet adapter. We would then run a lightweight TCP/IP stack (lwIP) on the MCU side and communicate with our iOS app via standard BSD Sockets / Network.framework over the virtual network — no gateway, just direct IP-to-IP communication within the local network that the NCM device presents. Questions: Feasibility confirmation: Based on our description, do you see any issues with this approach on iPhones including iPhone 16 and newer models? Our USB controller supports High-Speed (480 Mbps), so NCM throughput should not be a bottleneck. No-gateway concern: We don't plan to implement a DHCP server or gateway on the MCU. We'd use static IP configuration (or Link-Local addressing) for direct socket communication. Is there anything in iOS's network stack that would prevent this — for example, requiring a DHCP-assigned address or a default gateway before allowing socket traffic on the USB Ethernet interface? MFi and long-term viability: We understand this approach doesn't require MFi certification, since NCM is a standard USB-IF class and iOS has built-in Ethernet support. However, we want to make sure this doesn't go against the spirit of the MFi program or Apple's accessory policies. Is there any risk that Apple might restrict or block non-MFi NCM accessories in a future iOS update? We'd rather invest our effort in the right approach from the start. App Store review: Would an iOS app that communicates with our accessory exclusively via standard socket APIs (Network.framework / BSD Sockets) over the USB Ethernet interface face any App Store review issues — assuming it doesn't use any private APIs and doesn't declare MFi support? Any guidance would be greatly appreciated. We want to make sure we're building on a solid foundation.
1
0
99
1d
DriverKit kernel crash, possible PCI bridge issue?
DriverKit kernel crash, possible PCI bridge issue? In working on a DriverKit driver for a legacy SCSI controller, we have finally arrived at the expected (and usually joyful) point in driver development - a repeatable kernel crash and reboot. It happens when the controller first attempts to do "real work" by accessing requests or replies provided to it by the driver. I will provide additional information below (and can share more), but it’s a bit tricky because there is a lot of steps required to get to the point where the PCIe card is sufficiently initialized to respond, presumably attempt a memory access, and bring down the whole system. The system freezes and reboots write after the first MemoryWrite32 with an address of a request. The address is properly (we believe) mapped, using IODMACommand et al, approximately like so: uint64_t reqArrSize = MPT_REQUEST_AREA * kMaxTasks; IOAddressSegment arrseg = {}; IOMemoryMap * arrmap = nullptr; ret = IOBufferMemoryDescriptor::Create(kIOMemoryDirectionInOut, reqArrSize, 0, &ivars->fReqArrayDesc); if (ret != kIOReturnSuccess) { … } IODMACommandSpecification dmaspec = {}; dmaspec.options = kIODMACommandSpecificationNoOptions; dmaspec.maxAddressBits = 32; // tried 31 here but that fails to allocate, the addresses start at 80000000, then leads to a crash // but that seems to be a bridge / SID issue, not the address itself ret = IODMACommand::Create(ivars->pciDevice, kIODMACommandCreateNoOptions, &dmaspec, &ivars->fReqArrayDMA); if (ret != kIOReturnSuccess) { … } ivars->fReqArrayDMA->retain(); uint64_t dmaFlags = 0; uint32_t segCount = 1; // capacity in; actual out IOAddressSegment segs[1] = {}; ret = ivars->fReqArrayDMA->PrepareForDMA(kIODMACommandPrepareForDMANoOptions, ivars->fReqArrayDesc, 0, reqArrSize, &dmaFlags, &segCount, segs); if ((ret != kIOReturnSuccess ) || (segCount != 1)) {…} ivars->fReqArrayPhys = segs[0].address; ivars->fReqArrayDesc->CreateMapping(0,0,0,0,0, &arrmap); // virtual mapping ivars->fReqArray = (uint8_t *)(arrmap ? arrmap->GetAddress() : 0); // virtual ivars->fReqFreemap.set(); // mark all request entries as free memset(ivars->fReqArray, 0, reqArrSize); The crash is very violent and consistent: panic(...): "dart-apciec0 (...): DART DART exception SID 0 ERROR_STATUS 0x80000001 ERROR_ADDRESS 0x0000000080000000 (no exceptionInfo)" @AppleT8110DART.cpp:1720 The fault address is the address we write to one of the controller's control register. We suspect that the issue is that this card uses an 8114 bridge, which uses its SID for the request, instead of the (scsi controller chip) endpoint. The mapping, meanwhile, is under the endpoint’s SID. So when the controller attempts its first request using the physical address, the mapping does not exist at the right level - which brings down the whole system. pcic0-bridge 0x106b/0x1015 Apple TB PCIe port └ pci-bridge 0x1b21/0x2461 ASMedia (TB tunnel) └ pci-bridge 0x1b21/0x2461 ASMedia IOPCITunnelled=Yes └ pci-bridge 0x10b5/0x8114 - (on the controller card) PLX PEX 8114, PCIe-to-PCI-X bridge └ scsi@8 0x1000/0x0030 - (on the controller card), LSI, on bus 4 (PCI-X secondary side) Worse yet, there appears to be no way form within a DEXT to ask for a mapping at a different level, and the 8114 doesn’t have a mapper of its own anyway (attempting to do so with a separate DEXT fails). That last part we know because we tried a workaround with two DEXTs, one that successfully matches the 8114 bridge and the other that matches the SCSI controller chip itself. However, the bridge doesn’t have a mapper attached and so the OS does not seem to give us a useful address (using the same IOBufferMemoryDescriptor::Create, ODMACommand::Create, PrepareForDMA sequence), and 32 bit request simply fails with kIOReturnMessageTooLarge. Attached is a quick diagram of our suspicions and a longer write-up (far warning, unlike the above, that is mostly AI output but it’s been reviewed by the team). Questions: Have others dealt with this problem of legacy PCI devices that have bridges that don’t fit neatly into the restrictions, and what did you do? Is there a way to get the right virtual<->physical mappings recognized at the right level? Is there a way to temporarily turn off SID checking or is that (as I assume) intrinsic to how this works? Are we on the wrong track entirely?
1
0
217
1d
Reboot-free upgrade of an always-matched DriverKit dext
I have a DriverKit dext that implements a virtual SCSI HBA (no physical hardware). Because a bare IOUserSCSIParallelInterfaceController has no provider to match, the bundle ships two IOKitPersonalities: Bootstrap — IOClass IOUserService, IOProviderClass IOUserResources, IOResourceMatch IOKit. In Start() it does SetProperties({NvmeOfSCSIHBA: true}) + RegisterService(), publishing itself as a nub. Controller — IOClass IOUserSCSIParallelInterfaceController, IOProviderClass IOUserService, IOPropertyMatch {NvmeOfSCSIHBA: true} — it matches the bootstrap nub. This loads and runs correctly. The problem is upgrades. Activating a higher CFBundleVersion via OSSystemExtensionRequest.activationRequest (in-place replace) always defers the old version's termination to reboot. The new version reaches [activated enabled] but never starts; the old process keeps running until reboot. From sysextd/kernelmanagerd: kernelmanagerd Dext … v15 … is being replaced and cannot be terminated right away sysextd delegate returns Error Domain=OSSystemExtensionErrorDomain Code=101 "…is being replaced", assumes responsibility for old version …, keeping old version 15 sysextd turning the responsibility for termination of …, version 15 over to delegate (with uninstallation at the next reboot) sysextd a category delegate declined to terminate extension with identifier: … sysextd v15 terminating_for_uninstall → terminating_for_upgrade_via_delegate Key observation: this defers even on a fresh boot where the dext was never opened — no app/daemon ever opened the IOUserClient, no I/O, nothing attached beyond the controller↔nub match. So it does not appear to be a "client still holds it open" / busy-state situation; the driver_extension category delegate declines the moment it's a replacement. What I've tried: In-place activationRequest (replace): always defers to reboot (above). deactivationRequest (standalone): the request hangs — no delegate callback at all (waited ~13 min), even with no client open. Disconnecting all clients first (graceful Stop() that cancels its dispatch queues and completes async) does not change the replace deferral. My understanding from the docs/forums is that the normal reboot-free replace relies on the backing device being disconnected/reconnected to quiesce the old dext (thread 677040). My controller matches a persistent IOUserResources-backed nub that never detaches, so there's no equivalent quiesce point. Questions: For a dext whose only provider is a self-published IOUserResources nub (no detachable hardware), is reboot-free replacement structurally impossible — i.e. is the Code=101 "is being replaced" defer inherent to this matching pattern? Is the supported way to live-upgrade such a dext to deactivationRequest → (on .completed) → activationRequest rather than an in-place replace? If so, what makes a deactivationRequest complete in-session vs. defer to reboot for an IOUserResources-matched dext — and what would cause it to hang with no delegate callback? (Daemon's IOUserClient is closed; the controller's Stop() cancels its queues and completes.) Should the dext itself proactively tear down the published nub (e.g. terminate the bootstrap IOService) before/at upgrade so the controller detaches — or does that just re-match the still-staged old personalities and relaunch the old version? Is there a recommended pattern for a virtual (hardwareless) DriverKit HBA that needs in-field, reboot-free version updates, or is reboot genuinely required for this class of dext? Environment: macOS 27 (Tahoe)
1
0
93
1d
Using wildcard for applinks in iOS stopped working
Hi everyone, I've been working on an application that provides different subdomains for different customers, so we need to support app linking with all of them. However, using wildcard notation like applinks:*.domain.com doesn't work, while hardcoding applinks:subdomain.domain.com works fine. The association file is being served from both the main domain and subdomains. It used to work fine about a month ago, and I can't find any recent breaking changes on Apple's side . Any ideas why this could happen. ?
4
0
910
1d
Applinks for any subdomain not opening the app
My Entitlements file contains the following (removed some non related entries): <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:app.mydomain.org</string> <string>applinks:*.mydomain.org</string> </array> </dict> </plist> Now when I tap on a link such as abc.mydomain.org, the app is not opened. If I change the generic applinks key from *.mydomain.org to a specific domain, this works correctly and it opens the app as expected. (This makes me think the website part of the AASA file is correct). Since I need to support a lot of subdomains (think about hundreds in the near future), I really need the wildcard to work. Do you have any tips on how to make this work?
1
0
197
1d
AASA file on CDN not found more than one week
Last week our Universal Links stopped working. We made some changes and uploaded a new AASA file, but https://app-site-association.cdn-apple.com/a/v1/(domain) still returns 404 Not Found for all our domains. When I query directly from our server like domain/.well-known/apple-app-site-association, it returns 200 and the file is accessible. Could you help us resolve this issue? Our app relies on working Universal Links (deep links). Thank you!
1
0
172
1d
Cannot load products in Sandbox
Hi, I'm trying to hook up some test in app purchases to test purchase code between our app and our app's backend. When I try to load products (requestProductData) with my Sandbox account, my product identifiers come back in the invalid product identifiers member of the response. My product says it's in "waiting for review" status in app store connect, and I'm logged in to the app store with my sandbox account on my device. We just accepted the paid apps agreement as well--is there some propagation time to that? The product ID I'm using (both in app store connect and in-app) is test_durable. Do I need to append the package name to that or something? I've dug through the docs and through the forums here and come up empty. I tried using the Xcode storekit test harness and the issue there is that because that doesn't actually talk to the store apis, I can't use that to test my backend correctly validating/processing the transactions. Thanks!
Replies
0
Boosts
0
Views
31
Activity
22h
Master Abort on a link side of the Root Complex
I'm encountering a bug developing a (Thunderbolt) PCIDriverKit dext. The system runs well for a while, and then the hardware instance is shut down by the OS (Sonoma 14.7.6) for some unknown reason, but the dext is not, so hardware reads return 0xFFFFFFFF (device disconnected). There is no crash report, or diagnostic report. I don't see anything related in a sysdiagnose capture. The only hint I can find is the kernel logs indicate: 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompletionTimeoutInterrupt Completion timeout detected at address 0xe00510020 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompleterAbortInterrupt Completer Abort received (pri_status = 0x00100407, sec_status = 0x200000f0): 2026-07-01 16:18:15.929 Df kernel[0:139] (AppleT8122PCIeC) apciec[pcic1-bridge]::handleCompleterAbortInterrupt * Received Master Abort on a link side of the Root Complex That address (0xe00510020) looks like it's our PCI device (at a BAR0, offset 0x0020) read. What does this error explicitly mean? Did the device take too long to respond to the read request? After the event, every device on that Thunderbolt bus is disconnected, and a reboot seems to be required. Hardware is a 14" 2023 MacBook Pro M3.
Replies
1
Boosts
0
Views
34
Activity
1d
[iOS 26] thermalmonitord cpu-avg-limiter-input-w2r read failure + SPMI bus faults on iPhone 15 Pro (A17 Pro) — likely driver regression
Since upgrading to iOS 26, my iPhone 15 Pro (A17 Pro) exhibits persistent battery drain and thermal issues. Console.app analysis via Mac reveals a cluster of related kernel and daemon errors that appear to stem from a driver-level regression rather than a hardware fault. Observed errors (continuous, since boot): thermalmonitord fails to read the cpu-avg-limiter-input-w2r property every 5 seconds indefinitely. This leaves the thermal throttling subsystem unable to regulate CPU load using its primary input sensor. The kernel logs SPMI bus faults on nub-spmi1 at a perfectly regular 30-second interval (codes 0x72040C01, 0x75E40C3B, 0x72D80C33), alongside aop-spmi0 faults (0x7A000830). The strict periodicity strongly suggests a driver retry loop rather than a dead hardware component. appleh16camerad (ISP driver) fails to initialize endpoint 1 (fISPEndpoints[1] is not ready) and retries every ~4 seconds, while the ANE driver (ANE0) cannot register its memory unwire timer. Both run in permanent retry loops consuming CPU cycles. AppleSMCFamily logs kSMCKeyNotWritable errors on SMC write attempts — the key exists but is flagged non-writable, suggesting incomplete driver initialization rather than a missing component. A single AppleSARService coredump request for the baseband was also observed. Why this appears to be a driver issue and not hardware: The system remains stable with no kernel panics or forced reboots. The SPMI faults occur on a precise 30-second schedule consistent with a kernel timer, not random hardware failures. The SMC error is kSMCKeyNotWritable (key present, wrong state) rather than kSMCKeyNotFound. All symptoms appeared immediately after the iOS 26 update with no physical event on the device. Device: iPhone 15 Pro — A17 Pro iOS version: 26.0 Reproduced: persistent across reboots, not tied to any specific app or usage pattern Has anyone observed the same pattern on A17 Pro devices? And has Apple acknowledged any SPMI / thermalmonitord regression in iOS 26 for this chip family?
Replies
3
Boosts
1
Views
112
Activity
1d
iOS 26.4 asks for Face ID instead of Screen Time passcode when disabling Screen Time access for an app
On iOS 26.4, I set a Screen Time passcode. However, when I go to Settings > Apps > [Our App] and turn off Screen Time Access for the app, the system asks for Face ID instead of the Screen Time passcode. As a result, Screen Time access can be disabled without entering the Screen Time passcode. Steps to Reproduce 1. Set a Screen Time passcode on iOS 26.4. 2. Open Settings > Apps > [Our App]. 3. Turn off Screen Time Access for the app. Expected Result The system should require the Screen Time passcode before allowing Screen Time access to be disabled. Actual Result The system asks for Face ID instead of the Screen Time passcode, and Screen Time access is disabled.
Replies
11
Boosts
2
Views
921
Activity
1d
How to manage TestFlight subscriptions on macOS?
I purchased a subscription within my TestFlight macOS build. I would like to access a screen to manage subscriptions and cancel it. How can I do that? I can't find this screen. In the App Store app I can only see my personal purchases.
Replies
1
Boosts
0
Views
93
Activity
1d
Apple CDN returning 404 Not found for our universal Link domain.
Hi Team, Our universal links were working fine but since last week we are facing issues and when tapping the links outside app it takes to browser and not the app. Apple CDN is returning 404 for our domain and not the contents of AASA file. https://app-site-association.cdn-apple.com/a/v1/app.ooredoo.om sudo swcutil dl -d app.ooredoo.om returns The operation couldn’t be completed. (SWCErrorDomain error 7.) Can we get the exact issue apple is facing to cache the AASA file in CDN. Any server config which we need to do for AASA bot to access the file. Thanks in advance.
Replies
7
Boosts
0
Views
251
Activity
1d
StoreKit returns no in-app subscriptions on TestFlight despite correct App Store Connect configuration
Hello Applet, I’m experiencing an issue with StoreKit on a TestFlight build. My app uses auto-renewable subscriptions through StoreKit and RevenueCat. Configuration already verified: App installed through TestFlight (not debug). Bundle Identifier: com.ciborgu.vytalai Paid Applications agreement is active. In-App Purchase capability is enabled. Three auto-renewable subscriptions exist in App Store Connect. Product IDs match exactly between App Store Connect, RevenueCat and the application. RevenueCat initializes successfully. A Sandbox test account has been created. Tested on a physical iPhone. Device restarted and app reinstalled from TestFlight. VPN and iCloud Private Relay disabled. When attempting to purchase a subscription, the Apple payment sheet never appears. Our diagnostics indicate that StoreKit does not return any available products for the configured Product IDs, preventing the purchase sheet from opening. Expected Product IDs: vytalai_premium_monthly vytalai_premium_yearly vytalai_premium_yearly_intro Could you please verify if there is any issue with the App Store Connect configuration, StoreKit availability, or the processing state of these subscriptions on Apple’s side? If additional logs or diagnostics are required, I can provide them. Thank you. I have already contacted Apple Developer Support regarding this same issue. Previously, I was advised to schedule a technical support meeting. However, when I requested the meeting, my request was declined because of the subject of my issue, so I was unable to speak with an Apple engineer. Since I have now completed all the recommended troubleshooting and the issue still persists, I would greatly appreciate it if this case could be reviewed by the appropriate technical team or a StoreKit engineer. Thank you for your assistance.
Replies
5
Boosts
0
Views
185
Activity
1d
Channel Sounding + AccessorySetupKit
Hello, I'm still investigating, so I could be mistaken. But as far as I can tell, if we create a CBCentralManager, and use it to scan for devices advertising Ranging Service, connect to them, and call the CoreBluetooth startChannelSounding() API, it does not work. I get a 'Operation not permitted' type of error. Instead, if I set up the device at least once using AccessorySetupKit, it does work. Will the need for AccessorySetupKit be removed? The thing is, AccessorySetupKit is not easy to play with. It seems to require no other part of the app to have an existing initialised CBCentralManager for it to do any kind of work, as the Channel Sounding code sample you provided attests to.
Replies
1
Boosts
0
Views
36
Activity
1d
Changing extension name of the Framework bundle
I'm working on a suite of apps supporting macOS, iOS and iPadOS (potentially tvOS, watchOS and visionOS in the future). Each of these App targets contain minimal code to only load the framework dynamically instead of the recommended load-time imports for Apple platforms. The rationales for runtime loading of framework (using dlopen and dlsym) is expressed in earlier post - fyi. Each app can load multiple frameworks at runtime. Instead of naming the frameworks like this - AppName_purpose1.framework, AppName_purpose2.framework, AppName_purpose3.framework, can it be named as AppName.purpose1, AppName.purpose2, AppName.purpose3 etc? Basically, change the Framework bundle extension name from .framework to a custom name based on purpose. The folder's extension name is changed, but it's still a framework bundle. The advantage of this approach is, in my project, Frameworks belonging to each of the apps cleanly distinguish themselves with a concise name. While this post is about Apple platforms, I'm also checking if other platforms allow to change the names of dynamic libraries (windows allows change). Using my custom extension can standardize the dynamic library's extension name across all platforms. Easy framework name construction - The Framework name is now the same as the App bundle name, which can be queried and this string can be appended with an appropriate extension to load all the Frameworks. Is it possible to change the extension name of the Framework bundle from the default .framework? If yes, how?
Replies
3
Boosts
0
Views
202
Activity
1d
FIPS 140-3 Compliance for Apple's Network Framework API
We would like to verify whether Apple’s Network Framework—which enables the creation of network connections to send and receive data using transport and security protocols—is FIPS 140-3 compliant.
Replies
1
Boosts
0
Views
54
Activity
1d
Bluetooth Channel Sounding on iOS 27 Beta,the sample code did't work
I’m currently using Apple’s official sample code and configured my project strictly in accordance with the documentation at https://developer.apple.com/documentation/CoreBluetooth/measuring-distance-between-devices-using-channel-sounding. I’m leveraging an nRF54L15 development board to implement the Channel Sounding feature, yet I’m unable to retrieve valid distance or bearing measurements. My setup details are as follows: iOS 27 beta 2 running on an iPhone 17 Pro. I’d like to confirm whether any additional special configurations are required for the sample code to enable proper distance and bearing detection, as well as what extra setup steps are necessary on the nRF54L15 development board. Additionally, the following error keeps appearing during runtime: [CS] NISession being invalidated — error: Error Domain=com.apple.NearbyInteraction Code=-5887 "NIERROR_SESSION_FAILED_DESCRIPTION" UserInfo={NSLocalizedRecoverySuggestion=NIERROR_SESSION_FAILED_RECOVERY_SUGGESTION, NSLocalizedDescription=NIERROR_SESSION_FAILED_DESCRIPTION, NSLocalizedFailureReason=NIERROR_SESSION_FAILED_FAILURE_REASON}
Replies
1
Boosts
0
Views
81
Activity
1d
Recommended approach for updating a push-to-start Live Activity when the app is force-quit?
I create a Live Activity remotely via push-to-start, then use its per-activity token (Activity.pushTokenUpdates) so my server can send update/end pushes. To make sure I'm not missing tokens, I observe Activity.activityUpdates and prime from the Activity.activities snapshot at launch and on sceneWillEnterForeground, then subscribe each activity's pushTokenUpdates and POST the token to my server. This works reliably while the app is running or backgrounded/suspended — the system wakes it and I capture the token. The problem is the user force-quit case (swiped from the App Switcher, never reopened): Push-to-start still creates the Live Activity and it renders correctly on the Lock Screen. But pushTokenUpdates never fires, so my server never receives the per-activity token and can't update or end that activity. A backgrounded (not force-quit) app, as a control, captures the token every time. So it seems specific to user-termination rather than all "not running" states. I understand force-quit apps generally aren't granted background runtime — I'm trying to confirm whether that applies here and what the right pattern is. What's the recommended approach? Specifically: Is there any supported way to get the per-activity token to my server while the app stays force-quit — e.g. from the widget extension (does it have any access to Activity.pushToken, or only ActivityViewContext?) or a Notification Service Extension? 2. If not, is setting stale-date on the start push the intended way to let the card expire gracefully when it can never be ended via push? 3. Is there a better pattern for keeping a push-started Live Activity correct when the app is never relaunched?
Replies
1
Boosts
0
Views
240
Activity
1d
What is the officially supported method to automatically start a NETransparentProxyProvider after user login?
We are developing a DLP agent that uses a NETransparentProxyProvider to perform traffic inspection and modification. Our architecture currently includes: LaunchAgent, which monitors user session activity (login/logout, session activation) Container App, which: installs and activates a System Extension creates and saves the NETransparentProxyManager configuration starts the transparent proxy via startVPNTunnel. We would like to automate the startup of the Transparent Proxy for all users, including newly created users, in a way that is fully supported by macOS. We are looking for official guidance on the correct and supported mechanism for starting a user‑level Network Extension (specifically NETransparentProxyProvider) automatically at user login. Questions: What is the recommended and supported way to automatically start a NETransparentProxyProvider at user login? Are there any constraints or best practices we should follow when designing an automatic startup flow for a Network Extension such as NETransparentProxyProvider? We would appreciate official clarification on the supported deployment patterns for starting a user‑level Transparent Proxy Network Extension automatically in multi‑user enterprise environments.
Replies
4
Boosts
0
Views
502
Activity
1d
Validation for PIR DB canary value
We got a feedback from apple side for our new request PIR server responded, but the canary value is not in the dataset. "www.apple.com/url-filter-test" should be set to 1 So we have validated this using our iOS app pointing to same environment and it is blocking this URL as per expectation as well as we have validated this using below curl docker exec pir-server sh -lc 'grep -n "www.apple.com/url-filter-test" /pir/data/input.txtpb; ls -l /pir/data/input.txtpb /pir/data/url-0.bin /pir/data/url-0.params.txtpb'; curl -sS -i https://ohttp.protectuswebfilter.com/.well-known/private-token-issuer-directory | sed -n '1,40p' Please help us, how they are validating this entry is available or not
Replies
2
Boosts
0
Views
78
Activity
1d
USB-C to iPhone 16 USB-C communication
Hi everyone, We're working on a custom USB-C accessory based on an MCU (ARM Cortex-R8, running RT-Thread RTOS) with a Synopsys DWC3 USB Device controller. Our goal is to stream real-time sensor data (~10 Mbps) from the accessory to an iPhone via USB-C. We're planning to configure our MCU as a USB NCM device (following USB-IF NCM v1.0 spec), so the iPhone sees it as a standard Ethernet adapter. We would then run a lightweight TCP/IP stack (lwIP) on the MCU side and communicate with our iOS app via standard BSD Sockets / Network.framework over the virtual network — no gateway, just direct IP-to-IP communication within the local network that the NCM device presents. Questions: Feasibility confirmation: Based on our description, do you see any issues with this approach on iPhones including iPhone 16 and newer models? Our USB controller supports High-Speed (480 Mbps), so NCM throughput should not be a bottleneck. No-gateway concern: We don't plan to implement a DHCP server or gateway on the MCU. We'd use static IP configuration (or Link-Local addressing) for direct socket communication. Is there anything in iOS's network stack that would prevent this — for example, requiring a DHCP-assigned address or a default gateway before allowing socket traffic on the USB Ethernet interface? MFi and long-term viability: We understand this approach doesn't require MFi certification, since NCM is a standard USB-IF class and iOS has built-in Ethernet support. However, we want to make sure this doesn't go against the spirit of the MFi program or Apple's accessory policies. Is there any risk that Apple might restrict or block non-MFi NCM accessories in a future iOS update? We'd rather invest our effort in the right approach from the start. App Store review: Would an iOS app that communicates with our accessory exclusively via standard socket APIs (Network.framework / BSD Sockets) over the USB Ethernet interface face any App Store review issues — assuming it doesn't use any private APIs and doesn't declare MFi support? Any guidance would be greatly appreciated. We want to make sure we're building on a solid foundation.
Replies
1
Boosts
0
Views
99
Activity
1d
DriverKit kernel crash, possible PCI bridge issue?
DriverKit kernel crash, possible PCI bridge issue? In working on a DriverKit driver for a legacy SCSI controller, we have finally arrived at the expected (and usually joyful) point in driver development - a repeatable kernel crash and reboot. It happens when the controller first attempts to do "real work" by accessing requests or replies provided to it by the driver. I will provide additional information below (and can share more), but it’s a bit tricky because there is a lot of steps required to get to the point where the PCIe card is sufficiently initialized to respond, presumably attempt a memory access, and bring down the whole system. The system freezes and reboots write after the first MemoryWrite32 with an address of a request. The address is properly (we believe) mapped, using IODMACommand et al, approximately like so: uint64_t reqArrSize = MPT_REQUEST_AREA * kMaxTasks; IOAddressSegment arrseg = {}; IOMemoryMap * arrmap = nullptr; ret = IOBufferMemoryDescriptor::Create(kIOMemoryDirectionInOut, reqArrSize, 0, &ivars->fReqArrayDesc); if (ret != kIOReturnSuccess) { … } IODMACommandSpecification dmaspec = {}; dmaspec.options = kIODMACommandSpecificationNoOptions; dmaspec.maxAddressBits = 32; // tried 31 here but that fails to allocate, the addresses start at 80000000, then leads to a crash // but that seems to be a bridge / SID issue, not the address itself ret = IODMACommand::Create(ivars->pciDevice, kIODMACommandCreateNoOptions, &dmaspec, &ivars->fReqArrayDMA); if (ret != kIOReturnSuccess) { … } ivars->fReqArrayDMA->retain(); uint64_t dmaFlags = 0; uint32_t segCount = 1; // capacity in; actual out IOAddressSegment segs[1] = {}; ret = ivars->fReqArrayDMA->PrepareForDMA(kIODMACommandPrepareForDMANoOptions, ivars->fReqArrayDesc, 0, reqArrSize, &dmaFlags, &segCount, segs); if ((ret != kIOReturnSuccess ) || (segCount != 1)) {…} ivars->fReqArrayPhys = segs[0].address; ivars->fReqArrayDesc->CreateMapping(0,0,0,0,0, &arrmap); // virtual mapping ivars->fReqArray = (uint8_t *)(arrmap ? arrmap->GetAddress() : 0); // virtual ivars->fReqFreemap.set(); // mark all request entries as free memset(ivars->fReqArray, 0, reqArrSize); The crash is very violent and consistent: panic(...): "dart-apciec0 (...): DART DART exception SID 0 ERROR_STATUS 0x80000001 ERROR_ADDRESS 0x0000000080000000 (no exceptionInfo)" @AppleT8110DART.cpp:1720 The fault address is the address we write to one of the controller's control register. We suspect that the issue is that this card uses an 8114 bridge, which uses its SID for the request, instead of the (scsi controller chip) endpoint. The mapping, meanwhile, is under the endpoint’s SID. So when the controller attempts its first request using the physical address, the mapping does not exist at the right level - which brings down the whole system. pcic0-bridge 0x106b/0x1015 Apple TB PCIe port └ pci-bridge 0x1b21/0x2461 ASMedia (TB tunnel) └ pci-bridge 0x1b21/0x2461 ASMedia IOPCITunnelled=Yes └ pci-bridge 0x10b5/0x8114 - (on the controller card) PLX PEX 8114, PCIe-to-PCI-X bridge └ scsi@8 0x1000/0x0030 - (on the controller card), LSI, on bus 4 (PCI-X secondary side) Worse yet, there appears to be no way form within a DEXT to ask for a mapping at a different level, and the 8114 doesn’t have a mapper of its own anyway (attempting to do so with a separate DEXT fails). That last part we know because we tried a workaround with two DEXTs, one that successfully matches the 8114 bridge and the other that matches the SCSI controller chip itself. However, the bridge doesn’t have a mapper attached and so the OS does not seem to give us a useful address (using the same IOBufferMemoryDescriptor::Create, ODMACommand::Create, PrepareForDMA sequence), and 32 bit request simply fails with kIOReturnMessageTooLarge. Attached is a quick diagram of our suspicions and a longer write-up (far warning, unlike the above, that is mostly AI output but it’s been reviewed by the team). Questions: Have others dealt with this problem of legacy PCI devices that have bridges that don’t fit neatly into the restrictions, and what did you do? Is there a way to get the right virtual<->physical mappings recognized at the right level? Is there a way to temporarily turn off SID checking or is that (as I assume) intrinsic to how this works? Are we on the wrong track entirely?
Replies
1
Boosts
0
Views
217
Activity
1d
Reboot-free upgrade of an always-matched DriverKit dext
I have a DriverKit dext that implements a virtual SCSI HBA (no physical hardware). Because a bare IOUserSCSIParallelInterfaceController has no provider to match, the bundle ships two IOKitPersonalities: Bootstrap — IOClass IOUserService, IOProviderClass IOUserResources, IOResourceMatch IOKit. In Start() it does SetProperties({NvmeOfSCSIHBA: true}) + RegisterService(), publishing itself as a nub. Controller — IOClass IOUserSCSIParallelInterfaceController, IOProviderClass IOUserService, IOPropertyMatch {NvmeOfSCSIHBA: true} — it matches the bootstrap nub. This loads and runs correctly. The problem is upgrades. Activating a higher CFBundleVersion via OSSystemExtensionRequest.activationRequest (in-place replace) always defers the old version's termination to reboot. The new version reaches [activated enabled] but never starts; the old process keeps running until reboot. From sysextd/kernelmanagerd: kernelmanagerd Dext … v15 … is being replaced and cannot be terminated right away sysextd delegate returns Error Domain=OSSystemExtensionErrorDomain Code=101 "…is being replaced", assumes responsibility for old version …, keeping old version 15 sysextd turning the responsibility for termination of …, version 15 over to delegate (with uninstallation at the next reboot) sysextd a category delegate declined to terminate extension with identifier: … sysextd v15 terminating_for_uninstall → terminating_for_upgrade_via_delegate Key observation: this defers even on a fresh boot where the dext was never opened — no app/daemon ever opened the IOUserClient, no I/O, nothing attached beyond the controller↔nub match. So it does not appear to be a "client still holds it open" / busy-state situation; the driver_extension category delegate declines the moment it's a replacement. What I've tried: In-place activationRequest (replace): always defers to reboot (above). deactivationRequest (standalone): the request hangs — no delegate callback at all (waited ~13 min), even with no client open. Disconnecting all clients first (graceful Stop() that cancels its dispatch queues and completes async) does not change the replace deferral. My understanding from the docs/forums is that the normal reboot-free replace relies on the backing device being disconnected/reconnected to quiesce the old dext (thread 677040). My controller matches a persistent IOUserResources-backed nub that never detaches, so there's no equivalent quiesce point. Questions: For a dext whose only provider is a self-published IOUserResources nub (no detachable hardware), is reboot-free replacement structurally impossible — i.e. is the Code=101 "is being replaced" defer inherent to this matching pattern? Is the supported way to live-upgrade such a dext to deactivationRequest → (on .completed) → activationRequest rather than an in-place replace? If so, what makes a deactivationRequest complete in-session vs. defer to reboot for an IOUserResources-matched dext — and what would cause it to hang with no delegate callback? (Daemon's IOUserClient is closed; the controller's Stop() cancels its queues and completes.) Should the dext itself proactively tear down the published nub (e.g. terminate the bootstrap IOService) before/at upgrade so the controller detaches — or does that just re-match the still-staged old personalities and relaunch the old version? Is there a recommended pattern for a virtual (hardwareless) DriverKit HBA that needs in-field, reboot-free version updates, or is reboot genuinely required for this class of dext? Environment: macOS 27 (Tahoe)
Replies
1
Boosts
0
Views
93
Activity
1d
Using wildcard for applinks in iOS stopped working
Hi everyone, I've been working on an application that provides different subdomains for different customers, so we need to support app linking with all of them. However, using wildcard notation like applinks:*.domain.com doesn't work, while hardcoding applinks:subdomain.domain.com works fine. The association file is being served from both the main domain and subdomains. It used to work fine about a month ago, and I can't find any recent breaking changes on Apple's side . Any ideas why this could happen. ?
Replies
4
Boosts
0
Views
910
Activity
1d
Applinks for any subdomain not opening the app
My Entitlements file contains the following (removed some non related entries): <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:app.mydomain.org</string> <string>applinks:*.mydomain.org</string> </array> </dict> </plist> Now when I tap on a link such as abc.mydomain.org, the app is not opened. If I change the generic applinks key from *.mydomain.org to a specific domain, this works correctly and it opens the app as expected. (This makes me think the website part of the AASA file is correct). Since I need to support a lot of subdomains (think about hundreds in the near future), I really need the wildcard to work. Do you have any tips on how to make this work?
Replies
1
Boosts
0
Views
197
Activity
1d
AASA file on CDN not found more than one week
Last week our Universal Links stopped working. We made some changes and uploaded a new AASA file, but https://app-site-association.cdn-apple.com/a/v1/(domain) still returns 404 Not Found for all our domains. When I query directly from our server like domain/.well-known/apple-app-site-association, it returns 200 and the file is accessible. Could you help us resolve this issue? Our app relies on working Universal Links (deep links). Thank you!
Replies
1
Boosts
0
Views
172
Activity
1d