Posts under App & System Services topic

Post

Replies

Boosts

Views

Activity

New features for APNs token authentication now available
Team-scoped keys introduce the ability to restrict your token authentication keys to either development or production environments. Topic-specific keys in addition to environment isolation allow you to associate each key with a specific Bundle ID streamlining key management. For detailed instructions on accessing these features, read our updated documentation on establishing a token-based connection to APNs.
0
0
2.7k
Feb ’25
Meet State Reporting and the new MetricKit
Hello developers! Thank you for your dedication to creating apps with great performance. We’re excited to kick off another year of partnering with you on improving power and performance in your apps. At WWDC26, check out the following new things in the latest platform SDKs and Xcode 27 beta for performance. You can also join us online for a Power and Performance Group Lab on Tuesday, June 9 at 11 AM Pacific. Meet State Reporting and the new MetricKit State reporting: The new StateReporting framework lets your application express its state to downstream tools like Instruments and MetricKit. Make your telemetry and traces much more useful by adopting this simple API. MetricKit: In the 27 releases, the Swift-first MetricManager API replaces the MXMetricManager API. Combined with State Reporting, the new MetricKit provides more granular metrics to isolate performance problems faster. It also provides a more expressive API that is great to use in Swift, with improved Swift concurrency and Codable support. With this year’s releases, the MXMetricManager API is considered legacy. ▶️ To learn more, watch Meet the new MetricKit. Discover new features in Xcode organizer Metric goals: Xcode organizer now provides a goal metric for Battery Usage, Disk Writes, Hang Rate, Hitches, Memory, and Storage metrics, allowing you to prioritize performance engineering across more areas. Generate recommendations: Quickly resolve the highest impact performance issues in your app by using Generate Recommendations for Crash, Energy, Disk Write, Hang and Launch diagnostics. Insights overview: The new insights overview in Xcode organizer summarizes high-impact performance regressions for metrics and diagnostic reports, helping you plan and prioritize performance engineering work. Storage metrics: Storage metrics are now available in Xcode organizer, allowing you to monitor your app's Documents & Data and App Size across releases and catch regressions in cache usage and bundle size. Hitches metric: The new Hitches metric replaces the Scrolling metric in the organizer and now displays hitches for all animations in your app, giving you a comprehensive view of animation performance. ▶️ To learn more about other advancements in Xcode, watch What’s new in Xcode 27. Improve app responsiveness with Instruments Foundation Models: The Foundation Models instrument is redesigned with a tree view that lets you drill into individual requests, inspecting tool call arguments and results, inference prompts and responses, and token statistics. Use it to understand caching behavior, measure latency, and optimize throughput. System Trace: System calls, VM faults, and thread states are now unified into a single plot, with a new blending algorithm that stays readable even at high density. Once you spot something worth investigating, left/right key navigation lets you follow a thread's activity step by step, and the inspector provides quick actions like pinning the thread that made another thread runnable. System Trace now also draws thread priority and QoS over time, making it easier to identify priority inversions and unexpected QoS degradations that affect responsiveness. Swift Concurrency: New Main Actor and Global Concurrent Executor tracks let you visualize running tasks and executor queue depth over time, making it easier to spot task scheduling delays and actor contention. Tasks are now grouped into collections for faster navigation. Swift Tasks, Actors, and Executors instruments can now surface Call Trees, Flame Graphs, and Top Functions scoped to each entity — so you can pinpoint exactly where concurrency overhead lives. Top Functions: Helper functions and runtime internals can be expensive but hard to spot in a standard call tree. The new aggregation mode in Top Functions surfaces any function's total execution time across the entire call stack, making it easy to identify and prioritize hidden hotspots. Run Comparison: Compare call tree data across builds to identify regressions and performance wins. Results can be explored as an outline, flame graph, or top functions — choose whichever view best fits your workflow. ▶️ To learn more about profiling your app with Instruments, watch “Profile, fix, and verify: Improve app responsiveness with Instruments” ▶️ To learn about Foundation Models optimization, watch “Debug and profile agentic app experiences with Instruments”. If you have any questions about using State Reporting or the new MetricKit, create a post on the forums. For help creating a post, see Tips on writing a forum posts.
0
0
343
2w
iOS Universal Link opens app and then opens browser (Flutter + Universal Links) — only when using paths/params
Hi everyone, I’ve been stuck on an issue with iOS Universal Links for about a week and could really use some help. The problem When tapping a Universal Link on iOS, my Flutter app opens correctly (desired behavior) — but immediately afterward, Safari opens the same link in the browser. So both the app and the browser open. This only happens on iOS. On Android everything works as expected. What works If the link is simply the domain, like: https://mydomain.com …then the app opens without triggering the browser afterward. This is the correct behavior. What doesn’t work If the link includes a path or parameters, like: https://mydomain.com/path https://mydomain.com/path?param=value …then the app opens, and then the browser opens immediately after. What I’ve tried Verified my AASA file using Branch’s validator: https://branch.io/resources/aasa-validator/ → The AASA file is valid. Universal Links do open the correct screen inside the app — the issue is the unwanted second step (Safari opening). Behavior is consistent across different iOS devices. Extra details Using Flutter. Universal Links set up with the standard configuration (associatedDomains, AASA hosted at /.well-known/apple-app-site-association, etc.). Question Has anyone encountered this issue where Universal Links with paths/params open the app and then open Safari? What could cause iOS to trigger the browser fallback even when the AASA file is valid and the app handles the link correctly? Any insights, debugging tips, or known edge cases would be incredibly appreciated!
5
2
384
2h
XPC connection consistently invalidated on app upgrade
Hi, Our project is a MacOS SwiftUI GUI application that bundles a System Network Extension, signed with a Developer ID certificate for distribution outside of the app store. The system network extension is used to write a packet tunnel provider. The signing of the app & network extension is handled by XCode (v16.0.0), we do not run codesign ourselves. We have no issues with XPC or the system network extension during normal usage, nor when the application is installed on a user's device for the first time. The problem only arises when the user upgrades the application. I have experienced this issue myself, as have our users. It's been reported on Apple Silicon macbooks running at least macOS 15.3.2. Much like the SimpleFirewall example (which we used as a reference), we use XPC for basic communication of state between the app and NE. These XPC connections stop working when the user installs a new version of the app, with OS logs from the process indicating that the connection is immediately invalidated. Subsequent connection attempts are also immediately invalidated. Toggling the VPN in system settings (or via the app) does not resolve the problem, nor does restarting the app, nor does deleting and reinstalling the app, nor does restarting the device. The only reliable workaround is to delete the system extension in Login Items & Extensions, under Network Extensions. No device restart is necessary to garbage collect the old extension - once the extension is reapproved by the user, the XPC issue resolves itself. This would be an acceptable workaround were it possible to automate the deleting of the system extension, but that appears deliberately not possible, and requiring our users to do this each time they update is unreasonable. When the upgraded app is opened for the first time, the OSSystemExtensionRequest request is sent, and the outcome is that the previously installed system network extension is replaced, as both the CFBundleVersion and CFBundleShortVersionString differ. When this issue is encountered, the output of systemextensionsctl list shows the later version is installed and activated. I've been able to reproduce this bug on my personal laptop, with SIP on and systemextensionsctl developer off, but on my work laptop with SIP off and systemextensionsctl developer on (where the network extension is replaced on each activation request, instead of only when the version strings differ), I do not encounter this issue, which leads me to believe it has something to do with the notarization process. We notarize the pkg using xcrun notarytool, and then staple to the pkg. This is actually the same issue described in: https://developer.apple.com/forums/thread/711713 https://developer.apple.com/forums/thread/667597 https://developer.apple.com/forums/thread/742992 https://developer.apple.com/forums/thread/728063 but it's been a while since any of these threads were updated, and we've made attempts to address it off the suggestions in the threads to no avail. Those suggestions are: Switching to a .pkg installer from a .dmg As part of the .pkg preinstall, doing all of the following: Stopping the VPN (scutil --nc stop), shutting down the app (using osascript 'quit app id'), and deleting the app (which claims to delete the network extension, but not the approval in Login Items & Extensions remains??), by running rm -rf on the bundle in /Applications As part of the .pkg postinstall: Forcing macOS to ingest the App bundle's notarization ticket using spctl --assess. Ensuring NSXPCListener.resume() is called after autoreleasepool { NEProvider.startSystemExtensionMode() } (mentioned in a forum thread above as a fix, did not help.) One thing I'm particularly interested in is the outcome of this feedback assistant ticket, as I can't view it: FB11086599. It was shared on this forum in the first thread above, and supposedly describes the same issue. I almost find it hard to believe that this issue has been around for this many years without a workaround (there's system network extension apps out there that appear to work fine when updating, are they not using XPC?), so I wonder if there's a fix described in that FB ticket. Since I can't view that above feedback ticket, I've created my own: FB17032197
7
0
714
2h
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
23
4
2.0k
5h
The language of the pop-up window when using AccessorySetupKit to remove accessories.
When using AccessorySetupKit to remove accessories, a pop-up window appears when calling removeAccessory. However, the text in the pop-up window does not change according to my iPhone's language settings and remains only in English. Has anyone encountered this issue? Does Apple have any plans to address this compatibility issue?
3
0
65
5h
Running with CloudKit and Swift 6
Hello, everyone, I've started a thread and got a recommendation from DTS Engineer to move the conversation here. The sample code for https://developer.apple.com/documentation/coredata/sharing-core-data-objects-between-icloud-users is with Swift 5. I have a Swift 6 project and I'm running into issue porting the sample code. I've found that NSManagedObjectContext is sendable (https://fatbobman.com/en/posts/sendable-nsmanagedobjectcontext/). From it I can get the persistence controller, and from it I get the stores and this solves the Swift 6 migration path and looks good. i.e. not rely on the private and shared references to the persistence stores, I'll be getting them from the context. I've also notices that once I start to change the PersistenceController from lazy vars for lazy var previewContainer: NSPersistentCloudKitContainer and lazy var persistentContainer: NSPersistentCloudKitContainer to struct PersistenceController { static let shared = PersistenceController() @MainActor static let preview: PersistenceController = { let result = PersistenceController(inMemory: true) which is the default pattern for new CoreData applications (Xcode 26 / Xcode 27) I start getting preview crashes similar to https://developer.apple.com/forums/thread/654126. It turns out this is because of let persistenceController = PersistenceController.shared in the App. Quite unexpected. The persistence controller looks more suitable for actor based on the CloudKit sharing requirements. I saw such question on WWDC 26, however there was not enough time for an answer - is a good pattern to have the PersistenceController as an actor or in another way. Which is that most swiftly way for Swift 6?
0
0
16
5h
Entitlement for extension to have read-only access to host's task?
Hi all, I'm building an iOS app extension using ExtensionKit that works exclusively with its containing host app, presenting UI via EXHostViewController. I'd like the extension to have read-only access to the host's task for process introspection purposes. I'm aware this would almost certainly require a special entitlement. I know get-task-allow and the debugger entitlement exist, but those aren't shippable to the App Store. I'm looking for something that could realistically be distributed to end users. My questions: Does an entitlement exist (or is one planned) that would grant an extension limited, read-only access to its host's task—given the extension is already tightly coupled to the host? If not, is this something Apple would consider adding? The use case is an extension that needs to inspect host process state without the ability to modify it. Is there a path to request such an entitlement through the provisioning profile process, or is this fundamentally off the table for App Store distribution? It seems like a reasonable trust boundary given the extension already lives inside the host's app bundle, but I understand the security implications. Any insight appreciated. Thanks!
11
0
904
18h
Macbook m4 shutsdown 10min after closing the lid
panic(cpu 6 caller 0xfffffe00408d5cc8): "AMCC0 DCS GROUP 0 CHANNEL 0 AMPH_AIC_IRQ_EN_FLD error: INTSTS 0x00000002" @AppleH16GFamilyPlatformErrorHandler.cpp:4284 Debugger message: panic Memory ID: 0xff OS release type: User OS version: 25F80 Kernel version: Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:26 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8132 Fileset Kernelcache UUID: 810ED0581F8496D5014005FD8C299E58 Kernel UUID: 4FEB3A7D-D020-3910-B7AF-232C78D32651 Boot session UUID: BD3ADC9E-8793-494E-A0D9-2764E76D7F6E iBoot version: mBoot-18000.120.36 iBoot Stage 2 version: mBoot-18000.120.36 secure boot?: YES roots installed: 0 Paniclog version: 15 Debug Header address: 0xfffffe001de0d000 Debug Header entry count: 3 TXM load address: 0xfffffe002dd68000 TXM UUID: F0C1A57F-CE44-3DF4-9E86-0CFF02D7C00D Debug Header kernelcache load address: 0xfffffe003dd68000 Debug Header kernelcache UUID: 810ED058-1F84-96D5-0140-05FD8C299E58 SPTM load address: 0xfffffe001dd68000 SPTM UUID: BF0FEC4B-5AEA-35B8-BF85-518497A9C1C5 KernelCache slide: 0x0000000036d64000 KernelCache base: 0xfffffe003dd68000 Kernel slide: 0x0000000036d6c000 Kernel text base: 0xfffffe003dd70000 Kernel text exec slide: 0x000000003b488000 Kernel text exec base: 0xfffffe004248c000 mach_absolute_time: 0x1832dfe2d Epoch Time: sec usec Boot : 0x6a3ef98d 0x000c2461 Sleep : 0x6a3efa94 0x00069c13 Wake : 0x00000000 0x00000000 Calendar: 0x6a3efa96 0x000a335d Zone info: Zone map: 0xfffffe100c000000 - 0xfffffe360c000000 . VM : 0xfffffe100c000000 - 0xfffffe15d8000000 . RO : 0xfffffe15d8000000 - 0xfffffe1872000000 . GEN0 : 0xfffffe1872000000 - 0xfffffe1e3e000000 . GEN1 : 0xfffffe1e3e000000 - 0xfffffe240a000000 . GEN2 : 0xfffffe240a000000 - 0xfffffe29d6000000 . GEN3 : 0xfffffe29d6000000 - 0xfffffe2fa2000000 . DATA : 0xfffffe2fa2000000 - 0xfffffe360c000000 Metadata: 0xfffffe9654010000 - 0xfffffe965d810000 Bitmaps : 0xfffffe965d810000 - 0xfffffe96605b0000 Extra : 0 - 0 CORE 0 [EACC0] recently retired instr at 0x0000000000000000 CORE 1 [EACC0] recently retired instr at 0x0000000000000000 CORE 2 [EACC0] recently retired instr at 0x0000000000000000 CORE 3 [EACC0] recently retired instr at 0x0000000000000000 CORE 4 [EACC0] recently retired instr at 0x0000000000000000 CORE 5 [EACC0] recently retired instr at 0x0000000000000000 CORE 6 [PACC1] recently retired instr at 0x0000000000000000 CORE 7 [PACC1] recently retired instr at 0x0000000000000000 CORE 8 [PACC1] recently retired instr at 0x0000000000000000 CORE 9 [PACC1] recently retired instr at 0x0000000000000000 TPIDRx_ELy = {1: 0xfffffe2ea1fe8900 0: 0x0000000000000006 0ro: 0x0000000000000000 } CORE 0: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 1: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 2: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 3: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 4: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 5: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 6 is the one that panicked. Check the full backtrace for details. CORE 7: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 8: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 9: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 Compressor Info: 0% of compressed pages limit (OK) and 0% of segments limit (OK) with 0 swapfiles and OK swap space Panicked task 0xfffffe28d5fa3960: 0 pages, 634 threads: pid 0: kernel_task Panicked thread: 0xfffffe2ea1fe8900, backtrace: 0xfffffea9d5fdabd0, tid: 102 lr: 0xfffffe00424e2194 fp: 0xfffffea9d5fdac70 lr: 0xfffffe00426602a0 fp: 0xfffffea9d5fdace0 lr: 0xfffffe004265e234 fp: 0xfffffea9d5fdada0 lr: 0xfffffe0042491e9c fp: 0xfffffea9d5fdadb0 lr: 0xfffffe00424e24a4 fp: 0xfffffea9d5fdb2d0 lr: 0xfffffe0042dd35c4 fp: 0xfffffea9d5fdb2f0 lr: 0xfffffe00408d5cc8 fp: 0xfffffea9d5fdb630 lr: 0xfffffe00408d6090 fp: 0xfffffea9d5fdbef0 lr: 0xfffffe0042ccd0b0 fp: 0xfffffea9d5fdbf30 lr: 0xfffffe00402f16e4 fp: 0xfffffea9d5fdbfc0 lr: 0xfffffe0042661a50 fp: 0xfffffea9d5fdbfe0 lr: 0xfffffe0042491f40 fp: 0xfffffea9d5fdbff0 lr: 0xfffffe0042506714 fp: 0xfffffe5be553bee0 lr: 0xfffffe0042506670 fp: 0xfffffe5be553bf20 lr: 0xfffffe0042492b6c fp: 0x0000000000000000 Kernel Extensions in backtrace: com.apple.driver.AppleT8132(1.0)[47D903D9-8F8C-3E63-BD11-57EC7038EE44]@0xfffffe00408c9310->0xfffffe00408d96a3 dependency: com.apple.driver.AppleARMPlatform(1.0.2)[85AF824B-70B0-3C11-BE82-F90BD4A57DC8]@0xfffffe003f7d7d30->0xfffffe003f82b0f3 dependency: com.apple.driver.AppleEverestErrorHandler(1)[656D28F2-FD94-3B53-AD95-C1DEE28140D2]@0xfffffe003ff78f60->0xfffffe003ff79ebb dependency: com.apple.iokit.IOReportFamily(47)[B53BE23F-34ED-35B3-9E6C-12B7BECC2267]@0xfffffe00418563a0->0xfffffe0041858eeb com.apple.driver.AppleInterruptControllerV3(1.0d1)[17E37838-AA51-37A2-B605-871825C22626]@0xfffffe00402ee730->0xfffffe00402f2ba3 dependency: com.apple.driver.AppleARMPlatform(1.0.2)[85AF824B-70B0-3C11-BE82-F90BD4A57DC8]@0xfffffe003f7d7d30->0xfffffe003f82b0f3 last started kext at 717088811: com.apple.filesystems.autofs 3.0 (addr 0xfffffe003ea21780, size 5927) loaded kexts: (skipped, see boot kernelcache) ** Stackshot Succeeded ** Bytes Traced 474581 (Uncompressed 1135664) **
0
0
56
19h
Your first subscription must be submitted with a new app version.
I have seen this problem arise from multiple sources. I am trying to submit my app but a new app version must be bundled with the subscription. The guide consistently says (copy pasted from the "Submit an In-App Purchase" guide) _"On the right, scroll down to the In-App Purchases and Subscriptions section. Click Select In-App Purchases or Subscriptions, or if you’ve already started selecting In-App Purchases or subscriptions, click Edit."_ The problem is there IS NO In-App Purchases or subscription section in the the app section. I have submitted again but at this point I'm loosing hope. I am hoping that adding a StoreKit config file this time on the Xcode side will help however again reading "submission (1)" does not give much hope. Please help as this has delayed launch by quite a lot.
0
0
22
19h
StoreKit 2 returns no products for auto-renewable subscriptions in TestFlight
Hi everyone, I’m having an issue where my TestFlight build cannot load auto-renewable subscription products from App Store Connect. The app is built with Flutter and uses StoreKit 2 through an in-app purchase implementation. The same subscription system works correctly on Google Play Billing and returns product details/prices there, but on iOS StoreKit returns no subscription products. I tested this on a real iPhone installed from TestFlight, not from Xcode debug and not using a local StoreKit configuration. The app requests four auto-renewable subscription product IDs. The IDs in code exactly match the product IDs in App Store Connect. The app diagnostics show: Platform: iOS StoreKit mode: StoreKit 2 Store available: true Requested IDs: 4 subscription product IDs Returned IDs: none Missing IDs: all requested product IDs Error source: app_store Error code: storekit_no_response Error message: StoreKit: Failed to get response from platform. Store note: The store accepted the query, but did not return details for these product IDs. Things I have already checked: Product IDs match exactly between Flutter code and App Store Connect Bundle ID matches the App Store Connect app record In-App Purchase capability is enabled Subscriptions are in one subscription group Subscription availability is set for all countries/regions The TestFlight build is installed on a real device Local StoreKit configuration was removed StoreKit reports store availability as true App Store Connect / In-App Purchase keys are configured for backend verification The same product-loading flow works on Google Play The current App Store Connect status for the subscriptions is: Subscriptions: Ready to Submit / Ready for Review Localizations: Prepare for Submission Also, the bank information is not submitted yet. My question is: can StoreKit in TestFlight return subscription product details while the first auto-renewable subscriptions are still only “Ready to Submit” and have not yet been submitted with an app version for review? Or will StoreKit return no products until: The first subscriptions are attached to an app version and submitted for review Subscription localizations are fully prepared/submitted Paid agreements, tax, and banking are fully completed Since StoreKit is available and accepts the product query, but returns zero products, I’m trying to understand whether this is expected App Store Connect behavior or if there is another configuration issue I should check. Thanks.
0
0
32
22h
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.
10
1
780
22h
Can Product.products / SKProductsRequest be used only for display metadata when EU storefront uses ExternalPurchaseCustomLink only?
This is a StoreKit / ExternalPurchaseCustomLink clarification. Apple DTS asked me to post the follow-up question here. We are designing an SDK for apps that support EU external purchase. In EU storefronts, the app will use ExternalPurchaseCustomLink only: No App Store In-App Purchase will be offered to users. No Product.purchase() will be called. No SKPaymentQueue.add(_:) will be called. The actual purchase will happen only on our external website through the ExternalPurchaseCustomLink flow. Question: In this EU ExternalPurchaseCustomLink-only setup, is it acceptable and supported to call Product.products(for:) / SKProductsRequest only to fetch product display metadata from App Store Connect? The metadata would only be used to display the product list UI, for example: product title / display name localized price currency / priceLocale formatting information The returned Product / SKProduct would not be used to start an App Store purchase. Or should apps avoid Product.products(for:) / SKProductsRequest entirely in EU storefronts where only ExternalPurchaseCustomLink is offered, and use their own product catalog instead?
1
0
120
22h
Age assurance in Texas
Hello Apple Developer Support Team, We understand from the Declared Age Range documentation that, in some regulated regions, the system automatically provides the person’s age range and they can’t decline sharing it with the app. We have implemented the API as prescribed in the documentation. For certain users in Texas, the API returns: isEligibleForAgeFeatures == true declaredAgeRangeRequired == true However, in our testing we observe that these Texas users can still decline sharing their age range, either via the system prompt or later via Settings, which results in no age range being provided to the app. This behavior appears inconsistent with the documentation’s statement that, in regulated regions, the person “can’t decline” sharing their age range, and it also raises questions for us about how this aligns with the applicable legal requirements in Texas. Could you please clarify: Whether this behavior (Texas users being able to decline sharing their age range even when declaredAgeRangeRequired is true) is expected, and Under what exact conditions the “they can’t decline sharing” behavior is enforced for Texas accounts (for example, only for new Apple Accounts created in Texas after a certain date, or only for particular age categories)? Any guidance on how we should interpret isEligibleForAgeFeatures and declaredAgeRangeRequired in this scenario would be greatly appreciated. Thank you.
0
0
41
1d
ApplePay create-session API timing out
We are an Apple Pay consumer and observed elevated response times and intermittent timeouts affecting the create‑session API (apple-pay-gateway.apple.com/paymentservices/paymentSession) between approximately 8:01 PM and 8:35 PM PST today. We are reaching out to understand whether there were any service disruptions during this timeframe, as we do not see corresponding updates on the system status pages. We would like to confirm whether this behavior was related to a broader Apple Pay issue or specific to our integration.
1
0
358
1d
New features for APNs token authentication now available
Team-scoped keys introduce the ability to restrict your token authentication keys to either development or production environments. Topic-specific keys in addition to environment isolation allow you to associate each key with a specific Bundle ID streamlining key management. For detailed instructions on accessing these features, read our updated documentation on establishing a token-based connection to APNs.
Replies
0
Boosts
0
Views
2.7k
Activity
Feb ’25
Meet State Reporting and the new MetricKit
Hello developers! Thank you for your dedication to creating apps with great performance. We’re excited to kick off another year of partnering with you on improving power and performance in your apps. At WWDC26, check out the following new things in the latest platform SDKs and Xcode 27 beta for performance. You can also join us online for a Power and Performance Group Lab on Tuesday, June 9 at 11 AM Pacific. Meet State Reporting and the new MetricKit State reporting: The new StateReporting framework lets your application express its state to downstream tools like Instruments and MetricKit. Make your telemetry and traces much more useful by adopting this simple API. MetricKit: In the 27 releases, the Swift-first MetricManager API replaces the MXMetricManager API. Combined with State Reporting, the new MetricKit provides more granular metrics to isolate performance problems faster. It also provides a more expressive API that is great to use in Swift, with improved Swift concurrency and Codable support. With this year’s releases, the MXMetricManager API is considered legacy. ▶️ To learn more, watch Meet the new MetricKit. Discover new features in Xcode organizer Metric goals: Xcode organizer now provides a goal metric for Battery Usage, Disk Writes, Hang Rate, Hitches, Memory, and Storage metrics, allowing you to prioritize performance engineering across more areas. Generate recommendations: Quickly resolve the highest impact performance issues in your app by using Generate Recommendations for Crash, Energy, Disk Write, Hang and Launch diagnostics. Insights overview: The new insights overview in Xcode organizer summarizes high-impact performance regressions for metrics and diagnostic reports, helping you plan and prioritize performance engineering work. Storage metrics: Storage metrics are now available in Xcode organizer, allowing you to monitor your app's Documents & Data and App Size across releases and catch regressions in cache usage and bundle size. Hitches metric: The new Hitches metric replaces the Scrolling metric in the organizer and now displays hitches for all animations in your app, giving you a comprehensive view of animation performance. ▶️ To learn more about other advancements in Xcode, watch What’s new in Xcode 27. Improve app responsiveness with Instruments Foundation Models: The Foundation Models instrument is redesigned with a tree view that lets you drill into individual requests, inspecting tool call arguments and results, inference prompts and responses, and token statistics. Use it to understand caching behavior, measure latency, and optimize throughput. System Trace: System calls, VM faults, and thread states are now unified into a single plot, with a new blending algorithm that stays readable even at high density. Once you spot something worth investigating, left/right key navigation lets you follow a thread's activity step by step, and the inspector provides quick actions like pinning the thread that made another thread runnable. System Trace now also draws thread priority and QoS over time, making it easier to identify priority inversions and unexpected QoS degradations that affect responsiveness. Swift Concurrency: New Main Actor and Global Concurrent Executor tracks let you visualize running tasks and executor queue depth over time, making it easier to spot task scheduling delays and actor contention. Tasks are now grouped into collections for faster navigation. Swift Tasks, Actors, and Executors instruments can now surface Call Trees, Flame Graphs, and Top Functions scoped to each entity — so you can pinpoint exactly where concurrency overhead lives. Top Functions: Helper functions and runtime internals can be expensive but hard to spot in a standard call tree. The new aggregation mode in Top Functions surfaces any function's total execution time across the entire call stack, making it easy to identify and prioritize hidden hotspots. Run Comparison: Compare call tree data across builds to identify regressions and performance wins. Results can be explored as an outline, flame graph, or top functions — choose whichever view best fits your workflow. ▶️ To learn more about profiling your app with Instruments, watch “Profile, fix, and verify: Improve app responsiveness with Instruments” ▶️ To learn about Foundation Models optimization, watch “Debug and profile agentic app experiences with Instruments”. If you have any questions about using State Reporting or the new MetricKit, create a post on the forums. For help creating a post, see Tips on writing a forum posts.
Replies
0
Boosts
0
Views
343
Activity
2w
iOS Universal Link opens app and then opens browser (Flutter + Universal Links) — only when using paths/params
Hi everyone, I’ve been stuck on an issue with iOS Universal Links for about a week and could really use some help. The problem When tapping a Universal Link on iOS, my Flutter app opens correctly (desired behavior) — but immediately afterward, Safari opens the same link in the browser. So both the app and the browser open. This only happens on iOS. On Android everything works as expected. What works If the link is simply the domain, like: https://mydomain.com …then the app opens without triggering the browser afterward. This is the correct behavior. What doesn’t work If the link includes a path or parameters, like: https://mydomain.com/path https://mydomain.com/path?param=value …then the app opens, and then the browser opens immediately after. What I’ve tried Verified my AASA file using Branch’s validator: https://branch.io/resources/aasa-validator/ → The AASA file is valid. Universal Links do open the correct screen inside the app — the issue is the unwanted second step (Safari opening). Behavior is consistent across different iOS devices. Extra details Using Flutter. Universal Links set up with the standard configuration (associatedDomains, AASA hosted at /.well-known/apple-app-site-association, etc.). Question Has anyone encountered this issue where Universal Links with paths/params open the app and then open Safari? What could cause iOS to trigger the browser fallback even when the AASA file is valid and the app handles the link correctly? Any insights, debugging tips, or known edge cases would be incredibly appreciated!
Replies
5
Boosts
2
Views
384
Activity
2h
XPC connection consistently invalidated on app upgrade
Hi, Our project is a MacOS SwiftUI GUI application that bundles a System Network Extension, signed with a Developer ID certificate for distribution outside of the app store. The system network extension is used to write a packet tunnel provider. The signing of the app & network extension is handled by XCode (v16.0.0), we do not run codesign ourselves. We have no issues with XPC or the system network extension during normal usage, nor when the application is installed on a user's device for the first time. The problem only arises when the user upgrades the application. I have experienced this issue myself, as have our users. It's been reported on Apple Silicon macbooks running at least macOS 15.3.2. Much like the SimpleFirewall example (which we used as a reference), we use XPC for basic communication of state between the app and NE. These XPC connections stop working when the user installs a new version of the app, with OS logs from the process indicating that the connection is immediately invalidated. Subsequent connection attempts are also immediately invalidated. Toggling the VPN in system settings (or via the app) does not resolve the problem, nor does restarting the app, nor does deleting and reinstalling the app, nor does restarting the device. The only reliable workaround is to delete the system extension in Login Items & Extensions, under Network Extensions. No device restart is necessary to garbage collect the old extension - once the extension is reapproved by the user, the XPC issue resolves itself. This would be an acceptable workaround were it possible to automate the deleting of the system extension, but that appears deliberately not possible, and requiring our users to do this each time they update is unreasonable. When the upgraded app is opened for the first time, the OSSystemExtensionRequest request is sent, and the outcome is that the previously installed system network extension is replaced, as both the CFBundleVersion and CFBundleShortVersionString differ. When this issue is encountered, the output of systemextensionsctl list shows the later version is installed and activated. I've been able to reproduce this bug on my personal laptop, with SIP on and systemextensionsctl developer off, but on my work laptop with SIP off and systemextensionsctl developer on (where the network extension is replaced on each activation request, instead of only when the version strings differ), I do not encounter this issue, which leads me to believe it has something to do with the notarization process. We notarize the pkg using xcrun notarytool, and then staple to the pkg. This is actually the same issue described in: https://developer.apple.com/forums/thread/711713 https://developer.apple.com/forums/thread/667597 https://developer.apple.com/forums/thread/742992 https://developer.apple.com/forums/thread/728063 but it's been a while since any of these threads were updated, and we've made attempts to address it off the suggestions in the threads to no avail. Those suggestions are: Switching to a .pkg installer from a .dmg As part of the .pkg preinstall, doing all of the following: Stopping the VPN (scutil --nc stop), shutting down the app (using osascript 'quit app id'), and deleting the app (which claims to delete the network extension, but not the approval in Login Items & Extensions remains??), by running rm -rf on the bundle in /Applications As part of the .pkg postinstall: Forcing macOS to ingest the App bundle's notarization ticket using spctl --assess. Ensuring NSXPCListener.resume() is called after autoreleasepool { NEProvider.startSystemExtensionMode() } (mentioned in a forum thread above as a fix, did not help.) One thing I'm particularly interested in is the outcome of this feedback assistant ticket, as I can't view it: FB11086599. It was shared on this forum in the first thread above, and supposedly describes the same issue. I almost find it hard to believe that this issue has been around for this many years without a workaround (there's system network extension apps out there that appear to work fine when updating, are they not using XPC?), so I wonder if there's a fix described in that FB ticket. Since I can't view that above feedback ticket, I've created my own: FB17032197
Replies
7
Boosts
0
Views
714
Activity
2h
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
Replies
23
Boosts
4
Views
2.0k
Activity
5h
The language of the pop-up window when using AccessorySetupKit to remove accessories.
When using AccessorySetupKit to remove accessories, a pop-up window appears when calling removeAccessory. However, the text in the pop-up window does not change according to my iPhone's language settings and remains only in English. Has anyone encountered this issue? Does Apple have any plans to address this compatibility issue?
Replies
3
Boosts
0
Views
65
Activity
5h
Running with CloudKit and Swift 6
Hello, everyone, I've started a thread and got a recommendation from DTS Engineer to move the conversation here. The sample code for https://developer.apple.com/documentation/coredata/sharing-core-data-objects-between-icloud-users is with Swift 5. I have a Swift 6 project and I'm running into issue porting the sample code. I've found that NSManagedObjectContext is sendable (https://fatbobman.com/en/posts/sendable-nsmanagedobjectcontext/). From it I can get the persistence controller, and from it I get the stores and this solves the Swift 6 migration path and looks good. i.e. not rely on the private and shared references to the persistence stores, I'll be getting them from the context. I've also notices that once I start to change the PersistenceController from lazy vars for lazy var previewContainer: NSPersistentCloudKitContainer and lazy var persistentContainer: NSPersistentCloudKitContainer to struct PersistenceController { static let shared = PersistenceController() @MainActor static let preview: PersistenceController = { let result = PersistenceController(inMemory: true) which is the default pattern for new CoreData applications (Xcode 26 / Xcode 27) I start getting preview crashes similar to https://developer.apple.com/forums/thread/654126. It turns out this is because of let persistenceController = PersistenceController.shared in the App. Quite unexpected. The persistence controller looks more suitable for actor based on the CloudKit sharing requirements. I saw such question on WWDC 26, however there was not enough time for an answer - is a good pattern to have the PersistenceController as an actor or in another way. Which is that most swiftly way for Swift 6?
Replies
0
Boosts
0
Views
16
Activity
5h
Entitlement for extension to have read-only access to host's task?
Hi all, I'm building an iOS app extension using ExtensionKit that works exclusively with its containing host app, presenting UI via EXHostViewController. I'd like the extension to have read-only access to the host's task for process introspection purposes. I'm aware this would almost certainly require a special entitlement. I know get-task-allow and the debugger entitlement exist, but those aren't shippable to the App Store. I'm looking for something that could realistically be distributed to end users. My questions: Does an entitlement exist (or is one planned) that would grant an extension limited, read-only access to its host's task—given the extension is already tightly coupled to the host? If not, is this something Apple would consider adding? The use case is an extension that needs to inspect host process state without the ability to modify it. Is there a path to request such an entitlement through the provisioning profile process, or is this fundamentally off the table for App Store distribution? It seems like a reasonable trust boundary given the extension already lives inside the host's app bundle, but I understand the security implications. Any insight appreciated. Thanks!
Replies
11
Boosts
0
Views
904
Activity
18h
Macbook m4 shutsdown 10min after closing the lid
panic(cpu 6 caller 0xfffffe00408d5cc8): "AMCC0 DCS GROUP 0 CHANNEL 0 AMPH_AIC_IRQ_EN_FLD error: INTSTS 0x00000002" @AppleH16GFamilyPlatformErrorHandler.cpp:4284 Debugger message: panic Memory ID: 0xff OS release type: User OS version: 25F80 Kernel version: Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:26 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8132 Fileset Kernelcache UUID: 810ED0581F8496D5014005FD8C299E58 Kernel UUID: 4FEB3A7D-D020-3910-B7AF-232C78D32651 Boot session UUID: BD3ADC9E-8793-494E-A0D9-2764E76D7F6E iBoot version: mBoot-18000.120.36 iBoot Stage 2 version: mBoot-18000.120.36 secure boot?: YES roots installed: 0 Paniclog version: 15 Debug Header address: 0xfffffe001de0d000 Debug Header entry count: 3 TXM load address: 0xfffffe002dd68000 TXM UUID: F0C1A57F-CE44-3DF4-9E86-0CFF02D7C00D Debug Header kernelcache load address: 0xfffffe003dd68000 Debug Header kernelcache UUID: 810ED058-1F84-96D5-0140-05FD8C299E58 SPTM load address: 0xfffffe001dd68000 SPTM UUID: BF0FEC4B-5AEA-35B8-BF85-518497A9C1C5 KernelCache slide: 0x0000000036d64000 KernelCache base: 0xfffffe003dd68000 Kernel slide: 0x0000000036d6c000 Kernel text base: 0xfffffe003dd70000 Kernel text exec slide: 0x000000003b488000 Kernel text exec base: 0xfffffe004248c000 mach_absolute_time: 0x1832dfe2d Epoch Time: sec usec Boot : 0x6a3ef98d 0x000c2461 Sleep : 0x6a3efa94 0x00069c13 Wake : 0x00000000 0x00000000 Calendar: 0x6a3efa96 0x000a335d Zone info: Zone map: 0xfffffe100c000000 - 0xfffffe360c000000 . VM : 0xfffffe100c000000 - 0xfffffe15d8000000 . RO : 0xfffffe15d8000000 - 0xfffffe1872000000 . GEN0 : 0xfffffe1872000000 - 0xfffffe1e3e000000 . GEN1 : 0xfffffe1e3e000000 - 0xfffffe240a000000 . GEN2 : 0xfffffe240a000000 - 0xfffffe29d6000000 . GEN3 : 0xfffffe29d6000000 - 0xfffffe2fa2000000 . DATA : 0xfffffe2fa2000000 - 0xfffffe360c000000 Metadata: 0xfffffe9654010000 - 0xfffffe965d810000 Bitmaps : 0xfffffe965d810000 - 0xfffffe96605b0000 Extra : 0 - 0 CORE 0 [EACC0] recently retired instr at 0x0000000000000000 CORE 1 [EACC0] recently retired instr at 0x0000000000000000 CORE 2 [EACC0] recently retired instr at 0x0000000000000000 CORE 3 [EACC0] recently retired instr at 0x0000000000000000 CORE 4 [EACC0] recently retired instr at 0x0000000000000000 CORE 5 [EACC0] recently retired instr at 0x0000000000000000 CORE 6 [PACC1] recently retired instr at 0x0000000000000000 CORE 7 [PACC1] recently retired instr at 0x0000000000000000 CORE 8 [PACC1] recently retired instr at 0x0000000000000000 CORE 9 [PACC1] recently retired instr at 0x0000000000000000 TPIDRx_ELy = {1: 0xfffffe2ea1fe8900 0: 0x0000000000000006 0ro: 0x0000000000000000 } CORE 0: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 1: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 2: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 3: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 4: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 5: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 6 is the one that panicked. Check the full backtrace for details. CORE 7: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 8: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 CORE 9: PC=0x0000000000000000, LR=0x0000000000000000, FP=0x0000000000000000 Compressor Info: 0% of compressed pages limit (OK) and 0% of segments limit (OK) with 0 swapfiles and OK swap space Panicked task 0xfffffe28d5fa3960: 0 pages, 634 threads: pid 0: kernel_task Panicked thread: 0xfffffe2ea1fe8900, backtrace: 0xfffffea9d5fdabd0, tid: 102 lr: 0xfffffe00424e2194 fp: 0xfffffea9d5fdac70 lr: 0xfffffe00426602a0 fp: 0xfffffea9d5fdace0 lr: 0xfffffe004265e234 fp: 0xfffffea9d5fdada0 lr: 0xfffffe0042491e9c fp: 0xfffffea9d5fdadb0 lr: 0xfffffe00424e24a4 fp: 0xfffffea9d5fdb2d0 lr: 0xfffffe0042dd35c4 fp: 0xfffffea9d5fdb2f0 lr: 0xfffffe00408d5cc8 fp: 0xfffffea9d5fdb630 lr: 0xfffffe00408d6090 fp: 0xfffffea9d5fdbef0 lr: 0xfffffe0042ccd0b0 fp: 0xfffffea9d5fdbf30 lr: 0xfffffe00402f16e4 fp: 0xfffffea9d5fdbfc0 lr: 0xfffffe0042661a50 fp: 0xfffffea9d5fdbfe0 lr: 0xfffffe0042491f40 fp: 0xfffffea9d5fdbff0 lr: 0xfffffe0042506714 fp: 0xfffffe5be553bee0 lr: 0xfffffe0042506670 fp: 0xfffffe5be553bf20 lr: 0xfffffe0042492b6c fp: 0x0000000000000000 Kernel Extensions in backtrace: com.apple.driver.AppleT8132(1.0)[47D903D9-8F8C-3E63-BD11-57EC7038EE44]@0xfffffe00408c9310->0xfffffe00408d96a3 dependency: com.apple.driver.AppleARMPlatform(1.0.2)[85AF824B-70B0-3C11-BE82-F90BD4A57DC8]@0xfffffe003f7d7d30->0xfffffe003f82b0f3 dependency: com.apple.driver.AppleEverestErrorHandler(1)[656D28F2-FD94-3B53-AD95-C1DEE28140D2]@0xfffffe003ff78f60->0xfffffe003ff79ebb dependency: com.apple.iokit.IOReportFamily(47)[B53BE23F-34ED-35B3-9E6C-12B7BECC2267]@0xfffffe00418563a0->0xfffffe0041858eeb com.apple.driver.AppleInterruptControllerV3(1.0d1)[17E37838-AA51-37A2-B605-871825C22626]@0xfffffe00402ee730->0xfffffe00402f2ba3 dependency: com.apple.driver.AppleARMPlatform(1.0.2)[85AF824B-70B0-3C11-BE82-F90BD4A57DC8]@0xfffffe003f7d7d30->0xfffffe003f82b0f3 last started kext at 717088811: com.apple.filesystems.autofs 3.0 (addr 0xfffffe003ea21780, size 5927) loaded kexts: (skipped, see boot kernelcache) ** Stackshot Succeeded ** Bytes Traced 474581 (Uncompressed 1135664) **
Replies
0
Boosts
0
Views
56
Activity
19h
Your first subscription must be submitted with a new app version.
I have seen this problem arise from multiple sources. I am trying to submit my app but a new app version must be bundled with the subscription. The guide consistently says (copy pasted from the "Submit an In-App Purchase" guide) _"On the right, scroll down to the In-App Purchases and Subscriptions section. Click Select In-App Purchases or Subscriptions, or if you’ve already started selecting In-App Purchases or subscriptions, click Edit."_ The problem is there IS NO In-App Purchases or subscription section in the the app section. I have submitted again but at this point I'm loosing hope. I am hoping that adding a StoreKit config file this time on the Xcode side will help however again reading "submission (1)" does not give much hope. Please help as this has delayed launch by quite a lot.
Replies
0
Boosts
0
Views
22
Activity
19h
Is it possible to clone data into existing files?
macOS has the clonefile*() calls to create a new file that's a clone of an existing file, but is it possible to clone only parts of an existing file into a different existing file? Linux (FICLONERANGE) and Windows (FSCTL_DUPLICATE_EXTENTS_TO_FILE) both provide this functionality. I previously filed FB12737014 with this request.
Replies
6
Boosts
0
Views
245
Activity
20h
KEEP WALKIE TALKIE
Pls apple i daily drive this and is a core part of the apple ecosystem i even bought my cousin a watch to solely talk to him whenever
Replies
1
Boosts
0
Views
31
Activity
21h
Where is my new siri??
still no sign of the new siri no app no nothing im on the ios 27 beta 2 and iphone 15 pro max what is this apple
Replies
0
Boosts
0
Views
27
Activity
22h
StoreKit 2 returns no products for auto-renewable subscriptions in TestFlight
Hi everyone, I’m having an issue where my TestFlight build cannot load auto-renewable subscription products from App Store Connect. The app is built with Flutter and uses StoreKit 2 through an in-app purchase implementation. The same subscription system works correctly on Google Play Billing and returns product details/prices there, but on iOS StoreKit returns no subscription products. I tested this on a real iPhone installed from TestFlight, not from Xcode debug and not using a local StoreKit configuration. The app requests four auto-renewable subscription product IDs. The IDs in code exactly match the product IDs in App Store Connect. The app diagnostics show: Platform: iOS StoreKit mode: StoreKit 2 Store available: true Requested IDs: 4 subscription product IDs Returned IDs: none Missing IDs: all requested product IDs Error source: app_store Error code: storekit_no_response Error message: StoreKit: Failed to get response from platform. Store note: The store accepted the query, but did not return details for these product IDs. Things I have already checked: Product IDs match exactly between Flutter code and App Store Connect Bundle ID matches the App Store Connect app record In-App Purchase capability is enabled Subscriptions are in one subscription group Subscription availability is set for all countries/regions The TestFlight build is installed on a real device Local StoreKit configuration was removed StoreKit reports store availability as true App Store Connect / In-App Purchase keys are configured for backend verification The same product-loading flow works on Google Play The current App Store Connect status for the subscriptions is: Subscriptions: Ready to Submit / Ready for Review Localizations: Prepare for Submission Also, the bank information is not submitted yet. My question is: can StoreKit in TestFlight return subscription product details while the first auto-renewable subscriptions are still only “Ready to Submit” and have not yet been submitted with an app version for review? Or will StoreKit return no products until: The first subscriptions are attached to an app version and submitted for review Subscription localizations are fully prepared/submitted Paid agreements, tax, and banking are fully completed Since StoreKit is available and accepts the product query, but returns zero products, I’m trying to understand whether this is expected App Store Connect behavior or if there is another configuration issue I should check. Thanks.
Replies
0
Boosts
0
Views
32
Activity
22h
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
10
Boosts
1
Views
780
Activity
22h
Can Product.products / SKProductsRequest be used only for display metadata when EU storefront uses ExternalPurchaseCustomLink only?
This is a StoreKit / ExternalPurchaseCustomLink clarification. Apple DTS asked me to post the follow-up question here. We are designing an SDK for apps that support EU external purchase. In EU storefronts, the app will use ExternalPurchaseCustomLink only: No App Store In-App Purchase will be offered to users. No Product.purchase() will be called. No SKPaymentQueue.add(_:) will be called. The actual purchase will happen only on our external website through the ExternalPurchaseCustomLink flow. Question: In this EU ExternalPurchaseCustomLink-only setup, is it acceptable and supported to call Product.products(for:) / SKProductsRequest only to fetch product display metadata from App Store Connect? The metadata would only be used to display the product list UI, for example: product title / display name localized price currency / priceLocale formatting information The returned Product / SKProduct would not be used to start an App Store purchase. Or should apps avoid Product.products(for:) / SKProductsRequest entirely in EU storefronts where only ExternalPurchaseCustomLink is offered, and use their own product catalog instead?
Replies
1
Boosts
0
Views
120
Activity
22h
Age assurance in Texas
Hello Apple Developer Support Team, We understand from the Declared Age Range documentation that, in some regulated regions, the system automatically provides the person’s age range and they can’t decline sharing it with the app. We have implemented the API as prescribed in the documentation. For certain users in Texas, the API returns: isEligibleForAgeFeatures == true declaredAgeRangeRequired == true However, in our testing we observe that these Texas users can still decline sharing their age range, either via the system prompt or later via Settings, which results in no age range being provided to the app. This behavior appears inconsistent with the documentation’s statement that, in regulated regions, the person “can’t decline” sharing their age range, and it also raises questions for us about how this aligns with the applicable legal requirements in Texas. Could you please clarify: Whether this behavior (Texas users being able to decline sharing their age range even when declaredAgeRangeRequired is true) is expected, and Under what exact conditions the “they can’t decline sharing” behavior is enforced for Texas accounts (for example, only for new Apple Accounts created in Texas after a certain date, or only for particular age categories)? Any guidance on how we should interpret isEligibleForAgeFeatures and declaredAgeRangeRequired in this scenario would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
41
Activity
1d
ApplePay create-session API timing out
We are an Apple Pay consumer and observed elevated response times and intermittent timeouts affecting the create‑session API (apple-pay-gateway.apple.com/paymentservices/paymentSession) between approximately 8:01 PM and 8:35 PM PST today. We are reaching out to understand whether there were any service disruptions during this timeframe, as we do not see corresponding updates on the system status pages. We would like to confirm whether this behavior was related to a broader Apple Pay issue or specific to our integration.
Replies
1
Boosts
0
Views
358
Activity
1d
problems of screen time
Yesterday I checked the screen time of the previous day and I thought it was 7h.But it is presented to be 10h and a half today.I'm confusing why the ended screen time could change.
Replies
1
Boosts
0
Views
36
Activity
1d